2011-12-23 110 views
1

GLSL的較新版本的減少標準的量,內置屬性和制服,例如gl_Colorgl_ModelViewMatrix不在GLES 2.0中。重寫在GLSL屬性

是否確定要覆蓋這些名字,並重新定義它們的着色器是另一個變量類型的?如果您自己設置GLSL版本,在早期GLSL版本上運行時,會自行聲明自己的gl_ModelViewMatrix

在早期GLSL gl_Color可以每個頂點或整個呼叫,取決於如果客戶端調用glColor()glColorPointer() - 你能在效果設置一次的屬性,使其成爲一個統一的?或者如何處理這種歧義?

(這是所有在尋求使該在一系列的工作目標與着色器的一些簡單的查找替換在加載時腳本)

回答

2

不能覆蓋他們,你不能使用變量 - 名稱與開始「gl _」(一篇論文告訴我這一點)。改變內置類型/變量是不可能的。

+2

着色器不幸的是我無法找到的文件,但我我確定這是正確的。 – 2011-12-23 09:27:32

+0

OpenGL-3核心和GLSL 1.40標準清楚地表明,自定義變量不能用'gl_'前綴命名。但是,一旦可以使用一些預處理器技巧來顯然「重新引入」它們。 – datenwolf 2011-12-23 10:53:41

+0

@datenwolf是的,這是我的計劃,雖然我有點卡住了gl_Color – Will 2011-12-23 13:00:55

1

你最好的選擇,如果你想輕鬆支持GLSL的多個版本,是使用宏。例如,你可以定義你的輸入顏色:

#ifndef color 
in vec4 color; 
#endif 

然後,在舊版本的GLSL的運行,你在前面加上#define color gl_Color