Предположим, у меня возникла такая проблема: теперь у меня есть фреймбуфер, а текстура содержит только один компонент цвета (например, GL_RED), который уже привязан к нему. Как выглядит фрагмент шейдера? Я предполагаю, что ответ:Тип вывода шейдера фрагмента GLSL
... out float ex_color;
ex_color = ...;
Вот мой вопрос: будет ли шейдер автоматически определять формат фреймбуфера и записывать в него значения? Что делать, если фрагментарный шейдер выводит значения с плавающей точкой, а формат фреймбуфера - GL_RGBA?
Кстати, какой правильный подход к созданию текстуры имеет только один компонент? Я читал примеры из g-truc, который имеет такой пример:
glTexImage2D (GL_TEXTURE_2D, 0, GL_RED, GLsizei (Texture.dimensions(). X), GLsizei (Texture.dimensions(). Y), 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
В чем смысл назначения GL_RGB в качестве формата данных пикселей?
Я не думаю, что 'GL_RED' является допустимым внутренним форматом. Вам нужен внутренний формат реального размера (скорее всего, 'GL_R8'). –
Так вот где я в замешательстве. Но ведь этот образец работает хорошо, когда я запускаю его. И можете ли вы подробнее объяснить внутренний формат, формат и тип функции glTexImage2D? – user2310794
* «Так вот где я в замешательстве». * - Это не единственное, на что вы действительно смущены. Но у меня нет времени придумать хорошее широкомасштабное объяснение всего этого на данный момент, поэтому я надеюсь, что Nicol Bolas *, * datenwolf * или кто-то еще, чтобы вскочить и дать реальный ответ всем эти вопросы. –