0

在我的计算机着色器中,我尝试根据图像矩形内的 gl_GlobalInvocation 变量计算每个本地调用的纹理坐标。对于高达 262144 的 gl_GlobalInvocation.x 的较大值,我会得到奇怪的结果。(gl_WorkGroupSize=1024 (1024,1,1), gl_NumWorkGroups=256 (256,1,1), width <= 512, height <= 512) 也许是因为 glsl 模无法处理 OpenGL ES 3.1 中的 uint 数据类型。

是否有替代方法来计算 uint 范围的坐标?

ivec2 coords;
uint width = uint(rectPos.z-rectPos.x); 
uint height = uint(rectPos.w-rectPos.y);
coords.x = int(gl_GlobalInvocationID.x % width) + rectPos.x;
coords.y = int(gl_GlobalInvocationID.x / height) + rectPos.y;
... 
vec4 color = imageLoad(texture, coords)
...
4

0 回答 0