bindTextureUnit с хранилищем изображений - PullRequest
1 голос
/ 04 апреля 2020

Мне не удалось найти какую-либо документацию для этого, но возможно ли сделать:

layout(RGBA8, binding = 1) uniform image3D voxels;

в фрагментном шейдере и связать его в C ++, используя glBindTextureUnit(1, myTexture);?

Или мне нужно запросить единое местоположение вручную?

1 Ответ

2 голосов
/ 04 апреля 2020

Мне не удалось найти какую-либо документацию для этого, но можно ли это сделать [...]

Да.

Или у меня есть запросить единообразное местоположение вручную?

Нет.

Но glBindTextureUnit - неправильная инструкция. Униформа изображения связана с текстурным объектом с помощью текстурного блока изображения .

В программе шейдера можно установить точек привязки :

layout(RGBA8, binding = 1) uniform image3D voxels;

это эквивалент получения унифицированного местоположения для «вокселей» и установки его унифицированного значения в «1». Следовательно, форма изображения voxels связана с единицей изображения текстуры "1".

Объект текстуры должен быть связан с соответствующей единицей изображения текстуры с помощью glBindImageTexture. Например:

glBindImageTexture(1, myTexture, 0, GL_FALSE, 0, GL_WRITE_ONLY, GL_RGBA8); 

эта инструкция связывает myTexture с единицей изображения текстуры 1.


Обратите внимание, glBindTextureUnit(1, myTexture); связывает объект текстуры с единицей текстуры, которая может быть использовать соответствующий образец текстуры текстуры. например:

layout(binding = 1) uniform sampler3D voxels;
...