Sampler1D не поддерживается в nVidia GLSL?
В спецификация GLSL и другие источники о GLSL, типы сэмплеров доступны в трех измерениях: sampler1D
, sampler2D
и sampler3D
.
Однако, когда я пытаюсь скомпилировать GLSL-программы с помощью WebGL в Chrome (как обычные, так и в Canary), принимаются sampler2D
и sampler3D
, но sampler1D дает синтаксическую ошибку. Код:
uniform sampler1D tex1;
Ошибка:
FS ERROR: ERROR: 0:9: 'sampler1D' : syntax error
Эта ошибка возникает, даже если я даю Canary аргумент командной строки --use-gl=desktop
.
Я запускаю Chrome 12.0.742.68 beta-m и Canary 13.0.782.1.
Чипсет у меня есть Nvidia Quadro NVS 160M.
Возможно ли, что Nvidia позволяет использовать 2- и 3-мерные образцы текстур, но не 1D? Я попытался найти информацию на этот счет, но ничего не нашел.
Ответы
Ответ 1
Нет, ваша проблема не связана с "NVIDIA GLSL". WebGL основан на OpenGL ES 2.0, а OpenGL ES 2.0 не имеет 1D текстур, а только 2D и 3D-текстуры (как расширения), поэтому вы не сможете использовать sampler1D в WebGL.
Решение? Просто используйте 2D-текстуру с высотой 1 с помощью sampler2D.
Примечание. Если вы используете Desktop OpenGL (OpenGL >= 2.0), вы сможете использовать 1D-текстуры и файлы sampler1D.
Ответ 2
Пример использования aa OpenGL-текстуры 2D-объекта с высотой 1:
c glTexStorage2D(GL_TEXTURE_2D, 8, GL_RGB8, 256, 1); glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 256, 1, GL_RGB, GL_UNSIGNED_BYTE, palette);
И соответствующий вызов в GLSL, используя объект sampler2D с именем "tex": glsl vec4 color = texture(tex, vec2(x, y), 1.0f));\n"