2011-10-22 55 views
1

我想爲點精靈製作着色器 - 迄今爲止,everthing在iOS上工作。但Mac OS X. 我的頂點着色器:在Mac上不能使用gl_PointCoord?

attribute vec4 position; 
attribute vec4 color; 
attribute vec2 texcoord; 

varying vec4 colorVarying; 

uniform mat4 modelViewProjectionMatrix; 
uniform float pointSize; 

void main() 
{ 
    gl_Position = modelViewProjectionMatrix * position; 
    colorVarying = color; 
    gl_PointSize = pointSize; 
} 

我的片段着色器:

varying lowp vec4 colorVarying; 
uniform lowp float textureFlag; 
uniform sampler2D texture; 

void main() 
{ 
    gl_FragColor = textureFlag * texture2D(texture, gl_PointCoord) * colorVarying + 
    (1.0 - textureFlag) * colorVarying; 

} 

片段着色器無法編譯,因爲 「gl_PointCoord」 在Mac上。在Mac上,我在着色器中添加了「#define lowp」作爲預處理器。

如果我在着色器上添加​​了「#version 120 \ n」,它在Mac上編譯得很好,但沒有顯示任何內容(但是在iOS上它不起作用,如果我使用#version在着色器的頂部標記 - 也許,因爲1.2版會錯過「lowp」)。

那麼,原因是什麼?我的Mac說,它使用GLSL 1.2(我認爲有gl_PointCoord添加)。 任何想法?!?

回答

3

在頂部沒有#version指令的GLSL着色器被假定爲1.10。這可能從來不是你真正想要的,所以總是使用#version指令。

桌面OpenGL和OpenGL ES不是一回事。嘗試通過桌面GL實現提供ES着色器並不能保證能夠正常工作。所以你必須相應地修改着色器。

3

有點線程死靈,但我面臨移植一些GLES20代碼的同樣的問題。

gl_PointCoord manual明確指出gl_PointCoord在版本1.10中受支持,但GLSL 1.10規範甚至沒有提及該函數。

此外,§1.2 of the 1.20 spec明確指出已添加gl_PointCoord支持。

所以是的,它看起來像這個glsl手冊是錯誤的,並支持gl_PointCoord從版本1.2開始。

令人不安的是,一些顯示驅動程序將愉快地編譯和#version 110運行GLSL着色器,並呼籲gl_PointCoord,而其他(近期英偉達)將BARF一個不錯error C7532: global variable gl_PointCoord requires "#version 120" or later