OpenGL ES 2.0 Shader meilleures pratiques
J'ai été à la recherche pour des exemples de shaders OpenGL et j'ai vu des différents styles. Certains shaders utiliser le construit en types (ie. gl_Vertex) pour transférer des données vers et depuis le code de l'application et le shader.
Certains shaders utiliser les divers types pour le transfert de données à partir du sommet de fragment shader au lieu de gl_Position et gl_FragColor.
Certains shaders utiliser les préfixes " in " et " out " pour spécifier de transfert de données:
in vec3 vertex;
void main() {
gl_Position = projection_matrix * modelview_matrix * vec4(vertex, 1.0);
}
... tandis que d'autres utilisent des attributs:
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;
}
Ma question est, quel est le meilleur moyen dans GLES 2.0 pour écrire des shaders? Est-il un guide des meilleures pratiques? Quelqu'un peut-il fournir un exemple d'un sommet & fragment shader est un brillant exemple de " que faire??
Grâce.
OriginalL'auteur MarkP | 2011-09-24
Vous devez vous connecter pour publier un commentaire.
Enfin, la meilleure option pour vous serait de lire OpenGL ES 2.0 comme suggéré par Nicol Bolas. Les règles d'abord, les meilleures pratiques - plus tard. Bonne chance!
in
etout
peut être appliqué avec un peu d'aide de macros.OriginalL'auteur kvark
Votre plus gros problème, c'est que vous êtes à la recherche au bureau de shaders GLSL et à essayer de comprendre ce que cela signifie pour GLSL-ES.
Comme OpenGL ES n'est pas la même chose que OpenGL, GLSL-ES n'est pas la même chose que GLSL. GLSL a progressé assez loin dans les années depuis GLSL-ES scission. Par conséquent, vous ne peut pas utilisation de bureau GLSL shaders comme rien de plus qu'un guide approximatif pour la mise en œuvre de GLSL-ES shaders. Pas plus que vous ne pourriez utiliser C++ textes comme un guide pour C.
Les langues sont assez similaires, mais le bureau GLSL a dû renoncer à beaucoup de mots-clés qui GLSL-ES n'a pas encore abandonné. De même, la vieille école GLSL (1.20) a mis en place beaucoup de choses que GLSL-ES et les versions ultérieures de GLSL enlever, comme intégré dans les entrées et les sorties. Donc vous verrez un beaucoup de bureau shaders GLSL qui flat-out fonctionne pas sur GLSL-ES. En effet, si vous trouvez une qui ne, il ne sera par pur accident.
Je ne sais pas beaucoup sur les guides de GLSL-ES, mais le plus facile à trouver et à utiliser est la source ultime: L'OpenGL ES Shading Language Specification (PDF). Les Extensions peuvent tas de fonctionnalités, mais qui PDF définit le langage de base. Votre prochain pari serait de tout matériel explicitement marqué comme OpenGL ES 2.0 spécifiques.
En gros, tandis que vous pouvez comprendre ce qu'est un bureau shader GLSL est en train de faire, il est préférable de regarder l'algorithme et non pas la syntaxe si vous êtes en train de rédiger un OpenGL ES 2.0 de l'application.
J'ai l'habitude des exemples de spécifications en tant que bien, mais la lecture grâce à ce document PDF a été très éclairante pour moi, et je vous recommande vraiment de c'est aussi.
OriginalL'auteur Nicol Bolas
Il y a des exemples de code pour OpenGL ES 2.0 Développeur Android OpenGL ES 2.0, tutoriels et aussi dans le sdk exemple de code. Mais vous aurez toujours besoin du même fichier de référence de gens continuent à mentionner: L'OpenGL ES Shading Language Specification" pour comprendre que le code de l'échantillon, puisque Google n'a pas souvent d'expliquer ce qu'ils font. Et quand ils le font, ils ne sont pas toujours en tenir à la norme OpenGL terminologie.
Cela dit, vous pouvez trouver plus facile de se référer à l'OpenGL ES 2.0 pages de Référence à http://www.khronos.org/opengles/sdk/docs/man/ lors de la lecture du code.
OriginalL'auteur Matt J.