Я хочу отобразить целочисленную текстуру без знака с помощью фрагментного шейдера, используя следующий код:
glTexImage2D(GL_TEXTURE_2D, 0, GL_R8UI, width, height, 0, GL_RED_INTEGER, GL_UNSIGNED_BYTE, data);
и часть кода фрагментного шейдера:
#version 330
uniform usampler2D tex;
void main(void){
vec3 vec_tex;
vec_tex = (texture(tex), TexCoordOut).r
}
В Руководстве по программированию OpenGL написано, что если я хочу получать целые числа в шейдере, то я должен использовать целочисленный тип выборки, целочисленный внутренний формат и целочисленный внешний формат. формат и тип. Здесь используется GL_R8UI
как внутренний формат, GL_RED_INTEGER
как внешний формат, GL_UNSIGNED_BYTE
как тип данных. Я также использую usampler2D
в шейдере. Но когда программа начинает рендерить файл, всегда вылезает ошибка неявное приведение из "int" в "uint". Похоже, что данные текстуры хранятся как int, и сэмплер без знака не может их преобразовать. Но я использовал GL_R8UI
в качестве внутреннего формата, поэтому данные текстуры должны храниться без знака. почему неподписанный сэмплер получает только подписанный int? Как я могу решить эту проблему?
vec3
— это число с плавающей запятой, верно? Если вы хотите сохранить результаты выборки изusampler2D
, вам, вероятно, следует использоватьuvec3
. Даже тогда, если это буквально ваш шейдер, он должен генерировать более серьезную ошибку.texture (...)
требует координат текстуры, аTexCoordOut
даже не определено. - person Andon M. Coleman   schedule 22.04.2014