tutorial - GLSL/C++: matrices de uniformes?
glsl download (2)
Me gustaría dejar las luces de OpenGL y hacer las mías. Me gustaría que mis shaders permitieran una cantidad variable de luces.
¿Podemos declarar una serie de uniformes en sombreadores GLSL? Si es así, ¿cómo estableceríamos los valores de esos uniformes?
Sí, es posible declarar una matriz de uniformes en sombreadores GLSL. Simplemente google "array uniforme glsl" para algunos ejemplos (editar: o ver ejemplo de datenwolf). Sin embargo, hay limitaciones en cuanto a la cantidad de uniformes que se pueden enviar a diferentes tarjetas gráficas (al menos en las anteriores, no estoy seguro de cuáles son las actuales (aunque me imagino que aún las habría)).
Si decides ir por la ruta de los uniformes, te sugiero usar tampones uniformes. Según http://www.opengl.org/wiki/Uniform_Buffer_Object , "Cambiar entre enlaces de buffer uniformes es típicamente más rápido que cambiar docenas de uniformes en un programa".
Si tiene un gran número de luces y parámetros, también puede enviar los datos como búferes flotantes.
Sí, esto es posible. Usted declara matrices uniformes similares a cómo lo haría en C, por ejemplo
uniform float v[10];
Luego puede establecer sus valores usando glUniform{1,2,3,4}{f,i}v
GLfloat v[10] = {...};
glUniform1fv(glGetUniformLocation(program, "v"), 10, v);