Как OpenGL конвертирует однокомпонентные текстуры? - PullRequest
2 голосов
/ 08 июля 2011

Я не совсем понимаю, как OpenGL хранит однокомпонентные текстуры (например, GL_RED).

GL преобразует его в число с плавающей точкой и собирает его в элемент RGBA, добавляя 0 для зеленого и синего и 1 для альфа.

Означает ли это, что моя текстура будет занимать 32 bpp в графической памяти, хотя я даю только 8 bpp?

Также мне хотелось бы знать, как OpenGL конвертирует байты в float для операций в шейдере. Кажется не логичным просто делить на 255 ..

1 Ответ

4 голосов
/ 08 июля 2011

Вы не знаете, и у вас нет возможности узнать (хорошо, хорошо, я вроде соврал ... существует документация , которая сообщает вам эти детали для некоторого конкретного оборудования. Но в общем у вас нет возможности узнать, потому что вы не знаете заранее, на каком оборудовании будет работать ваша программа).

OpenGL хранит текстуры несколько по вашему запросу, нонаконец, он выбирает то, что поддерживает оборудование.Если это означает, что он преобразует ваши входные данные во что-то совершенно другое, он делает это молча.

Например, большинство реализаций преобразует RGB в RGBA, потому что это более удобно для доступа к памяти.То же самое относится и к 5-5-5 данным, конвертируемым в 8-8-8 и т. П.

Обычно, текстура с 8 битами в секунду в настоящее время занимает всего 1 байт на пиксель (поскольку почти каждая карта поддерживает это,и для программных реализаций это не имеет значения), хотя на это нельзя полагаться на 100%.Вам также не стоит беспокоиться, хотя ... он позаботится о том, чтобы все как-то работало.

Кстати, подобное может случиться и с текстурами не-степени-двух.Во всех современных версиях OpenGL это поддерживается (начиная с 2.0, если я правильно помню).Хотя, по крайней мере, теоретически, некоторые старые карты могут не поддерживать эту функцию.
В этом случае OpenGL просто тихо сделает текстуру следующего размера с большей степенью двойки и использует только ее часть (не сообщая вам!).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...