3
我試圖將着色器從#version 110
移植到150
。我知道,從110
移到150
時,全局的gl_
屬性已棄用,因此必須在着色器中手動指定所有這些屬性。然後指定的屬性必須通過C++調用OpenGL到glGetAttribLocation
。GLSL從v110移植到v150?
我有點不確定如何處理如gl_MultiTexCoord0
和gl_TexCoord
。
這裏只是我試圖從#version 110
端口150
着色器之一:
// blinn_phong.glsl
[vert]
#version 110
varying vec3 normal;
void main()
{
normal = normalize(gl_NormalMatrix * gl_Normal);
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
gl_TexCoord[0] = gl_MultiTexCoord0;
}
[frag]
#version 110
uniform sampler2D colorMap;
uniform float materialAlpha;
varying vec3 normal;
void main()
{
vec3 n = normalize(normal);
float nDotL = max(0.0, dot(n, gl_LightSource[0].position.xyz));
float nDotH = max(0.0, dot(normal, vec3(gl_LightSource[0].halfVector)));
float power = (nDotL == 0.0) ? 0.0 : pow(nDotH, gl_FrontMaterial.shininess);
vec4 ambient = gl_FrontLightProduct[0].ambient;
vec4 diffuse = gl_FrontLightProduct[0].diffuse * nDotL;
vec4 specular = gl_FrontLightProduct[0].specular * power;
vec4 color = gl_FrontLightModelProduct.sceneColor + ambient + diffuse + specular;
gl_FragColor = color * texture2D(colorMap, gl_TexCoord[0].st);
gl_FragColor.a = materialAlpha;
}
任何人都可以提供一些好的資源,以幫助這些版本之間的移植?
是否有某些原因導致您無法切換到GLSL 4+? – GraphicsMuncher
如果您希望頂點屬性映射到特定位置,而不是依賴GLSL實現來分配它們,您還可以在鏈接之前調用'glBindAttribLocation(...)'。您還需要爲片段着色器輸出執行此操作。 –