我一直在寻找OpenGL中着色器的示例,并且我已经看到了一些不同的样式。一些着色器专门使用内置类型(即,gl_Vertex)来传递应用程序代码和着色器之间的数据。OpenGL ES 2.0着色器最佳实践
一些着色器使用不同的类型将数据从顶点传输到片段着色器,而不是使用gl_Position和gl_FragColor。
某些着色器使用前缀“中”和“出”来指定数据传输:
in vec3 vertex;
void main() {
gl_Position = projection_matrix * modelview_matrix * vec4(vertex, 1.0);
}
...而其他人使用的属性:
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;
}
我的问题是,什么是GLES 2.0中的首选方法是编写着色器?是否有最佳实践指南?有人可以提供一个顶点&片段着色器的例子,这是一个'做什么'的光辉榜样?
谢谢。
'in'和'out'可以从宏中得到一些帮助。 – user1095108