2010-08-23 7 views
1

L'OpenGL Superbible 5ème édition a été récemment publié, et il documente OpenGL 3.3. Malheureusement, OS X ne supporte que OpenGL 2.1 et GLSL version 1.20. Le premier vertex shader non trivial ils vous donnent ne peut pas compiler avec le message d'erreur:Que dois-je faire pour compiler ce vertex shader Superbe OpenGL sur OS X?

ERROR: 0:5: '' : Version number not supported by GL2 
ERROR: 0:8: 'in' : syntax error syntax error 

Le shader est, comme il est écrit:

// Simple Diffuse lighting Shader 
// Vertex Shader 
// Richard S. Wright Jr. 
// OpenGL SuperBible 
#version 130 

// Incoming per vertex... position and normal 
in vec4 vVertex; 
in vec3 vNormal; 

// Set per batch 
uniform vec4 diffuseColor; 
uniform vec3 vLightPosition; 
uniform mat4 mvpMatrix; 
uniform mat4 mvMatrix; 
uniform mat3 normalMatrix; 

// Color to fragment program 
smooth out vec4 vVaryingColor; 

void main(void) 
    { 
    // Get surface normal in eye coordinates 
    vec3 vEyeNormal = normalMatrix * vNormal; 

    // Get vertex position in eye coordinates 
    vec4 vPosition4 = mvMatrix * vVertex; 
    vec3 vPosition3 = vPosition4.xyz/vPosition4.w; 

    // Get vector to light source 
    vec3 vLightDir = normalize(vLightPosition - vPosition3); 

    // Dot product gives us diffuse intensity 
    float diff = max(0.0, dot(vEyeNormal, vLightDir)); 

    // Multiply intensity by diffuse color 
    vVaryingColor.rgb = diff * diffuseColor.rgb; 
    vVaryingColor.a = diffuseColor.a; 

    // Let's not forget to transform the geometry 
    gl_Position = mvpMatrix * vVertex; 
    } 

Répondre

0

Mise à jour 2011: A partir de OS X Lion, ce n'est plus le cas. Lion a ajouté le support pour OpenGL 3.2. Malheureusement, je suis venu à croire que c'est une course de fous. Le livre utilise une bibliothèque GLTools (distribuée sur le site Web) qui impose la transmission de divers paramètres d'une manière fondamentalement incompatible avec OpenGL 2.1.

Si c'était un exemple, il pourrait être réécrit, mais c'est un certain nombre d'exemples et l'effort serait écrasant pour le retour si vous essayiez de vous enseigner OpenGL.

Vous avez deux options:

  1. Acheter une machine Windows qui prend en charge OpenGL 3 et mettre votre Mac dans le coin jusqu'à ce que les étapes d'Apple pour soutenir la nouvelle norme.
  2. Achetez la 4e édition du livre qui est encore en impression.

De l'website:

Si vous êtes toujours intéressé par la fonctionnalité dépréciée de 3.x pré-OpenGL, nous vous recommandons la quatrième édition, qui est encore en version imprimée, et qui couvre OpenGL 2.1 et le pipeline de fonction fixe assez complètement.

1

Court de changer le #version pour correspondre 120, vous également besoin de changer in à attribute et out à varying. Je pourrais manquer quelque chose d'autre, mais c'est tout ce qui se passe pour moi maintenant.

4

remplacer la version GLSL par:

#version 120 

mais 1.2 le mot-clé et sortir ne sont pas définis encore, il était attribut et variable.

smooth varying vec4 vVaryingColor; 

Vous aurez probablement besoin de faire des changements similaires dans le fragment shader

Pour vVertex et vNormal, ceux-ci sont des noms personnalisés, ce qui signifie qu'ils ont été liés dans le code C++. Le moyen le plus simple de contourner ce problème est de les renommer gl_Vertex et gl_Normal

+0

Merci! Je vais donner un coup de feu quand je suis de retour à mon ordinateur et revenir à la pile avec les résultats. –