更新WebGL 2中的统一缓冲区数据?

Shrekshao

与OpenGL ES 3不同,没有gl.mapBufferRange gl.bufferSubData(存在),在WebGL 2中更新统一缓冲区数据的有效方法是什么?例如,PerDraw统一块

uniform PerDraw
{
    mat4 P;
    mat4 MV;
    mat3 MNormal;
} u_perDraw;
man

gl.bufferSubData存在,因此似乎您创建了一个缓冲区然后创建了一个并行的typedArray。更新typedArray并调用gl.bufferSubData以将其复制到缓冲区中以进行更新并gl.bindBufferRange使用它。

可能仍然非常快。首先,所有值操作都保留在JavaScript中,因此调用WebGL的开销更少。如果您有10个要更新的制服,则意味着您要向WebGL发起2次呼叫,而不是10次。

TWGL.js中,我将所有制服的ArrayBufferViews生成为单个类型的数组,例如,鉴于上面的制服块,您可以执行以下操作

ubo.MV[12] = tx;
ubo.MV[13] = ty;
ubo.MV[14] = tz;

举另一个例子,如果您有一个将数组/类型数组作为目标参数的数学库,则可以执行以下操作

var dest = ubo.P;
m4.perspective(fov, aspect, zNear, zFar, dest);

我遇到的一个问题是统一优化。如果我编辑一个着色器,说我正在调试,我只是插入output = vec4(1,0,0,1); return;片段着色器的顶部,并且一些统一的块得到了优化,代码将被破坏。我不知道在C / C ++项目中处理此问题的标准方法是什么。我猜你在C ++中会声明一个结构

struct PerDraw {
  float P[16];
  float MV[16];
  float MNormal[9];
}

这样问题就解决了。在twgl.js中,我有效地在运行时生成了该结构,这意味着您的代码是否希望该结构存在,但由于已对其进行了优化然后代码中断而无法生成。

在twgl中,我做了一个将JavaScript对象复制到类型数组的函数,因此我可以跳过任何优化的统一块,不幸的是这会增加一些开销。您可以自由地直接修改类型数组视图,并在调试时处理损坏或使用结构化复制功能(twgl.setBlockUniforms)。

也许我应该让您从twgl中的JavaScript中指定一个结构,然后生成它,这取决于您是否使它与统一块对象匹配。这将使其更像C ++,删除一个副本,并且在调试优化中删除块时更易于处理。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

更新WebGL 2中的统一缓冲区数据?

来自分类Dev

同步Metal中的统一缓冲区更新

来自分类Dev

WebGL中的模板缓冲区

来自分类Dev

更新统一缓冲区对象会提高性能吗?

来自分类Dev

Vulkan:更新统一变量而不重置命令缓冲区

来自分类Dev

WebGL 渲染缓冲区

来自分类Dev

最好更新一个小的顶点缓冲区,还是发送一个统一的?

来自分类Dev

Webgl和dart每帧更改顶点缓冲区中的数据

来自分类Dev

webgl中绑定缓冲区的逻辑是什么?

来自分类Dev

WebGL。是否在GPU中创建缓冲区?

来自分类Dev

WebGL-从内存渲染缓冲区

来自分类Dev

在webgl中共享缓冲区

来自分类Dev

通过WebGL支持模板缓冲区

来自分类Dev

Webgl:销毁或重用缓冲区/纹理?

来自分类Dev

示例默认 WebGL 颜色缓冲区

来自分类Dev

如何在Webgl的缓冲区中仅使用4个顶点绘制2个嵌套矩形?

来自分类Dev

在OpenGL中更新模具缓冲区时的问题

来自分类Dev

Webgl:大步不行。不跨越缓冲区中的过去值

来自分类Dev

在WebGL中渲染缓冲区副本时是否可以指定颜色?

来自分类Dev

如何在 WebGL 中为输出纹理或帧缓冲区提供偏移量?

来自分类Dev

WebGL将纹理帧缓冲区复制到纹理帧缓冲区?

来自分类Dev

为什么WebGL“清除”吸引前端缓冲区?

来自分类Dev

解除绑定WebGL缓冲区,值得吗?

来自分类Dev

WebGL:同时使用纹理和颜色缓冲区

来自分类Dev

使用颜色缓冲区时WebGL渲染失败

来自分类Dev

WebGL;缓冲区还是uniform4fv?

来自分类Dev

Vulkan-顶点缓冲区更新

来自分类Dev

使用WebGL2通过Alpha混合渲染到帧缓冲区时的伪像

来自分类Dev

将列表缓冲区中的元素添加到地图中(更新地图)

Related 相关文章

热门标签

归档