Ответ: Мегатекстуры в Блитц3Д
ещё сам по себе DX юзать из нескольких потоков может дать непредсказуемый эффект, т.к. если он в момент создания текстуры чето в какую-то память записывает, то при двойной попытке записи из разных потоков будет краш. В дх9 есть флажок MULTITHREADED, который добавляет мутексы повсюду в нём, в дх7 вроде нет, и вообще это лишний оверхед и не круто его юзать. Только с ДХ10 добавили нормальную многопоточность.
ну и сам блиц может кроме текстуры, в какую то свою общую память что-то писать.
чтобы обезопаситься, лучше создавать все текстуры один раз - для всех квадтри кусков можно иметь одинаковое разрешение, а кол-во текстур подсчитать какое максимально видно на экране при выбранных настройках дистанции до переключения на след. лод.
я так и делал по сути в своём движке - никаких динамических аллокаций.
в своём потоке ты только загружаешь тексы с харда в ОЗУ, не трогая блиц и ДХ.
далее в своей либе синхронно с блицем вызываешь UpdateTexture (надеюсь он есть в дх7). Ах да, для его юзанья лучше текстуры с правильными флагами создавать тоже в своей либе.
Да и загрузку тоже делай в своей либе, чтобы сразу 1 fread, а не 100500 ReadByte.
--
UpdateTexture сам может вызывать подлагивания, если каждая текстура (кусок мегатексы) слишком большая, лучше потестить с разными размерами. Можно большую тексу апдейтить по кускам ещё за несколько кадров.
|