Передача собственный структура в OpenGL ES 2.0 Шейдер
-
29-09-2019 - |
Вопрос
Я хочу попробовать пример освещения из книги по программированию OpenGL ES 2.0. В шейдере они сделали две структуры.
struct directional_light
{
vec3 direction; // normalized light direction in eye space
vec3 halfplane; // normalized half-plane vector
vec4 ambient_color;
vec4 diffuse_color;
vec4 specular_color;
};
struct material_properties
{
vec4 ambient_color;
vec4 diffuse_color;
vec4 specular_color;
float specular_exponent;
};
Они также сделали две форму, основанные на этих структурах.
uniform material_properties u_material_properties;
uniform directional_light u_directional_light;
Проблема в том, что я не знаю, как пройти собственные структуры в фактический шейдер.
Я хочу создать те же структуры в моем главном коде и передавать объекты в шейдер. Как это возможно?
С уважением Никлас
Решение
Вы не можете, OpenGL ES не имеет этого функциональности, для загрузки вы должны получить местоположение каждой из ваших вложенных переменных и вызовите глунообразный * на каждом из них.
Например:
GLuint loc = glGetUniformLocation(program, "u_material_properties.ambient_color");
glUniform4f(loc, 1.0, 1.0, 1.0, 0.0);
Не связан с StackOverflow