Перемикання між direct3d і opengl

Перемикання між 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)
.

Схожі статті