Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.03.20;
Скачать: CL | DM;

Вниз

Выполняем IDirect3DDevice9::CreateVertexBuffer в другом потоке   Найти похожие ветки 

 
MrAngel   (2004-12-25 22:37) [0]

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

Проблема то вот в чём. Если идёт выполнение CreateVertexBuffer в другом потоке, то - есть шанс попадания этого выполнения на IDirect3DDevice9::BeginScene и IDirect3DDevice9::EndScene. Как раз меня и интересует эта проблема.

Не будет ли такой ерунды как падение скорости (speed penalty), или ещё хуже какой нибудь конфликт?


 
A22   (2004-12-25 23:54) [1]

вообщу лучше многопоточностью не баловаться таким образом.. но ежели очень надо, хм, попробуй флаг какой-нить установить глобальный, который есть true ежели BeginScene() вызвана. ну а при создании буфера
while (begin_scene_called);
чтобы подождать окончания вызова рендера.

может вариант и не лучший но уж работать должен.


 
Дед Мазай и зайцы   (2004-12-26 22:47) [2]

Не совсем ясно для чего тебе надо в разных потоках. Обясни плиз!!!


 
MrAngel   (2004-12-27 13:56) [3]

A22   (25.12.04 23:54) [1]  - можно сделать и так, но тогда теряется смысл выполнения в другом потоке (получается синхронизация)

Дед Мазай и зайцы   (26.12.04 22:47) [2] - всё просто. Рендер выполняется у меня в основном потоке. При этом вся загрузка ресурсов с файлов в память, а также их обработка и создание CreateVertexBuffer в частности - делается в другом потоке.
Таким образом я могу делать одновременно рендер и загрузку данных.

Если всё ещё не понятно для чего это - вспомните какую нибудь игру. Где перед игровой ситуацией идёт её загрузка, при этом показывается прогресс загрузки, имена загружаемых файлов и прочее. Как вы думаете как это сделано??? Вот именно - Идет процесс загрузки и одновременно рендерится прогресс бар и прочая ерунда.

В общем вопрос открытый...


 
Sapersky   (2004-12-28 17:34) [4]

попробуй флаг какой-нить установить глобальный, который есть true ежели BeginScene() вызвана

Ну или Enter/LeaveCriticalSection. Какое-то замедление будет, но вряд ли большое - прогрессбар недолго рисовать.

По этой же причине проще использовать один поток и перерисовывать прогрессбар в промежутках между загрузкой разных моделей/текстур (их же не одна штука?).


 
MrAngel   (2004-12-28 20:19) [5]

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



Страницы: 1 вся ветка

Текущий архив: 2005.03.20;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.051 c
14-1109604649
AG.Smit
2005-02-28 18:30
2005.03.20
Проблема с мобилой Sony Ericsson T610


9-1103645931
Creep
2004-12-21 19:18
2005.03.20
OpenGL и mega1.1


11-1092650554
Алексей
2004-08-16 14:02
2005.03.20
Как вернуть фокус на закладки TabControl a


1-1109783918
oleg_SYS
2005-03-02 20:18
2005.03.20
Как присвоить типу OleVariant адресс процедуры?


1-1109946333
webpauk
2005-03-04 17:25
2005.03.20
Наследники