OpenGL ES 2.0:属性未绑定在顶点着色器上

时间:2010-12-01 19:19:50

标签: attributes vertex-shader opengl-es-2.0

我正在开发一个Android应用程序。

我有以下顶点着色器。

"attribute vec4 vertexPosition; 
attribute vec4 vertexNormal; 
attribute vec2 vertexTexCoord; 

varying vec2 texCoord; 
varying vec4 normal; 

uniform mat4 modelViewProjectionMatrix; 

void main() 
{ 
   gl_Position = modelViewProjectionMatrix * vertexPosition; 
   normal = vertexNormal; 
   texCoord = vertexTexCoord; 
} 
";

这是片段着色器:

precision mediump float; 

varying vec2 texCoord; 
varying vec4 normal; 

uniform sampler2D texSampler2D;

void main()
{ 
   gl_FragColor = texture2D(texSampler2D, texCoord); 
} 
";

如果我将vertexTexCoord保持为未绑定,是否有任何问题?如果我的模型没有纹理,我想我必须使用不同的顶点和片段着色器吗?

感谢。

1 个答案:

答案 0 :(得分:1)

是的,对于没有纹理的模型,你应该有另一个着色器。否则,我认为你会遇到依赖于实现的行为。

与此相关,OpenGL文档说:

  

不是的活动属性   显式绑定将受到绑定   调用glLinkProgram时的链接器。可以查询分配的位置   通过调用glGetAttribLocation。

因此,如果启用了顶点属性,它将尝试从其中一个属性获取vertexTexCoord。我不确定如果启用无纹理模型所需的属性数量不多,那么会发生什么,你不应该依赖这样的东西。使用另一个着色器。