sampler1D не поддерживается в nVidia GLSL? - PullRequest
7 голосов
/ 02 июня 2011

В GLSL spec и других источниках о GLSL типы сэмплеров доступны в трех измерениях: sampler1D, sampler2D и sampler3D.

Однако, когда я пытаюсь скомпилировать программы GLSL с использованием WebGL в Chrome (как обычном, так и на Canary), sampler2D и sampler3D принимаются, но sampler1D выдает синтаксическую ошибку. Код:

uniform sampler1D tex1;

Ошибка:

FS ERROR: ERROR: 0:9: 'sampler1D' : syntax error 

Эта ошибка возникает, даже если я даю Кэнэри аргумент командной строки --use-gl=desktop.

Я использую Chrome 12.0.742.68 beta-m и Canary 13.0.782.1. У меня есть чипсет Nvidia Quadro NVS 160M.

Возможно ли, что Nvidia допускает 2- и 3-мерные сэмплеры текстуры, но не 1D? Я пытался найти информацию на этот счет, но ничего не нашел.

Ответы [ 2 ]

9 голосов
/ 02 июня 2011

Нет, ваша проблема не связана с "NVIDIA GLSL".WebGL основан на OpenGL ES 2.0, а OpenGL ES 2.0 не имеет одномерных текстур, только двухмерные и трехмерные текстуры (как расширения), поэтому вы не сможете использовать sampler1D в WebGL.

Решение?Просто используйте 2D-текстуру с высотой 1 с помощью sampler2D.

Примечание. Если вы используете Desktop OpenGL (OpenGL> = 2.0), вы сможете использовать 1D-текстуры и sampler1D.

1 голос
/ 07 декабря 2018

Пример использования 2D-объекта текстуры OpenGL с высотой 1:

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":

vec4 color = texture(tex, vec2(x, 1.0f));\n"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...