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

android–GLES20.glUniform4fv给出了GL_INVALID_OPERATION(1282),第1张

概述我在将一小部分vec4s上传到GPU时遇到了一些问题.我已经把这个问题煮到最小的代码来抛出错误.这是我的片段着色器:precisionmediumpfloat;uniformvec4test[5];voidmain(){gl_FragColor=test[0]+test[1]+test[2]+test[3]+test[4];}顶点着色器很简单:attributev

我在将一小部分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 – GLES20.glUniform4fv给出了GL_INVALID_OPERATION(1282)全部内容,希望文章能够帮你解决android – GLES20.glUniform4fv给出了GL_INVALID_OPERATION(1282)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1112856.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-29
下一篇2022-05-29

发表评论

登录后才能评论

评论列表(0条)

    保存