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)
.