好的,经过几天的调查,我得到了答案。所以 APPLE 扩展存在(并且与 EXT 不同)只是因为它只解析颜色。GL ES 3.0 标准(可能会出现在 iOS 7.1 中)或 DesktopGL 表示,为了解析颜色或深度,您可以使用 glBlitFramebuffer 来复制和解析事物。我用 DesktopGL 4.2 尝试过,并且对深度缓冲区进行了 blitting。
我还回到了我的 DirectX11 渲染器,并在支持 DirectX 11.1 级别功能的 GPU 上尝试了同样的事情,我很惊讶领先的硬件无法在一次解析调用中做到这一点。当您尝试解析绑定为深度的纹理时,ID3D11DeviceContext::ResolveSubresource 会引发错误。解决方法是要么有一个特殊的着色器通道来进行深度解析,但这意味着使用 Texture2DMS(一个 DirectX 10_1 级别功能),或者通过 2 个不绑定深度的单独纹理来乒乓纹理(意味着 1 个解析调用和 2 个全深度纹理副本)。
在 GL 中使用相同的对应物意味着使用 glTexImage2DMultisample 图像而不是多重采样渲染缓冲区(桌面 OpenGL 3.1 的一部分),然后在像素着色器中使用 sampler2DMS 进行实际的着色器纹理提取。
编辑: glBlitFramebuffer 是否解析深度似乎被标记为依赖于实现。在桌面 GL (HD7850) 上它可以工作,在 GLES3 上它仍然无法解决它。