Перемикання між Direct3D і OpenGL
Яким чином роблять так, щоб програми (гри) виводилися як за допомогою Direct3D, так і за допомогою OpenGL?
Наприклад WarCraft III - там адже можна вибрати, що використовувати.
"War3.exe -opengl" всього лише!
щось типу цього:
TRender = class
# XA0 ;.
# XA0; function Render: Integer; virtual;
# XA0 ;.
end;
TD3DRender = class
# XA0 ;.
# XA0; function Render: Integer; override;
# XA0 ;.
end;
TOGLRender = class
# XA0 ;.
# XA0; function Render: Integer; override;
# XA0 ;.
end;
.
var
# XA0; Render. TRender;
.
if Run = RunOGL then
# XA0; Render: = TOGLRender.Create;
else
# XA0; Render: = TD3DRender.Create;
.
# XA0; Render.Render;
Подивися вихідні quake2, там це дуже наочно (software \ opengl)
Тобто, доводиться писати отрисовку як для D3D, так і для OpenGL?
Кожну деталь сцени потрібно буде писати 2 рази і по різному?
PS: Вихідні тексти у мене немає.
> Тобто, доводиться писати отрисовку як для D3D, так і
> Для OpenGL?
Так, інакше все було б занадто просто.
> Кожну деталь сцени потрібно буде писати 2 рази і по різному?
При грамотній організації сцени писати доводиться не так вже й багато. Робиться якийсь фреймворк, в якому наявні всі необхідні тобі функції. Реалізація цих функцій здійснюється кілька разів. Наприклад 2 - для DX і OGL. А далі ти работваешь вже тільки з цим фреймворком, не зачіпаючи функцій одного з АПИ.
Такий же підхід застосовується для кроспрлатформенних движків.
> PS: Вихідні тексти у мене немає.
Інтернет же є - скачай!
Там в моєму пості моторошна помилка (точніше помилка), яку ні хто і не помітив :)
виправленому вірити = 0
TD3DRender = class (TRender)
.
TOGLRender = class (TRender)
.