Показать сообщение отдельно
Старый 16.10.2013, 14:12   #10
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: Мегатекстуры в Блитц3Д

ещё сам по себе DX юзать из нескольких потоков может дать непредсказуемый эффект, т.к. если он в момент создания текстуры чето в какую-то память записывает, то при двойной попытке записи из разных потоков будет краш. В дх9 есть флажок MULTITHREADED, который добавляет мутексы повсюду в нём, в дх7 вроде нет, и вообще это лишний оверхед и не круто его юзать. Только с ДХ10 добавили нормальную многопоточность.
ну и сам блиц может кроме текстуры, в какую то свою общую память что-то писать.

чтобы обезопаситься, лучше создавать все текстуры один раз - для всех квадтри кусков можно иметь одинаковое разрешение, а кол-во текстур подсчитать какое максимально видно на экране при выбранных настройках дистанции до переключения на след. лод.
я так и делал по сути в своём движке - никаких динамических аллокаций.

в своём потоке ты только загружаешь тексы с харда в ОЗУ, не трогая блиц и ДХ.
далее в своей либе синхронно с блицем вызываешь UpdateTexture (надеюсь он есть в дх7). Ах да, для его юзанья лучше текстуры с правильными флагами создавать тоже в своей либе.
Да и загрузку тоже делай в своей либе, чтобы сразу 1 fread, а не 100500 ReadByte.

--
UpdateTexture сам может вызывать подлагивания, если каждая текстура (кусок мегатексы) слишком большая, лучше потестить с разными размерами. Можно большую тексу апдейтить по кускам ещё за несколько кадров.
__________________
бложик | geom.io | твиттер | faded | демо 1 2 | роботы | лайтмаппер
(Offline)
 
Ответить с цитированием