Пишу (пытаюсь) графический движок. И у меня так выходит, что все классы ориентированны на использование одного единственного устройства IDирект3DDевайс9.
А есть ли вообще такие случаи, когда в одном приложении их должно быть несколько?
лично я такие не встречал...
И еще вопрос: в моем коде цикла рендеринга, и от луны, и от SDK, timeDelta (интервал м-жду кадрами) иногда был меньше нуля! Причем если минус просто выкинуть, то все нормально, а если нет - анимация рывками.
Кто знает, от чего так.
Прибой94
Можно создавать несколько девайсов для чтобы выводить рендер в несколько окон, однако придется также дублировать ресурсы...
Прибой94
Ты, наверное, как-то неправильно умудрился замерить время между кадрами.
lexer
Для рендера в разные окна (например, несколько окон у 3д-редактора) много девайсов иметь не нужно - в параметрах Present можно просто указывать нужное окно.
BUzer
Прибой94
> и от луны, и от SDK,
Я цикл не трогал!
И если бы я чето неправильно замерял, анимация должна быть с глюками, а у меня при игнорировании знака анимация гладкая.
BUzer
Я знаю, но ведь так можно делать. К тому же разным девайсам наверняка можно указать ещё и разные опции.
Прибой94
> Я цикл не трогал!
Ну значит появился повод потрогать :)
Прибой94
Лучше наверное использовать несколько указателей на один девайс.
graveman
Ну я так и делаю, кидаю в каждый граф-класс по указателю на девайс, и уже работаю с устройством как с членом класса.
BUzer
Мне пока достаточно игнориориовать знак
timeDelta через QPC?
Процессор многоядерный?
Профит?
Что такое QPC? Профит? Процессор одноядерный.
Суть вот в чем: Алгоритм вычисления тимеДельты - разница между текущим timeGetTime() и предыдущим.
В примерах луны все работает. Начинаю править (не меняя вычисления дельты), через некоторое время как-то переменно выскакивает отрицательный дельта.
Попробуй GetTickCount() значение часов минут и секунд вобщем-то не нужно для интервалов, а разница между двумя GetTickCount() в миллисекундах очень полезная.
тимеГетТиме() дает время в упакованном формате?!
Фрагмент из книги "Физика для разработчиков игр":
"Если вы хотите использовать вторую видеокарту (это делают немногие игры), вам понадобится второе устройство."
Видимо, кто-то всё-таки использует два девайса. И две видюхи. :)) Кстати, мне в своё время надоело передавать указатель на IDirect3DDevice9 в классы и поэтому я сделал его внешним. То есть extern и вне классов. А вообще, грамотнее всего (наверное), сделать в основном классе, где создаётся это устройство, какой-нибудь метод, типа:
IDirect3DDevice9 *GetD3DDevice()
{
return this->pD3DDevice;
}
И обращаться к нему в том месте где нужно устройство. Что-то подобное, насколько я помню, сделано в Огре. :)
Тема в архиве.