Что такое хороший способ динамической загрузки текстур в OpenGL? - PullRequest
6 голосов
/ 22 апреля 2009

В настоящее время я загружаю изображение в память во 2-м потоке, а затем во время цикла отображения (если требуется загрузка текстуры), загружаю текстуру.

Я обнаружил, что не могу загрузить текстуру во 2-м потоке, потому что OpenGL это не понравилось; возможно, это возможно, но я сделал что-то не так - пожалуйста, поправьте меня, если это действительно возможно.

С другой стороны, если моя ошибка была действительной - как мне загрузить текстуру, не прерывая цикл рендеринга? В настоящее время загрузка текстур из памяти занимает около 1 секунды, и, хотя это не является серьезной проблемой, это может слегка раздражать пользователя.

Ответы [ 2 ]

4 голосов
/ 22 апреля 2009

Вы можете загрузить текстуру с диска в память в любом потоке, который вам нравится, используя любой инструмент для чтения файлов.

Однако, когда вы связываете его с OpenGL, его нужно будет обрабатывать в том же потоке, что и рендеринг для этого контекста OpenGL. Тем не менее, это обсуждение предполагает, что использование PBO во втором потоке является опцией и может ускорить процесс.

1 голос
/ 24 апреля 2009

Вы, конечно, можете загружать текстуру с диска в оперативную память в любом количестве потоков, но OpenGL не будет загружать в VRAM несколько потоков по причине, указанной в ответе Рида.

Учитывая, что загрузка с диска - самая медленная часть, это бит, который вы, вероятно, захотите поточить. Загрузочный поток (потоки) создает очередь текстур для загрузки, затем эта очередь используется потоком, который владеет контекстом GL (однако учтите, что различные потоки обращаются к этой очереди). Можно также рассмотреть возможность использования многопоточной загрузки N текстур на кадр, где N - это число, которое не слишком сильно замедляет рендеринг.

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