gpt4 book ai didi

android - GLES20.glUniform4fv 给出 GL_INVALID_OPERATION (1282)

转载 作者:太空宇宙 更新时间:2023-11-03 12:23:09 24 4
gpt4 key购买 nike

我在将一小部分 vec4 上传到 GPU 时遇到了一些问题。我已将这个问题归结为引发错误的最低限度代码。

这是我的 fragment 着色器:

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 是一个有效的位置句柄,我在上传 fragment 和顶点着色器代码时没有出现错误。

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

--更新

最佳答案

参见 glUniform文档:

GL_INVALID_OPERATION is generated if there is no current program object

确保在调用 glUniform 时您的着色器当前已绑定(bind)/使用(glUseProgram 已使用相应的着色器程序句柄调用)。统一在解除绑定(bind)着色器时保持其值(例如 glUseProgram(0)),但程序必须在设置统一值时处于 Activity 状态。

关于android - GLES20.glUniform4fv 给出 GL_INVALID_OPERATION (1282),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9517557/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com