OpenGL 4.2 использует ту же текстуру, что и изображение и как сэмплер - PullRequest
1 голос
/ 22 марта 2012

Разрешено ли (и правильно ли определено) использовать ту же текстуру, что и для image2D, а также для sampler2D?

В настоящее время я использую imageLoad () и imageStore () в шейдере GLSL для записи и загрузки из image2D. Тем не менее, я хотел бы читать (не писать) также из некоторых уровней текстуры mipmap, но это не поддерживается imageLoad (я думаю, что мне придется связывать каждый уровень mipMap как отдельный image2D, но количество доступных единиц изображения составляет довольно ограничен). Поэтому мой вопрос: можно ли использовать ту же текстуру, которую я использую в качестве image2D для imageStore (), а также в качестве sampler2D для использования с textureLod ()?

1 Ответ

1 голос
/ 22 марта 2012

Правовая? Да. Четкие? Это зависит от того, что вы делаете с ними.

Вы говорите, что хотите писать в изображения, а затем пробовать мипмапы из текстур. Вы делаете выборку из того же mipmap, с которого написали? Если так ... это будет проблемой. Доступ к текстуре не обязательно должен быть coherant, поэтому нет гарантии, что это будет работать. Не обошлось без явного вызова CPU glMemoryBarrier между временем, в которое оно записано, и временем, когда он был выбран. А поскольку он требует вмешательства процессора, его нельзя сделать в одном шейдере.

Если вы предоставляете защиту для предотвращения выборки из мип-карт, на которые вы не записываете (и под "вами" я имею в виду "каждый вызов шейдера, который вы используете"), то все должно быть хорошо , Использование textureLod или установка BASE_LEVEL текстуры или чего-то подобного должны быть в порядке.

...