2012-01-19 2 views
1

Я хочу передать массив vec4 в шейдер фрагмента OpenGL как унифицированный, и это кажется намного сложнее, чем я надеялся. Он пришел к точке, где я пытаюсь передать массив GLfloat-х и реконструировать vec4s в затенении, но он по-прежнему не работаетПередача массива vec4 (GLfloat quad) как равномерная для шейдеров openGL

Я попытался объявить в vshader:

#extension GL_NV_shader_buffer_load : enable 
uniform GLfloat* points; 

и от код, вызов:

glUniform1fv(points, pointsLen*4, points); 

думать, что я передаю поплавки в группах 1, и я уже 4 раза больше vec4s.
К сожалению, этот vshader не передает компиляцию программе GLSL.

Как исправить это? Либо установив это, либо сделав это совершенно по-другому :)

+0

Неужели ['равномерное положение vec4 [50]'] (http://www.opengl.org/wiki/GLSL_Types#Arrays) не работает? – genpfault

+0

Это действительно работает, но во время компиляции я не знаю. –

ответ

1

shader_buffer_load от NVIDIA не работает. Когда вы объявляете указатель uniform, это означает, что вы сообщаете компилятору, что вы предоставите адрес GPU, где хранятся данные для этого указателя. Этот адрес графического процессора поступает из буфера .

Поэтому вам нужно поместить свои данные в объект-буфер и затем сделать его резидентным (чтобы вы могли получить адрес графического процессора). Вы не даете ему указателя процессора на массив данных.

Если вы просто хотите иметь массив данных, вам вообще не нужен shader_buffer_load. GLSL позволяет создавать однородные массивы. Вам просто нужно указать явный размер.

+0

Я вижу. Большое спасибо ! –

Смежные вопросы