2014-07-14 4 views
3

J'utilise OpenGL shader builder v2.2.2 et j'ai pris un exemple de code de book. Pour vertex shaderErreurs OpenGL shader builder lors de la compilation

#version 140 
uniform float CoolestTemp; 
uniform float TempRange; 
uniform mat4 MVPMatrix; 
in vec4 mcVertex; 
in float VertexTemp; 

out float Temperature; 
void main() { 

    Temperature = (VertexTemp - CoolestTemp)/TempRange; 
    gl_Position = MVPMatrix * mcVertex; 
} 

Et pour shader fragment

#version 140 

uniform vec3 CoolestColor; 
uniform vec3 HottestColor; 

in float Temperature; 
out vec4 FragmentColor; 

void main() 
{  
    vec3 color = mix(CoolestColor, HottestColor, Temperature); 
    FragmentColor = vec4(color, 1.0); 
} 

Mon problème est d'exécuter ce code parce que la version 140 et 320 n'est pas pris en charge. Ensuite, j'ai essayé d'enlever les versions, le compilateur a dit "qualificatifs invalides" dans "contexte global variable" et même pour 'out', puis j'ai essayé de remplacer in/out par 'variant' mais dans fragment shader "Left-hand-side ne doit pas être en lecture seule "erreur apparaît. Pour le vertex shader, l'avertissement concernant les champs variables ne sera pas lu dans les étapes suivantes. Comment puis-je comprendre pour adapter un ancien code à nouveau? Donc, je suis absolument nouveau à GLSL

Répondre

8

Il est beaucoup plus commun d'aller de l'ancienne dénomination à la nouvelle. Mais si vous avez besoin de l'autre côté, la conversion pour le vertex shader est:

in --> attribute 
out --> varying 

Pour fragment shader:

in --> varying 
out --> (delete) 

Pour la out du fragment shader, vous pouvez supprimer la déclaration de la variable . Au lieu de cela, utilisez la variable intégrée gl_FragColor.

Pour exemple, le vertex shader ressemblera à ceci:

uniform float CoolestTemp; 
uniform float TempRange; 
uniform mat4 MVPMatrix; 
attribute vec4 mcVertex; 
attribute float VertexTemp; 
varying float Temperature; 

void main() { 
    Temperature = (VertexTemp - CoolestTemp)/TempRange; 
    gl_Position = MVPMatrix * mcVertex; 
} 

Et le fragment shader:

uniform vec3 CoolestColor; 
uniform vec3 HottestColor; 
varying float Temperature; 

void main() { 
    vec3 color = mix(CoolestColor, HottestColor, Temperature); 
    gl_FragColor = vec4(color, 1.0); 
} 
+0

enfin une information claire, merci beaucoup! – dan