Что мне нужно сделать, чтобы заставить этот вершинный шейдер OpenGL скомпилироваться в OS X? - PullRequest
1 голос
/ 23 августа 2010

Недавно было выпущено 5-е издание OpenGL Superbible, в котором документируется OpenGL 3.3. К сожалению, OS X поддерживает только OpenGL 2.1 и GLSL версии 1.20. Самый первый нетривиальный вершинный шейдер, который они вам дают, не компилируется с сообщением об ошибке:

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

Шейдер, как написано:

// 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;
    }

Ответы [ 3 ]

4 голосов
/ 23 августа 2010

заменить версию glsl на:

#version 120

но в 1.2 ключевое слово in and out еще не было определено, оно было атрибутом и варьировалось.

smooth varying vec4 vVaryingColor;

Возможно, вам понадобится внести аналогичные изменения во фрагментный шейдер

Для vVertex и vNormal это пользовательские имена, что означает, что они были связаны в коде C ++. Самый простой способ обойти это - переименовать их в gl_Vertex и gl_Normal

1 голос
/ 23 августа 2010

За исключением изменения #version для соответствия 120, вам также необходимо изменить in на attribute и out на varying.Я могу пропустить что-то еще, но это все, что показывает мне сейчас.

0 голосов
/ 03 сентября 2010

Обновление 2011 : Начиная с OS X Lion, это уже не так.Lion добавил поддержку OpenGL 3.2.

К сожалению, я пришел к выводу, что это глупое поручение.В книге используется библиотека GLTools (распространяется на веб-сайте), которая обеспечивает передачу различных параметров способом, который принципиально несовместим с OpenGL 2.1.

Если бы это был один пример, его можно было бы переписать, но этоРяд примеров и усилия будут огромными для возвращения, если вы пытаетесь научить себя OpenGL.

У вас есть два варианта:

  1. Купите машину с Windows, поддерживающую OpenGL 3, и поставьте свой Mac в угол, пока Apple не перейдет к поддержке нового стандарта.
  2. Купите 4-е издание книги, которая все еще в печати.

С веб-сайта :

Если вы все еще заинтересованы в устаревшей функциональности pre-OpenGL 3.x, мы рекомендуем четвертое издание, который все еще находится в печати, и который довольно подробно описывает OpenGL 2.1 и конвейер с фиксированными функциями.

...