1

在片段着色器中,以下编译良好:

uniform isampler2D testTexture;
/* in main() x, y, xoff and yoff are declared as int and assigned here, then... */
int tmp = texelFetchOffset(testTexture, ivec2(x, y), 0, ivec2(xoff, yoff)).r;

但是,以下内容无法编译:

uniform usampler2D testTexture;
/* in main() x, y, xoff and yoff are declared as uint and assigned here, then... */
uint tmp = texelFetchOffset(testTexture, uvec2(x, y), 0, uvec2(xoff, yoff)).r;

OpenGL 4.2 驱动程序提供以下编译器错误消息:

错误 C1115: 无法找到兼容的重载函数 "texelFetchOffset(usampler2D, uvec2, int, uvec2)

这是用于 Quadro 5010M 的 Nvidia 的 Linux 驱动程序 290.* - 但我想知道我是否犯了(初学者)错误并且没有在这里以某种方式进行规范?

4

1 回答 1

3

接受 a的texelFetchOffset函数usampler2D 仍将aivec2作为其纹理坐标和偏移量。u仅适用于采样器类型和返回值;并非函数的所有内容都变成无符号的。

请记住:OpenGL 不允许在无符号和有符号整数类型之间进行隐式转换。

于 2012-03-19T09:22:58.937 回答