Android 在GLES2和GLES3中使用FBO渲染渐变的差异

Android 在GLES2和GLES3中使用FBO渲染渐变的差异,android,linux,opengl-es,jogl,fbo,Android,Linux,Opengl Es,Jogl,Fbo,我正在使用JOGL作为跨平台应用程序的一部分。我请求使用GLES2 GL配置文件 我已经有了一个FBO绑定和内容画进它,然后解除绑定&把背景纹理画到屏幕上-相当标准的画到纹理的东西 到目前为止,我已经测试了3种不同类型的绘图,块颜色着色器、渐变着色器和纹理着色器。到目前为止,当在所有设备上绘制到默认帧缓冲区时,所有这些都可以工作 测试中涉及的硬件: Linux笔记本电脑: 渲染器:Mesa DRI Intel(R)Sandybridge Mobile。 版本:OpenGL ES 3.0 Mesa

我正在使用JOGL作为跨平台应用程序的一部分。我请求使用GLES2 GL配置文件

我已经有了一个FBO绑定和内容画进它,然后解除绑定&把背景纹理画到屏幕上-相当标准的画到纹理的东西

到目前为止,我已经测试了3种不同类型的绘图,块颜色着色器、渐变着色器和纹理着色器。到目前为止,当在所有设备上绘制到默认帧缓冲区时,所有这些都可以工作

测试中涉及的硬件:

Linux笔记本电脑: 渲染器:Mesa DRI Intel(R)Sandybridge Mobile。 版本:OpenGL ES 3.0 Mesa 10.1.3。 GLProfile:GLProfile[GLES2/GLES3.hw]

Android三星Galaxy S3: 渲染器:马里400 MP。 版本:OpenGL ES 2.0。 GLProfile:GLProfile[GLES2/GLES2.hw]

Android三星标签4: 渲染器:Mali-T628。 版本:OpenGL ES 3.0。 GLProfile:GLProfile[GLES2/GLES3.hw]

当使用FBO测试渲染到纹理时,我只在gradient shader上得到了一些非常奇怪的行为,并且仅在Galaxy选项卡4上。所发生的事情是,我没有从绘制FBO的内容中得到任何视觉效果,甚至没有在绘制渐变之前我用来清除FBO的清晰颜色——正如我所说,渐变在所有其他情况下都有效

此外,如果我将块颜色着色器或纹理绘制到FBO中,然后将FBO内容绘制到默认帧缓冲区,Galaxy选项卡4将提供相同的正确一致性结果

所以最大的问题是-为什么梯度不在表4中引入FBO工作?我唯一的预感是,这与表4中关于帧缓冲区的GLES3实现有关,但我不知道从这里可以走到哪里

Galaxy S3使用GLES2和普通的GL_帧缓冲区组件,而Tab 4则运行GLES3并使用GL_DRAW_帧缓冲区和GL_READ_帧缓冲区-但请记住,在FBO中绘制块颜色或纹理是很好的,只有渐变不会显示。就像我说的,奇怪


感谢阅读。

除非有人看到了完全相同的东西,否则我怀疑他们能否帮助你。如果您确信您的代码是正确的,您可能需要向供应商提交一个bug。设置完所有状态后,开始绘图之前,是否尝试调用
glValidateProgram()
?它提供了一个积极的验证状态吗?我尝试了glValidateProgram,一切正常,但很高兴发现该功能并将其投入使用,因此感谢:)它确实似乎是这种型号设备的独特之处。更准确地说,通过进一步的测试,一个普通的三星Galaxy Tab 4可以正常工作,它只是它的大尺寸版本,注释?这就是问题所在。您是否捕捉到任何gl错误?我看不到-我已尝试使用完整日志运行,并遵循在工作设备和不工作设备之间执行的每个OpenGL命令。glValidateProgram检查返回的结果是否一切正常。至于捕获错误,我不知道自己有任何捕获,除非JOGL库正在执行任何捕获-在这种情况下,除了遍历代码之外,我不确定如何找到其他捕获。。可能会出现以下情况:/