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"