2011-07-30 36 views
6

有没有人在OpenGL ES 2.0下实现延迟渲染/着色?它不支持MRT,所以只有一个颜色缓冲区,它不是以“常用”方式实现的。使用OpenGL ES 2.0可以推迟渲染/着色吗?

具体来说,我探索的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/

其他想法?它甚至值得做,性能明智吗?

回答

2

虽然是GL_ARB_draw_buffers扩展部分Android设备上使用(并因此呈现给多个缓冲器是可能的),答案是“没有”(与一些可能的例外,“我打50个长枪多边形”的光栅绑定场景)。

这是因为这些设备上使用的图形芯片确实有非常微弱的像素着色器,因此做全屏通有一些复杂的着色器是非常不可能的。你最好坚持在可编程阴影成为主流之前使用的旧时代的演奏技巧。无论你能移动到顶点着色器,做它(例如,使用顶点着色器变形的网格,而不是在片段着色器中偏移texcoords,全屏变形等效果更好)。

不管你能解决使用几何形状(如渲染做出了实际箱的天空盒会比呈现全屏四和计算着色器纹理取样观察方向更快),做到这一点。

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