爲了實現延遲着色,我使用fbo來執行多個渲染目標。WebGL2將深度值複製到默認渲染緩衝區錯誤
現在,這種方法的作品,但我想爲背景添加一個天空球。
顯然這個天空球體不屬於延遲渲染週期,所以我必須在第二遍渲染。
但是,爲了正確渲染天空球體,我必須檢索深度值,所以延遲渲染紋理不會阻塞球體。
要做到這一點,我複製了深度紋理給G緩衝區默認幀緩衝區:
gl.bindFramebuffer(gl.READ_FRAMEBUFFER, gDeferredDrawer.FrameBuffer.Context);
gl.bindFramebuffer(gl.DRAW_FRAMEBUFFER, null);
gl.blitFramebuffer(0, 0, gl.viewportWidth, gl.viewportHeight, 0, 0, gl.viewportWidth, gl.viewportHeight, gl.DEPTH_BUFFER_BIT, gl.NEAREST);
gl.bindFramebuffer(gl.FRAMEBUFFER, null);
這種做法沒有奏效。 WebGL的給我這個錯誤消息:
GL錯誤:GL_INVALID_OPERATION:glBlitFramebufferCHROMIUM:目的地幀緩衝區多次採樣
我真的不知道我該怎麼做是錯誤的。據我所知,互聯網上沒有明顯的例子。那麼有人請賜教嗎?
非常感謝您的反饋! 我通過使用一個額外的FBO解決它,並與延遲着色器共享輸出紋理和渲染緩衝區,它工作得很好。 再次感謝您的回答! –