使用OpenGL ES 2.0可以延迟渲染/着色吗?

时间:2011-07-30 20:20:54

标签: android ios opengl-es-2.0

有没有人在OpenGL ES 2.0下实现延迟渲染/着色?它不支持MRT,因此只有一个颜色缓冲区,它不能以“通常”的方式实现。

具体来说,我正在iPad,iPhone4(maaaybe iPhone 3gs)和Android上进行探索。在iPad / iPhone4 / iPhone3gs上的GLESView应用程序中,GL_OES_RGB8_RGBA8扩展程序存在,我还没有看得太深,但是对于8位/通道,这个想法很有意思:http://www.gamedev.net/topic/562138-opengl-es-20-and-deferred-shading/

还有其他想法吗?性能方面是否值得做?

1 个答案:

答案 0 :(得分:2)

尽管某些Android设备上有GL_ARB_draw_buffers扩展可用(因此可以渲染到多个缓冲区),答案是“”(可能有一些例外情况“我画了50%多边形“光栅化器绑定场景”。

这是因为这些设备上使用的GPU确实具有非常弱的像素着色器,因此使用一些复杂的着色器进行全屏传递几乎是不可能的。你最好坚持过去在可编程着色成为主流之前使用的demoscene技巧。

无论你可以移动到顶点着色器,都可以这样做(例如,使用顶点着色器中变形的网格,而不是在片段着色器中偏移texcoords,最好使用全屏变形等效果)。

无论您使用几何体解决什么问题(例如,渲染由实际框组成的天空盒将比渲染全屏四边形并计算着色器中纹理采样的视图方向更快),请执行此操作。

嗯,我们唯一可以做的事情就是希望有更强像素着色器的新设备可用。我希望这不是一个令人沮丧的答案:)当然,你可以尝试在Android上实现延迟着色,但它可能会很慢。