2014-10-10 155 views
0

我想在WebGL中將紋理framebuffer複製到另一個,到目前爲止它只是給出了黑屏。我能夠毫無問題地在紋理framebuffer中渲染。WebGL複製紋理framebuffer紋理framebuffer?

這是我認爲會的工作代碼(它目前適用於iOS):

// bind source fbo while we remember current fbo 
glGetIntegerv(GL_FRAMEBUFFER_BINDING, &current_fbo); 
glBindFramebuffer(GL_FRAMEBUFFER, src_framebuffer); 

// setup source fbo attachments 
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, src_handle, 0); 
//glReadBuffer(GL_COLOR_ATTACHMENT0); <- commented out because it is not available in WebGL 

// bind destination fbo 
glActiveTexture(GL_TEXTURE0 + i); 
glBindTexture(dest_target, dest_handle); 

// copy from source to dest 
glCopyTexImage2D(dest_target, 0, dest_format, 0, 0, dest_width, dest_height, 0); 

// set back original fbo 
//glReadBuffer(GL_NONE); 
glBindFramebuffer(GL_FRAMEBUFFER, current_fbo); 

的WebGL不與WEBGL_draw_buffers擴展支持glReadBuffer所以我不能指定,但它支持多渲染目標,所以我們可以設置附件沒有問題(因此渲染紋理framebuffer工作完美無缺)。

我意識到,因爲我不能指定讀取緩衝區,也許這種技術無法正常工作?任何想法或解決方法?

+0

我很困惑。上面的代碼是OpenGL而不是WebGL – gman 2014-10-10 20:50:18

+0

@gman是的,這是因爲我正在通過Emscripten編譯我的代碼,所以它最終仍然是WebGL。 – Deathicon 2014-10-13 03:57:03

回答

0

如果你可以使用WebGL的2.0,你可以簡單地做:

gl.bindFramebuffer(GL_READ_FRAMEBUFFER, src); 
gl.bindFramebuffer(GL_DRAW_FRAMEBUFFER, dst); 
gl.blitFramebuffer(src_left, src_bottom, src_right, src_top, 0, 0, dst_width, dst_height, mask, GL_NEAREST); 

否則,我想這是正確使用gl.copyTexImage2D。更詳細的答案可以在here找到。

0

CopyTexImage2D工作得很好。這裏有2個一致性測試

https://www.khronos.org/registry/webgl/sdk/tests/conformance/textures/copy-tex-image-2d-formats.html?webglVersion=1

https://www.khronos.org/registry/webgl/sdk/tests/conformance/textures/copy-tex-image-and-sub-image-2d.html?webglVersion=1

你有沒有進行錯誤檢查JavaScript控制檯?您只複製0級,這意味着您需要正確設置您的過濾條件,或者您需要生成mips。 JavaScript控制檯可能會包含有關紋理是錯誤消息unrenderable

+0

STUPID SO不會讓我發佈無代碼的jsfiddle鏈接,但代碼與這一點無關,所以這裏是一個鏈接http://jsfiddle.net/greggman/rs21sr46/ – gman 2014-10-10 21:05:53

+0

我不確定此鏈接是否提供了一個示例我正在努力實現的。讓我試着再次解釋一下:我試圖從可渲染紋理framebuffer中讀取數據,並將其複製到另一個可渲染紋理幀緩衝區中。通常我提供的代碼在iOS上工作得很好。但由於我們無法在WebGL中指定讀取緩衝區,所以替代路線是什麼? – Deathicon 2014-10-13 04:06:50

+0

如何從源紋理/幀緩衝區採樣渲染到目標幀緩衝區。無論如何,glCopyTexImage2D很可能在驅動代碼中實現。 – 2016-10-23 15:17:07