OpenGL ES 2.0 Shader best practices

Я искал примеры шейдеров в OpenGL и увидел несколько разных стилей. Некоторые шейдеры специально используют встроенные типы (т.е. gl_Vertex) для передачи данных от кода приложения к шейдеру и обратно.

Некоторые шейдеры используют различные типы для передачи данных от вершин к шейдеру фрагментов вместо gl_Position и gl_FragColor.

Некоторые шейдеры используют префиксы 'in' и 'out' для указания передачи данных:

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? Есть ли руководство по лучшей практике? Может ли кто-нибудь привести пример вершинного и фрагментного шейдера, который является ярким примером того, "что нужно делать"?

Спасибо.

14
задан genpfault 24 September 2011 в 18:43
поделиться