Управление текстурой OpenGL - PullRequest
3 голосов
/ 04 марта 2011

Я запускаю свой самый первый игровой движок: D. Сейчас я работаю над менеджером ресурсов текстур и хочу сделать это правильно.

Разве это плохо - просто заполнить все блоки ActiveTexture, которые поддерживает драйвер? Альтернативой может быть сохранение этих слотов и установка текстур только тогда, когда они действительно необходимы, за счет большего количества вызовов glBindTexture.

Ответы [ 2 ]

5 голосов
/ 04 марта 2011

То, как вы задали свой вопрос, я думаю, вы страдаете от неправильного представления между объектами текстур , т. Е. Хранилищем текстур, и единицами текстур , т. Е. Механизмом мультитекстурирования.

OpenGL имеет текстурный объект и текстурные блоки.Объекты текстуры содержат данные, текстурные блоки отображают данные объекта текстуры, который связан с ними, в процесс рендеринга.

Обычно каждый загружает все текстуры, необходимые для сцены, в объекты текстуры.И для каждого пакета рендеринга, который использует общие настройки материала, связывает текстуры с правильными текстурными единицами в процессе рендеринга.

2 голосов
/ 21 марта 2011

Я думаю, это также следует отметить, если вы собираетесь использовать тонны текстур, т. Е. При загрузке в графический процессор вам необходимо продумать подход, чтобы минимизировать использование VRAM.В любом случае, я думаю, что от вашего имени может быть полезен stb_dxt, который представляет собой компрессор DXT1 / DXT5, написанный на ANSI C. Вы можете сжать свои текстуры и загрузить их, используя CompressedTexture2D, таким образом, все текстуры, которые вы загружаете в GPU, будут занимать 1/ Восьмое их нормальное пространство.

В какой-то момент сжатие всех текстур во время выполнения замедлит загрузку вашей игры, поэтому я бы посоветовал использовать текстуры DDS, вы можете использовать инструменты nvidia-texture для конвертации /внешнее управление сжатием текстур.

...