3
我正在使用openGL ES 2.0和GLSL着色器,並且使用Renderbuffer(也稱爲離屏渲染)處理FBO。
它適用於30 fps。
但是,當我使用glReadPixels或glcopyteximage2d,它下降到8 fps。
我不喜歡的東西:
帶有FBO的glReadPixels太慢
glBindFramebuffer(GL_FRAMEBUFFER, frameBuf);
//DRAW something
glReadPixels(...); //HERE
glBindFramebuffer(GL_FRAMEBUFFER, 0);
反正我有可以提高速度?我的意思是當我不使用FBO並使用具有相同參數的glReadPixels時,它的工作原理是15 fps,我認爲使用FBO可以提高速度?
你是否使用'glReadPixels()'等將你的離屏渲染複製到屏幕上?如果渲染到表面,爲什麼不直接進行渲染(或者儘可能接近 - 我從未使用過OpenGL ES)。 – Bojangles 2011-12-28 11:12:12
是的,所以我使用glsl着色器和任何片段着色器輸出,我必須訪問/讀取framebuffer,以便我可以計算出某些東西。我的空閒目標是讀取framebuffer,屏幕外,做些什麼,然後畫出最終的屏幕 – user2168 2011-12-28 11:24:34
因此,製作2個紋理,將一個綁定到FBO,另一個作爲輸入紋理。然後切換第二個綁定的FBO,並使用1st作爲紋理。不要複製。 (如果ES支持這一點 - 我不知道它是否存在 - 也可以將它們綁定到FBO並作爲紋理,並通過統一的顏色來確定要讀取的紋理,並禁用顏色寫入另一個MRT,爲了正確,儘管如果你在ping和pong之間放置了「別的東西」,它通常「仍然有效」,但你需要進行同步,以便在再次讀取數據之前寫入緩存,例如NV_texture_barrier)。 – Damon 2011-12-28 12:40:22