1

为了让问题和答案更简单,我会将我的问题从 3d 减少到 2d。

我有一个二维网格,在二维空间中有 X*Y 单元格。它由 X、Y、bBoxMin2d 和 bBoxMax2d 简单定义。

在 GPU(目前在 VBO 中)上,我有 X*Y(无符号 8 位)整数,它定义了单元格的亮度。因此,对于 X=Y=3,如果 VBO 包含 {4, 7, 3, 2, 9, 4, 7, 2, 1},则应使用以下亮度的补丁来渲染网格:

4 7 3
2 9 4
7 2 1

我知道我可以创建另一个包含每个单元中心的世界位置的 VBO,并使用几何着色器创建一个要传递给片段着色器的补丁。

但是,我想提高效率并且不需要第二个 VBO。我的想法是,如果几何着色器的每个实例都有自己的线程索引(类似于 CUDA),它可以仅使用该索引创建单元格的补丁,以及来自例如 UBO 的 bBoxMin2d 和 bBoxMax2d。然后片段着色器会从 VBO 读取颜色,我会很高兴。

但似乎没有几何着色器线程索引。那么,我该如何解决我的问题呢?

请不要告诉我在位置上使用另一个 VBO - 这会将内存需求从 sizeof(uint8_t) = 每个单元 1 字节增加到至少 sizeof(float3) + sizeof(uint8_t) = 13 字节。而且我有很多细胞:|

4

2 回答 2

2
于 2013-01-15T20:54:28.177 回答
0

几何着色器中的gl_PrimitiveIDIngl_InvocationID是否对您有帮助。[*需要 GLSL 4.0 或 ARB_gpu_shader5*]

于 2013-01-15T17:51:46.067 回答