我无法再在webgl2的规范中找到任何copyTexImage2D的痕迹:https://www.khronos.org/registry/webgl/specs/latest/2.0/
几个月前,我曾问过如何制作浮动纹理副本的问题。使用webgl版本1.0,这对于copyTexImage2D是不可能的(不支持float类型) 所以我通过构建一个简单的着色器来制作纹理副本。
我想象对float32类型的限制是用webgl2解除的。但我没有发现任何单词" copyTexImage2D"在webgl 2的规范中。
它是如何工作的? webgl2的规范只给出了自webgl1以来的新颖性或新的多态性函数?
简而言之,使用webgl2,复制纹理是一种更有效的方法吗?
(在我对webgl2的缓慢,非常缓慢的理解中,我还没有解决反馈的有趣新颖性)
答案 0 :(得分:2)
WebGL2s规范只是添加到WebGL1。从最近的WebGL2规范开始
本文档应作为WebGL 1.0规范的扩展来阅读。它只描述与1.0的差异。
同样也说
本文档的其余部分旨在与OpenGL ES 3.0规范一起阅读(撰写本文时为3.0.4,可从Khronos OpenGL ES API Registry获得)。除非另有说明,否则每种方法的行为都由OpenGL ES 3.0规范定义。
所以,copyTexImage2D
仍在那里。
您的blitFramebuffer
解决方案有效
答案 1 :(得分:1)
copyTex[Sub]Image2D
使用带有EXT_color_buffer_float扩展名的WebGL2中的浮点数。
我会注意到这也适用于带有扩展名的WebGL1:
请注意有时令人困惑的差异:
RGBA32F
(RGBA
/ FLOAT
用于纹理)RGBA16F
(RGBA
/ {{ 1}}用于纹理)HALF_FLOAT_OES
(有关扩展程序的详情,请参阅WebGL Extension Registry)
R11F_G11F_B10F
也适用于WebGL2,但您需要EXT_color_buffer_float才能完成浮动帧缓冲。
[1]:Chrome中尚未提供EXT_color_buffer_half_float和WEBGL_color_buffer_float,但启用OES_texture_ [half_] float可能就足够了。在Chrome上,验证blitFramebuffer
返回checkFramebufferStatus
的每台计算机。
答案 2 :(得分:0)
好的,我找到了一个解决方案: blitFramebuffer :
让texture1成为我们想要在texture2中复制的纹理。我们已经有两个framebuffer copieFB和FBorig。 copieFB对texture2有颜色附件, FBorig对texture1有颜色附件。
gl.bindFramebuffer ( gl.DRAW_FRAMEBUFFER, copieFB );
gl.bindFramebuffer ( gl.READ_FRAMEBUFFER, FBorig );
gl.readBuffer ( gl.COLOR_ATTACHMENT0 );
gl.blitFramebuffer(0, 0, PVS, PVS,0, 0, PVS, PVS,gl.COLOR_BUFFER_BIT, gl.NEAREST);
旧解决方案:
gl.bindFramebuffer( gl.FRAMEBUFFER , copieFB);
gl.viewport(0, 0, PVS, PVS);
gl.useProgram(copieShader);
gl.uniform1i(copieShader.FBorig,TEXTURE1);
gl.drawArrays(gl.POINTS , 0 , NBRE);
增益是一些FPS。