2011-07-30 37 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上實現延遲着色,但它可能會很慢。