glDepthMask(GL_FALSE)会破坏某些GPU上的帧缓冲区

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

要回复问题请先登录注册