GLSL texelFetchOffset работает с isampler2D, но не с usampler2D?

Во фрагментном шейдере следующее компилируется нормально:

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)

Это драйвер Nvidia Linux 290. * для Quadro 5010M, но мне интересно, сделал ли я (новичок) ошибку и не работал ли здесь как-то по спецификации?


person metaleap    schedule 19.03.2012    source источник


Ответы (1)


Функция texelFetchOffset, которая принимает usampler2D неподвижный, принимает ivec2 в качестве координат текстуры и смещения. u применяется только к типу сэмплера и возвращаемому значению; не все в функции становится беззнаковым.

И помните: OpenGL не допускает неявных преобразований между целочисленными типами без знака и со знаком.

person Nicol Bolas    schedule 19.03.2012
comment
Я думал, что пробовал это - но это должно быть так. Что касается преобразований, да, я форсирую профиль [ #version 420 core ], поэтому, как правило, когда я не выполняю явные приведения, меня предупреждают соответствующим образом. Спасибо еще раз! - person metaleap; 19.03.2012