我有时会在渲染帧期间通过glDepthMask(GL_FALSE)
禁用深度缓冲区写入。这在某些GPU(如摩托罗拉Droid的PowerVR)上完全正常,但在HTC EVO和Adreno GPU上,我最终得到的帧缓冲区是完全垃圾(我看到了我在某处渲染的网格痕迹,但是整个屏幕大部分被删除了。)
如果我一直强制glDepthMask为真,那么一切正常。
我需要在alpha渲染的部分期间关闭glDepthMask。通过关闭深度写入会导致帧缓冲区被破坏的原因是什么?
答案 0 :(得分:6)
问题是调用glDepthMask
时glClearDepth
必须为真。这显然仅适用于Adreno GPU,而不适用于PowerVR GPU。
答案 1 :(得分:1)
不确定这是否有帮助,但我想知道你是否还需要清除深度缓冲区 - 尤其是在禁用glDepthMask之前。我相信glDepthMask只启用/禁用写入,而不是深度测试。也许GL实现仍在测试来自先前渲染过程的旧深度缓冲区信息,因此仅绘制到屏幕的一部分。然后它看起来被破坏了。有些实现可能会清除深度缓冲区,其他可能不会?如果这个建议完全错过了商标,请不要理会。 p>
无论如何,希望在某种程度上有所帮助。
答案 2 :(得分:0)
iPhone4 / iOS模拟器。如果我没有在glClear之前将glDepthMask设置为true,那么我的渲染会被删除。我花了两天时间解决这个问题,将帧缓冲区转储到磁盘上,调查整个帧的跟踪,踩到代码...... 这是唯一有效的方法。
没关系。我真笨。我正在执行glClear(COLOR | DEPTH),深度掩码= false,因此深度缓冲区根本没有被清除。 我的第一个回复是由一整天的调试引起的:/