He estado buscando ejemplos de sombreadores en OpenGL y he visto algunos estilos diferentes. Algunos sombreadores utilizan específicamente los tipos incorporados (es decir, gl_Vertex) para transferir datos hacia y desde el código de la aplicación y el sombreador.Mejores prácticas de OpenGL ES 2.0 Shader
Algunos sombreadores utilizan los distintos tipos para transferir datos de vértice a sombreador de fragmentos en lugar de gl_Position y gl_FragColor.
Algunos shaders utilizan los prefijos 'en' y 'fuera' para especificar la transferencia de datos:
in vec3 vertex;
void main() {
gl_Position = projection_matrix * modelview_matrix * vec4(vertex, 1.0);
}
... mientras que otros utilizan atributos:
attribute vec4 vertex_attrib;
attribute vec4 tex_coord_attrib;
attribute vec4 color_attrib;
uniform mat4 mvp_matrix;
uniform mat4 texture_matrix;
varying vec4 frag_color;
varying vec2 tex_coord;
void main(void)
{
gl_Position = mvp_matrix * vertex_attrib;
vec4 transformed_tex_coord = texture_matrix * tex_coord_attrib;
tex_coord = transformed_tex_coord.st/transformed_tex_coord.q;
frag_color = color_attrib;
}
Mi pregunta es, ¿cuál es la forma preferida en GLES 2.0 para escribir sombreadores? ¿Hay alguna guía de mejores prácticas? ¿Alguien puede proporcionar un ejemplo de un vértice & sombreador de fragmentos que es un ejemplo brillante de 'qué hacer'?
Gracias.
'in' y' out' se puede aplicar con un poco de ayuda de las macros. – user1095108