0

我在 webgl2 的规范中找不到任何 copyTexImage2D 的痕迹:https ://www.khronos.org/registry/webgl/specs/latest/2.0/

几个月前,我问过如何制作浮动纹理副本的问题。在 webgl 版本 1.0 中,使用 copyTexImage2D 是不可能的(不支持浮点类型)所以我通过构建一个简单的着色器来制作纹理副本。

我想象使用 webgl2 解除了对 float32 类型的限制。但是我在 webgl 2 的规范中没有找到任何“copyTexImage2D”这个词。

它是如何工作的?webgl2 的规范只给出了自 webgl1 以来的新颖性或新的多态函数?

简而言之,使用 webgl2,是一种更有效的复制纹理的方法吗?

(在我对 webgl2 的缓慢、非常缓慢的理解中,我还没有解决反馈的有趣新颖性)

4

3 回答 3

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解决方案虽然有效

于 2017-03-29T23:18:13.970 回答
1

copyTex[Sub]Image2D使用扩展名 EXT_color_buffer_float 的 WebGL2 中的浮点数。

我会注意到这也适用于带有扩展的 WebGL1:

  • 用于 float16s 的 OES_texture_half_float 和 EXT_color_buffer_half_float[1]
  • 用于 float32s 的 OES_texture_float 和 WEBGL_color_buffer_float[1]

请注意有时令人困惑的差异:

  • WEBGL_ color_buffer_float 用于 WebGL 1,并且仅启用RGBA32FRGBA/FLOAT用于纹理)
  • EXT_color_buffer_half_float用于WebGL 1,并且仅启用 /用于纹理)RGBA16FRGBAHALF_FLOAT_OES
  • EXT_ color_buffer_float用于 WebGL 2,并启用 R/RG/RGBA 16F 和 32F,以及R11F_G11F_B10F

(有关扩展的更多信息,请参阅WebGL 扩展注册表)

blitFramebuffer也适用于 WebGL2,但您需要 EXT_color_buffer_float 才能完成浮动帧缓冲区。

[1]:Chrome 中尚未提供 EXT_color_buffer_half_float 和 WEBGL_color_buffer_float,但启用 OES_texture_[half_]float 可能就足够了。在 Chrome 上,在每台checkFramebufferStatus返回FRAMEBUFFER_COMPLETE.

于 2017-04-21T10:30:22.057 回答
0

好的,我找到了解决方案:blitFramebuffer

让texture1 成为我们要在texture2 中复制的纹理。我们已经有两个帧缓冲区 copyFB 和 FBorig。copyFB 对纹理 2 有颜色附件,FBorig 对纹理 1 有颜色附件。

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。

于 2017-03-29T13:39:35.813 回答