
我在将一小部分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)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)