2016-05-10 10 views

ответ

8
layout(binding = 0) uniform sampler2D img_input; 

Это объявляет sampler, который получает данные из объекта текстуры. Связывание 0 (вы можете установить это в шейдере в GLSL 4.20) говорит о том, что текстура 2D, связанная с блоком изображения текстуры 0 (через glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, ...);), является текстурой, которая будет использоваться для этого сэмплера.

Пробоотборники используют всю текстуру, включая все уровни mipmap и уровни массива. Большинство функций выборки текстуры используют нормированные координаты текстуры ([0, 1] сопоставляются с размером текстуры). Большинство функций выборки текстур также относятся к filtering properties and other sampling parameters.

layout (binding = 0, rgba32f) uniform image2D img_input; 

Объявляет изображение, которое представляет собой одно изображение от текстуры. Текстуры могут have multiple images: уровни mipmap, array layers и т. Д. Когда вы используете glBindTextureImage, вы связываете одно изображение с текстуры.

Изображения и пробоотборники полностью разделены. У них есть собственный набор индексов привязки; это совершенно справедливо для привязки текстуры к GL_TEXTURE0 и изображения от другой текстуры к привязке изображения 0. Использование функций текстуры для связанного сэмплера будет считываться с того, что связано с GL_TEXTURE0, тогда как функции изображения на связанной переменной изображения будут считываться с изображения связанный с привязкой изображения 0.

Доступ к изображениям игнорирует все параметры выборки. Image accessing functions всегда используют целочисленные тексельные координаты.

Пробоотборники могут считывать данные только из текстур; переменные изображения могут читать и/или записывать данные, а также выполнять атомарные операции над ними. Конечно, запись данных из шейдеров требует особого внимания, особенно когда someone goes to read that data.

 Смежные вопросы

  • Нет связанных вопросов^_^