Войти
IrrlichtФорум

интеграция в Irrlicht своих наработок на d3d9. Возможно ли и насколько это геморно ?

#0
15:35, 12 авг 2011

Здравствуйте  дорогие "иэллихтовцы"  ! )))

  Задумал посмотреть что-то из опенсурсных движков. Остановился на этом,  потому как он не очень сложный и в то же время достаточно "фичастый" ,  но вот что беспокоит:  у меня скопилось много решений для d3d9 + HLSL и не хотелось бы это оставлять ((  Могу ли я интегрировать это все в ирлихт ??

В идеале хотелось бы так:  во время рендера кадра выдирать указаетель  на устройство d3d9  и рисовать с ним, независимо от движка  и ещё требуется уведомление  о том, что требуется удалить ресурсы (то есть когда устройство теряется или удаляется).

Доку смотрел мельком.  дай думаю спрошу.
И есть это возможно , то просьба дать пример кода  или ссылку на пример где показано как это сделать.
Заранее огромное спасибо.

правка : много очепяток.

#1
16:10, 12 авг 2011

На самом деле это возможно во всех движках с открытым исходным кодом. На то они собственно и опен сорс.

Что касается именно Иррлихта, то благодаря его грамотной архитектуре расширить его не составляет большого труда.
Чтобы изменить ренедер смотрите метод CSceneManager::drawAll() в файле CSceneManager.cpp или создавайте свой собственный узел сцены как в туториале №3  и переопределяйте метод render().

Указатель на устройство d3d9 вроде можно получить так:

IDirect3DDevice9* d3dDevice = driver->getExposedVideoData().D3D9.D3DDev9;

Только перед этим убедитесь, что устройство создавалось именно с параметром EDT_DIRECT3D9.

#2
6:23, 13 авг 2011

Digan
Спасибо .
А уведомление о необходимости удаления ресурсов ?

#3
10:50, 13 авг 2011

то есть когда устройство теряется или удаляется

Устройство движка или устройство d3d9? И уведомление в каком виде? Messagebox или в консоли?
Потерю устройства я думаю можно обнаружить простой проверкой указателя на NULL.
Или так:

if(device->run())
{
}

К слову. Для удаления всех объектов движка, созданных функциями имя которых начинается с 'create', нужно использовать вызов метода ->drop(). Т.е. для устройства это будет выглядеть так:

device->drop();
#4
10:53, 13 авг 2011

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

#5
11:01, 13 авг 2011

Во всех приложениях использующих Irrlicht есть главный цикл:

while(device->run())
{
}

После него можно считать, что приложение уже не работает.
Почему бы после него не вызвать вашу процедуру удаления ресурсов?

#6
11:29, 13 авг 2011

Digan
аа  вот оно что ! Тогда ясно .. Спасибо  -_-  .

#7
23:23, 14 авг 2011

ksacvet777
> Задумал посмотреть что-то из опенсурсных движков. Остановился на этом,
> потому как он не очень сложный и в то же время достаточно "фичастый" , но вот
> что беспокоит: у меня скопилось много решений для d3d9 + HLSL и не хотелось бы
> это оставлять (( Могу ли я интегрировать это все в ирлихт ??


Если нужно только HLSL шейдеры использовать, то можно и без модификаций движка их юзать.

#8
4:48, 15 авг 2011

mmortall
ну.. там много чего.. HLSL в основном в эффектах.

Тема возможно не закрыта ))

#9
8:08, 15 авг 2011

какой-то  чел отпостился по dx11 в ирлихте    и удалил сообщение (((-

IrrlichtФорум

Тема в архиве.