2010-08-23 16 views
1

最近發佈了OpenGL Superbible 5th Edition,它記錄了OpenGL 3.3。不幸的是,OS X只支持OpenGL 2.1和GLSL 1.20版本。他們給你的第一個不平凡的頂點着色器失敗,出現錯誤消息編譯:我需要做什麼才能讓這個OpenGL超炫的頂點着色器在OS X上編譯?

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

回答

0

更新2011:從OS X Lion開始,這不再是這種情況。 Lion已經增加了對OpenGL 3.2的支持。

不幸的是,我已經認爲這是一個傻瓜的差事。本書使用了一個GLTools庫(分佈在網站上),它以與OpenGL 2.1基本不兼容的方式強制傳入各種參數。

如果它是一個例子,它可以被重寫,但是它是一些例子,如果你試圖自學OpenGL,那麼返回的努力將是壓倒性的。

你有兩個選擇:

  1. 購買Windows機器,支持OpenGL 3,把你的Mac在角落裏,直到蘋果臺階,以支持新的標準。
  2. 購買仍在印刷中的第4版本書。

website

如果你仍然有興趣在OpenGL預3.X的否決的功能,我們建議第四版,這仍然是在打印,以及覆蓋的OpenGL 2.1和固定功能流水線相當徹底。

1

改變#version的短匹配120,你還需要將in更改爲attributeoutvarying。我可能會錯過其他的東西,但這就是我現在所看到的。

4

通過更換GLSL版本:

#version 120 

但在1.2和移出均尚未定義關鍵字,這是屬性和不同的。

smooth varying vec4 vVaryingColor; 

你可能需要在片段着色器

對於vVertex和vNormal類似的變化,這些都是自定義名稱,這意味着他們在C++代碼綁定。解決此問題的最簡單方法是將它們重命名爲gl_Vertex和gl_Normal

+0

謝謝!當我回到我的電腦時,我會給這個鏡頭一個鏡頭,然後回頭看看結果。 – 2010-08-23 17:07:51

相關問題