À quoi ressemblent les shaders GLSL par défaut? pour la version 330

À quoi ressemblent les shaders GLSL vertex, fragment et geometry par défaut pour la version # 330 ?

Je vais utiliser #version 330 GLSL version 3.30 NVIDIA via le compilateur Cg, car c'est ce que ma carte graphique prend en charge.

Avec les shaders par défaut, je veux dire les shaders qui font exactement la même chose que la carte graphique ferait lorsque le programme shader est désactivé.

Je ne trouve pas un bon exemple pour #version 330. Cherché sur google tous les jours. Je ne sais pas si le terme Shader par défaut est appelé quelque chose d'autre comme trivial ou basique et si c'est pourquoi je ne peux pas le trouver.

Toutes les recommandations pour un livre avec la version 330 ou un lien vers un tutoriel débutant facile avec la version 330 serait génial aussi.

Exemple d'un shader de sommet trivial dans # Version 110, la transformation de sommet par défaut

#version 110

void main()
{
    gl_Position = gl_ProjectionMatrix * gl_ModelViewMatrix * gl_Vertex;
}

Exemple d'un shader fragment trivial dans # Version 110, transforme la couleur en Rouge

#version 110

void main()
{
    gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
}
23
demandé sur Alim Ul Gias 2011-12-26 06:07:10

1 réponses

Il n'y a pas de shaders "par défaut" avec OpenGL. Il ressemble à ce que vous voulez un exemple très simple d'un shader qui transforme les sommets en espace de clip et leur donne une couleur, alors voilà:

Vertex shader:

#version 330

layout(location = 0)in vec4 vert;

uniform mat4 projection;
uniform mat4 view;
uniform mat4 model;

void main()
{
    gl_Position = projection * view * model * vert;
}

Fragment shader:

#version 330

out vec4 fragColor;

void main()
{
    fragColor = vec4(1.0, 0.0, 0.0, 1.0);
}

Le profil OpenGL 3.3 de base supprime la prise en charge de nombreuses anciennes fonctions fixes comme la pile matricielle. Vous devez gérer vos propres matrices et les envoyer à vos shaders. Il n'y a pas de ftransform, et gl_Position est à peu près la seule variable gl_ * valide.

Alors que glBindAttribLocation n'est pas obsolète, la méthode préférée pour définir l'emplacement des attributs de sommet est via "layout(location = x)" dans GLSL.

Dans le vertex shader, "attribut" est maintenant "dans" et "divers" est maintenant "out". Dans le shader fragment, "variant" est maintenant " in " et "gl_FragColor" est défini par une variable" out". Je crois que gl_FragColor est toujours valide, mais maintenant, il est possible d'utiliser une variable pour définir le couleur.

Ce tutoriel est très bon et enseigne Core OpenGL et GLSL 3.30, je vous recommande de l'utiliser pour vous aider à en savoir plus sur GLSL. Rappelez-vous également que les Pages de référence GLSL sont votre ami.

35
répondu Robert Rouhani 2016-08-18 11:30:22