glTexImage2D在opengles3.0上下文中失败

问题描述

我正在实现与h5兼容的本地webgl上下文。 目前,我支持webgl1.0 API。

在iOS上,我用EAGLContext创建了kEAGLRenderingAPIOpenGLES3。其他GL调用效果很好,但是

glTexImage2D(3553,6408,144,108,5126,null),glError()=1282

此呼叫失败。

如果我将EAGLContext更改为opengles2.0,一切正常。

我的问题是glTexSubImage2D的所有参数值都相同。为什么在将上下文创建为es3.0时此调用失败,而在上下文为es2.0时成功调用为何?

这些是转储的gl调用。唯一的区别是,当我使用GLES3 api级别创建EAGLContext时,会出现glError1282。如果使用GLES2 api级别创建了上下文,则一切正常。

前两个glTexImage2D使用GL_UNSIGNED_BYTE,失败的一个使用GL_FLOAT。但是es3.0上下文应该支持GL_FLOAT。

17:26:24.683200 Will setup FBOs.
17:26:24.684360 Setup FBOs done.
17:26:24.694778 glCreateTexture()=1
17:26:24.694981 glBindTexture(3553,1)
17:26:24.695079 glTexParameteri(3553,10242,10497)
17:26:24.695142 glTexParameteri(3553,10243,10497)
17:26:24.695266 glTexParameteri(3553,10241,9985)
17:26:24.695313 glTexParameteri(3553,10240,9729)
17:26:24.695414 glTexParameterf(3553,34046,1.000000)
17:26:24.695414 glTexImage2D(3553,2,5121,null)
17:26:24.695414 glTexImage2D(3553,1,null)
17:26:24.696141 [Buf:GL_UNSIGNED_BYTE:u8] 16,16,1
17:26:24.696961 glTexImage2D(3553,[16])
17:26:24.697674 glGenBuffers()=1
17:26:24.697862 glGenBuffers()=2
17:26:24.702478 glGenBuffers()=3
17:26:24.702547 glGenBuffers()=4
17:26:24.702675 glGenBuffers()=5
17:26:24.702734 glGenBuffers()=6
17:26:24.722429 glGenBuffers()=7
17:26:24.722589 glBindBuffer(34962,7)
17:26:24.722697 glBufferData(34962,[65536],null,35048)
17:26:24.722758 glGenBuffers()=8
17:26:24.722806 glBindBuffer(34962,8)
17:26:24.722862 glBufferData(34962,35048)
17:26:24.723104 createVertexArrayOES(1)
17:26:24.723690 glGenBuffers()=9
17:26:24.723743 glBindBuffer(34962,9)
17:26:24.723799 glBufferData(34962,[2304000],35048)
17:26:24.723985 glGenBuffers()=10
17:26:24.724068 glBindBuffer(34963,10)
17:26:24.724120 glBufferData(34963,[64000],35048)
17:26:24.724120 glCreateTexture()=2
17:26:24.747552 glBindTexture(3553,2)
17:26:24.747625 glTexParameteri(3553,33071)
17:26:24.747680 glTexParameteri(3553,33071)
17:26:24.747733 glTexParameteri(3553,9729)
17:26:24.747778 glTexParameteri(3553,9729)
17:26:24.747842 glTexParameterf(3553,1.000000)
17:26:24.747842 glTexImage2D(3553,glError()=1282
17:26:24.748000 glTexParameteri(3553,9728)
17:26:24.748048 glTexParameteri(3553,9728)
17:26:24.748120 glTexParameteri(3553,33071)
17:26:24.748189 glTexParameteri(3553,33071)
17:26:24.748266 glTexParameterf(3553,1.000000)+0800  

解决方法

错误是因为JS传递了内部格式/格式/类型的无效组合。

glTexImage2D(3553,0,6408,144,108,0,6408,5126,null),glError()= 1282

实际上是glTexImage2D(3553,0,GL_RGBA,144,108,0,GL_RGBA,GL_FLOAT,null)

根据https://www.khronos.org/registry/OpenGL-Refpages/es3.0/html/glTexImage2D.xhtml,此组合无效。

有趣的是,在iOS es2.0上下文中,这种组合是有效的。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...