1

我正在 OpenGL es 2.0 中实现阴影映射。我使用 OES_depth_texture 扩展将深度渲染为 UNSIGNED_SHORT 类型的 DEPTH_ATTACHMENT 纹理。该解决方案适用于我的 macbook,甚至适用于 WebGL。但是在 Android(Acer B1-721、Mali-400 MP、Android 版本 4.4.2)上,清除深度纹理存在问题。我没有在其他设备上尝试过(这是我唯一的安卓设备)。

大多数时候深度纹理根本不清晰。有时(很少)它会清除一帧。当我暂停应用程序或屏幕变暗时,它也会清除它。

我知道 Mali-400 MP 很旧,但它确实声称它支持 OES_depth_texture。仍然听起来像驱动程序问题。有没有人有类似的经历?规避这个问题的任何想法?

编辑:问题不仅在于深度纹理。在渲染到纹理时,我也遇到了与普通深度缓冲区类似的问题。当我降低纹理大小时它会变得更好,但仍然有一些闪烁。减少顶点数量也可以减少闪烁。可能是内存带宽问题?

编辑:关于这个问题的一些讨论https://www.opengl.org/discussion_boards/showthread.php/199655-Clearing-DEPTH_COMPONENT-of-type-UNSIGNED_SHORT-in-gles2-using-OES_depth_texture/page3 这不仅仅是清除不工作。FBO 深度缓冲区(纹理或渲染缓冲区,无关紧要)上的所有操作都在管道中的错误时间执行或被丢弃。glFinish 解决了这个问题,但不是一个很好的解决方案。

4

0 回答 0