I've been searching for examples of shaders in OpenGL and I've seen some varying styles. Some shaders specifically use the built in types (ie. gl_Vertex) to transfer data to and from the application code and the shader.
Some shaders use the varying types to transfer data from vertex to fragment shader instead of gl_Position and gl_FragColor.
Some shaders use the prefixes 'in' and 'out' to specify data transfer:
in vec3 vertex;
void main() {
gl_Position = projection_matrix * modelview_matrix * vec4(vertex, 1.0);
}
... while others use attributes:
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;
}
My question is, what is the preferred way in GLES 2.0 to write shaders? Is there a best practices guide? Can someone provide an example of a vertex & fragment shader that is a shining example of 'what to do'??
Thanks.
Finally, the best option for you would be to read OpenGL ES 2.0 Specification as suggested by Nicol Bolas. Rules first, best practices - later. Good luck!