相关疑难解决方法(0)

webgl着色器中无法实现变量数组索引?

正如标题所说,我不能vector_array[foo]在webgl顶点着色器中做(假设foo是范围内和整数),对吗?

纹理是最好的选择,还是有解决方法或更好的方法来模仿查找表?

glsl webgl

14
推荐指数
1
解决办法
9882
查看次数

是否可以动态索引到 WebGPU 存储缓冲区?

我正在尝试编写一个 WGSL 着色器来读取存储在存储缓冲区中的八叉树。问题是,编译器不喜欢我正在计算的动态索引来访问存储缓冲区中的叶子。wgpu 产生以下验证错误:

thread 'main' panicked at 'wgpu error: Validation Error

Caused by:
    In Device::create_shader_module
    Function [1] 'get_voxel' is invalid
    Expression [68] is invalid
    The expression [67] may only be indexed by a constant
Run Code Online (Sandbox Code Playgroud)

八叉树的结构使得我可以在 GPU 上遍历它。这篇 NVIDIA 论文概述了该结构:https://developer.nvidia.com/gpugems/gpugems2/part-v-image-orient-computing/chapter-37-octree-textures-gpu

本质上,八叉树是一个由IndirectionGrids 组成的数组,每个八叉树在内存中都IndirectionGrid恰好有 8个。GridCell网格单元可以表示指向另一个网格的指针IndirectionGrid,也可以表示一些数据。

假设八叉树最深处代表 16x16x16 网格。我想在 7,7,7 点到达GridCell。我们知道 7,7,7 位于根的单元格 0 中IndirectionGrid,因为坐标的每个分量都小于中点。GridCell如果我们将坐标分量相加,我们就可以获得当前 的索引IndirectionGrid。因为我正在遍历一棵树,所以我在每个级别都执行此操作。下面是演示这一点的不完整代码。

引起问题的行是let cell = grid.cells[grid_index].data;

所以最终我的问题是,是否允许动态索引?有什么我可以改变的东西可以神奇地让它发挥作用吗?或者我需要了解更多关于 WebGPU 所做的权衡的背景信息吗?

thread 'main' …
Run Code Online (Sandbox Code Playgroud)

shader rust webgpu wgpu-rs

6
推荐指数
1
解决办法
2163
查看次数

标签 统计

glsl ×1

rust ×1

shader ×1

webgl ×1

webgpu ×1

wgpu-rs ×1