Javascript 在WebGL中返回-1的findAttribLocation
我知道如果在我的顶点着色器中找不到该属性,可能会发生这种情况,但我确信它确实存在。我将尝试提供我的大型代码体中最相关的代码片段:Javascript 在WebGL中返回-1的findAttribLocation,javascript,opengl-es,coffeescript,webgl,Javascript,Opengl Es,Coffeescript,Webgl,我知道如果在我的顶点着色器中找不到该属性,可能会发生这种情况,但我确信它确实存在。我将尝试提供我的大型代码体中最相关的代码片段: vertices = new Float32Array(dataArrays.verts) normals = new Float32Array(dataArrays.norms) uvs = new Float32Array(dataArrays.txtcos) 我的frag着色器: precision highp float; attribute v
vertices = new Float32Array(dataArrays.verts)
normals = new Float32Array(dataArrays.norms)
uvs = new Float32Array(dataArrays.txtcos)
我的frag着色器:
precision highp float;
attribute vec3 aPosition;
attribute vec3 vnorm;
attribute vec2 aTexCoord;
varying vec2 vTexCoord;
uniform mat4 pMatrix;
uniform mat4 vMatrix;
uniform mat4 mMatrix;
void main(void) {
gl_Position = pMatrix * vMatrix * mMatrix * vec4(aPosition, 1.0);
vTexCoord = aTexCoord;
}
属性查找器:
findAttribLocations = (gl, program, attributes) ->
out = {}
i = 0
while i < attributes.length
attrib = attributes[i]
console.log attrib
out[attrib] = gl.getAttribLocation(program, attrib)
console.log out[attrib]
i++
out
程序创建者:
createGLProgram = (gl, vSrc, fSrc) ->
program = gl.createProgram()
vShader = createGLShader(gl, gl.VERTEX_SHADER, vSrc)
fShader = createGLShader(gl, gl.FRAGMENT_SHADER, fSrc)
gl.attachShader program, vShader
gl.attachShader program, fShader
gl.linkProgram program
if !gl.getProgramParameter(program, gl.LINK_STATUS)
console.log 'warning: program failed to link'
return null
console.log "program"
console.log program
program
除了着色器中缺少变量之外,是否还有其他可能导致此错误的原因?我正在这个程序的其他地方切换着色器,但我相信这里使用的是正确的着色器。我如何进一步调查 着色器未使用的属性称为非活动属性,并且没有绑定 由于未在顶点着色器中使用
vnorm
,因此当通过glGetAttriblLocation
查询时,它将处于非活动状态并返回-1。使其处于活动状态的唯一方法是以有助于输出的方式在着色器中使用它
另请参见着色器未使用的属性是调用非活动属性且没有绑定 由于未在顶点着色器中使用
vnorm
,因此当通过glGetAttriblLocation
查询时,它将处于非活动状态并返回-1。使其处于活动状态的唯一方法是以有助于输出的方式在着色器中使用它
另见
createGLProgram = (gl, vSrc, fSrc) ->
program = gl.createProgram()
vShader = createGLShader(gl, gl.VERTEX_SHADER, vSrc)
fShader = createGLShader(gl, gl.FRAGMENT_SHADER, fSrc)
gl.attachShader program, vShader
gl.attachShader program, fShader
gl.linkProgram program
if !gl.getProgramParameter(program, gl.LINK_STATUS)
console.log 'warning: program failed to link'
return null
console.log "program"
console.log program
program