Собственно поискал сабж по форуму но внятных топиков нет. Задача такова: есть большие текстуры 8192*8192 количество таких текстур огромное - гигабайты поэтому грузить их сразу не вариант. Ну понятно надо делать менеджер следящий за актуальными не актуальными текстурами и соответственно загружающий выгружающий их (собственно такой менеджер сейчас пишу). Но я так понял нужен не только менеджер управляющий текстурами но и специальный алгоритм загрузки. Например сейчас при загрузке 12 текстур вышеуказанного размера приложение подтормаживает более секунды, соотвественно я пришёл к выводу типа надо грузить текстуры кустами. И если в загрузке кусками в ОЗУ в принципе всё понятно, то с GPU я не соображаю, знаю только glBindTexture, но ведь он не подходит. В общем интересно почитать про варианты динамической загрузки текстур на лету без тормозов.
Ivashka
> знаю только
что такое нити знаешь ? многопоточность
Ivashka
Храни на диске текстуру с mipmap'ами. Сначала подгружай мелкие, потом более крупные, делая каждый раз последний загруженный лод базовым.
Ну и чтобы не тратить время на распаковку и память, надо держать их в сжатых форматах, например DXT1, которые видеокарты могут использовать напрямую без распаковки.
Погугли loading screen, должно помочь
nonamezerox
у него инфаркт будет
Насколько я знаю, Pixel Buffer Object как раз для этого.
Хотя проще замапить текстуру и постепенно заполнять данными.
Ivashka
Все известные мне GAPI умеют кусками грузить текстуры.
Ivashka
> Способ.
Что способ?
Ах да, некоторые ГАПИ умеют грузить текстуры (и не только) в другом потоке.
Ivashka
> Просто я думал есть типо subdata для текстурок.
это? https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glTexSubImage2D.xhtml
Ivashka
В glTexImage2D не запрещается передать пустой указатель, и таким образом просто сделать "malloc" в видеопамяти, так что не надо терзаться предварительной загрузкой сразу всей большой текстуры.
Ах да, некоторые ГАПИ умеют работать на разных платформах
Ivashka
> Да слышал поверхностно, но я так понял за счёт создания отдельного потока в
> котором грузится текстура с диска не добится увеличения скорости загрузки
> текстуры в GPU, ну т.е. я имею ввиду сейчас я знаю только один способ заливки
> текстуры в GPU это сразу залить массив данных в видяху. Получается загружая в
> ОЗУ текстурки кусками я один хрен потеряю время на загрузки больших обьёмов
> данных в видяху.
Если OGL, то создаешь отдельный контекст в отдельном потоке, в котором грузишь текстуру на GPU. Контекст шариш с основным контексом, чтобы ресурсы были общие. Как только загрузишь текстуру на GPU, даешь сигнал основному потоку с основным контекстом, что ресурс можно использовать.
Тема в архиве.