Schimbarea între direct3d și opengl

Comutarea între Direct3D și OpenGL

Cum generează programe (jocuri) atât cu Direct3D, cât și cu OpenGL?
De exemplu, WarCraft III - acolo puteți alege ce să utilizați.






"war3.exe -opengl" numai!

ceva de genul:
TRender = clasă
# xA0;.
# xA0; funcția Render: Integer; virtuale;
# xA0;.
se încheie;

TD3DRender = clasă
# xA0;.
# xA0; funcția Render: Integer; suprascrie;
# xA0;.
se încheie;

TOGLRender = clasa
# xA0;.
# xA0; funcția Render: Integer; suprascrie;
# xA0;.
se încheie;
.
var
# xA0; Render. trender;
.
dacă Run = RunOGL atunci
# xA0; Render: = TOGLRender.Create;
altfel
# xA0; Render: = TD3DRender.Creați;






.
# xA0; Render.Render;

Uită-te la sursele de cutremur2, acolo este foarte evident (software \ opengl)

Aceasta este, trebuie să scrie pentru ambele D3D și OpenGL?
Fiecare detaliu al scenei va trebui să fie scris de 2 ori și în moduri diferite?

PS: Nu am coduri sursă.


> Asta înseamnă că trebuie să scrieți atât pentru D3D cât și pentru D3D
> pentru OpenGL?

Da, altfel ar fi prea ușor.


> Fiecare detaliu al scenei va trebui scris de 2 ori și în moduri diferite?

Cu o organizație competentă a scenei, scrisul nu este atât de mult. Este creat un cadru în care sunt prezente toate funcțiile de care aveți nevoie. Aceste funcții sunt implementate de mai multe ori. De exemplu, 2 - pentru DX și OGL. Și apoi lucrați deja numai cu acest cadru, fără a afecta funcțiile unuia dintre IPA.
Aceeași abordare este utilizată și pentru motoarele cu platforme multiple.


> PS: Nu am coduri sursă.

Internetul este acolo - descărcați-l!

Există în postul meu o greșeală teribilă (mai exact o greșeală), pe care nimeni nici măcar nu a observat-o :)

corectată pentru a crede = 0
TD3DRender = clasă (TRender)
.
TOGLRender = clasa (TREND)
.







Articole similare

Trimiteți-le prietenilor: