Путаница с GL_MAX_TEXTURE_SIZE - PullRequest
8 голосов
/ 18 марта 2012

Хотелось бы узнать, возвращает ли вариант GL_MAX_TEXTURE_SIZE размеры в пикселях текстуры для одной оси или для обоих суммированных значений (x, y).

Например, на моем компьютере я получаю 8192 в результате. Означает ли это, что я могу загрузить текстуру 8192 *8192* 4 (256 МБ) или 4096 *4096* 4 (64 МБ)? Если так, почему это происходит, когда моя видеокарта имеет 1 ГБ видеопамяти ??

1 Ответ

18 голосов
/ 18 марта 2012

Спецификация OpenGL называет его максимальным 1D / 2D размером текстуры, так что это действительно означает 8192x8192 -изображение. Что ж, означать добавленную ширину и высоту было бы совершенно бессмысленно, так как это ничего не говорит о размере, 8000x192 -текстура имеет совершенно другой размер, чем 4096x4096 -текстура. По крайней мере, умножение будет более разумным, но в этом случае 8192 будет означать ~90x90 -текстуру.

Но вы должны принять эти значения с недоверием. Они на самом деле являются лишь верхним пределом того, что позволяет реализация (аппаратное обеспечение / драйвер), поэтому она не должна соответствовать видеопамяти вашего оборудования. На практике в видеопамяти хранится гораздо больше вещей, таких как кадровые буферы, VBO, что угодно, поэтому вполне разумно дать некоторую консервативную ценность. Кроме того, разработчики драйверов также могут не обращать особого внимания на эту константу (это не ATI, не так ли?) И просто возвращать какое-то значение по умолчанию, и ваша текстура может на самом деле быть больше.

И, как говорит Робинсон в своем комментарии, это может зависеть и от других вещей, кроме необработанной памяти, поскольку память текстур может быть какой-то особой областью в видеопамяти, предлагая особый вид режима 2D адресации / кэширования.

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