В чем разница между glBindImageTexture() и glBindTexture()?
в чем разница между glBindImageTexture и glBindTexture? А также в чем разница между следующими объявлениями в шейдере:
layout (binding = 0, rgba32f) uniform image2D img_input;
и
uniform sampler2D img_input;
1 ответов
layout(binding = 0) uniform sampler2D img_input;
что объявляет сэмплер, который получает свои данные от объекта текстуры. Привязка 0 (вы можете установить это в шейдере в GLSL 4.20) говорит, что 2D-текстура привязана к единице изображения текстуры 0 (через glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, ...);
) - текстура, которая будет использоваться для этого сэмплера.
сэмплеры используют весь текстура, включая все уровни mipmap и слои массива. Большинство функций выборки текстуры используют нормализованные координаты текстуры ([0, 1] сопоставьте размер текстуры). Большинство функций выборки текстуры также уважают свойства фильтрации и другие параметры выборки.
layout (binding = 0, rgba32f) uniform image2D img_input;
это объявляет изображение, которое представляет собой единый образ из текстуры. Текстуры могут есть несколько изображений: mipmap-уровнями, слои массива, etc. Когда вы используете glBindTextureImage
, вы связываете одно изображение с текстурой.
изображения и образцы полностью отделены. У них есть свой собственный набор индексов привязки; это совершенно справедливо для привязки текстуры к GL_TEXTURE0
и изображение из другой текстуры для привязки изображения 0. Использование текстурных функций для связанного сэмплера будет считываться из того, что связано с GL_TEXTURE0
, в то время как функции изображения на связанной переменной изображения будут считываться из изображения, связанного с привязкой изображения 0.
Image access игнорирует все параметры выборки. функции доступа к изображению всегда использовать число тексель координаты.
сэмплеры могут считывать данные только из текстур; переменные изображения могут считывать и/или записывать данные, а также выполнять атомарные операции над ними. Конечно, запись данных из шейдеров требует особой осторожности, особенно когда кто-то идет читать эти данные.