【发布时间】:2013-06-26 09:21:54
【问题描述】:
这是我的顶点着色器:
attribute vec3 aVertexPosition;
attribute vec4 aVertexColor;
attribute float type;
uniform mat4 uMVMatrix;
uniform mat4 uPMatrix;
varying vec4 vColor;
void main(void) {
gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);
vColor = aVertexColor;
if(type > 0.0) {
} else {
}
}
我想要做的很简单,只需捕获一个名为type 的浮点值并将其用于逻辑操作。
问题是,当我尝试在Javascript中使用它时,错误来了:
shaderProgram.textureCoordAttribute = gl.getAttribLocation(shaderProgram, "type");
gl.enableVertexAttribArray(shaderProgram.textureCoordAttribute);
WebGL: INVALID_OPERATION: drawArrays: attribs not setup correctly main.js:253
WebGL: INVALID_OPERATION: drawArrays: attribs not setup correctly main.js:267
WebGL: INVALID_OPERATION: drawElements: attribs not setup correctly
getAttribLocation的输出是有意义的,都大于0。
================= 更新 ===================
这是我的整个项目代码:
https://gist.github.com/royguo/5873503
解释:
- index.html 着色器脚本在这里。
- main.js 启动 WebGL 应用程序并绘制场景。
- shaders.js 加载着色器并绑定属性。
- buffers.js 初始化顶点和颜色缓冲区。
- utils.js 常用工具。
【问题讨论】:
-
您是否尝试过使用浮点数而不是 vec2?顺便说一句,使用依赖于着色器内部属性的分支对性能有很大影响,我总是尝试使用数学语句而不是分支。
-
@Marius,谢谢!我将 vec2 更改为浮动,但问题仍然存在。
INVALID_OPERATION... -
您的代码看起来是正确的,错误肯定出在其他地方。
-
@Marius,我不知道,但 attribs 似乎有问题。
-
@Marius,我的变量是
float,我可以使用enableVertexAttribArray吗?