其他分享
首页 > 其他分享> > android – GLES20.glUniform4fv给出了GL_INVALID_OPERATION(1282)

android – GLES20.glUniform4fv给出了GL_INVALID_OPERATION(1282)

作者:互联网

我在将一小部分vec4s上传到GPU时遇到了一些问题.我已经把这个问题煮到最小的代码来抛出错误.

这是我的片段着色器:

precision mediump float;
uniform vec4 test[5];
void main() {
    gl_FragColor = test[0]+test[1]+test[2]+test[3]+test[4];
}

顶点着色器很简单:

attribute vec4 vPosition;        
void main(){
    gl_Position = vPosition;
}

以下是尝试上传vec4向量的代码:

    float[] testBuffer = new float[4*5];
    // Fill with 1/5s for now
    Arrays.fill(testBuffer, 0.2f);

    // Get the location
    int testLoc = GLES20.glGetUniformLocation(mProgram, "test");
    checkGlError("glGetUniformLocation test");

    // Upload the buffer
    GLES20.glUniform4fv(testLoc, 5, testBuffer, 0);
    checkGlError("glUniform4fv testBuffer");

第二次调用checkGlError()时发现错误,错误代码为GL_INVALID_OPERATION.

我已阅读文档on glUniform,所有尺寸和类型似乎都是正确的. testLoc是一个有效的位置句柄,上传片段和顶点着色器代码时没有错误.

我只是看不出我做错了什么!有任何想法吗?

– 更新

解决方法:

glUniform文档:

GL_INVALID_OPERATION is generated if there is no current program
object

调用glUniform时,确保当前绑定/使用着色器(已使用相应的着色器程序句柄调用glUseProgram).在取消绑定着色器时,均匀值保持其值(例如glUseProgram(0)),但在设置统一值时程序必须处于活动状态.

标签:android,opengl-es-2-0
来源: https://codeday.me/bug/20190729/1574315.html