Мне нужно передать переменную атрибута в шейдер, чтобы знать, как вычислить gl_Position
, Это значение должно отличаться для любого нарисованного объекта. Это декларация:
attribute int drawText;
По его значению я решаю, как рассчитать gl_Position
, Это горячо, я передаю это в программе C ++:
// Pass some uniforms
GLint location= glGetAttribLocation(program_id, (char*)"drawText");
glEnableVertexAttribArray(location);
glVertexAttribI1i(location,1);
glutSolidCube(15);
glDisableVertexAttribArray(location);
Но я получаю ошибку сегментации. Я попытался прокомментировать строку, куда я отправляю атрибут (glVertexAttribI1i
), и в этом случае программа не падает. В чем может быть проблема?
Целочисленные атрибуты вершин требуют OpenGL 3.0 и GLSL> = 1.30.
Может быть, вы используете GLEW? Вы должны проверить это (void*)(glVertexAttribI1i) != 0
перед его использованием.
Более того, когда атрибут имеет одинаковое значение для каждой вершины, как в опубликованном вами фрагменте, вы должны использовать униформу.
Убедитесь, что тип данных совпадает, или имя атрибута «drawText» является правильным.