Передача массива vec4 (GLfloat quad) как унифицированного шейдерам openGL - PullRequest
1 голос
/ 20 января 2012

Я хочу передать массив vec4 фрагментному шейдеру OpenGL как униформу, и это кажется намного сложнее, чем я надеялся. Наступил момент, когда я пытаюсь передать массив GLfloat и восстановить vec4s в шейдере, но он все еще не работает

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

#extension GL_NV_shader_buffer_load : enable
uniform GLfloat* points;

и из кода звоните:

glUniform1fv(points, pointsLen*4, points);

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

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

1 Ответ

1 голос
/ 20 января 2012

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

Так что вам нужно поместить ваши данные в буферный объект, а затем сделать его резидентным (чтобы вы могли получить адрес GPU). Вы не даете ему указатель процессора на массив данных.

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

...