|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 14.06.2010, 22:18 Titel: Managed DX & Toolkit |
|
|
Da die Managed DirectX-Bibliothek von Microsoft nicht mehr supported wird und mit DotNet 4.0 schon mal gar nicht zusammen funktioniert hab ich mir das "CustomUI"-Beispielprojekt aus dem aktuellem DirectX SDK geschnappt und übersetze es gerade Stück für Stück nach C# 4.0...
Das ganze ist recht aufwändig, da eine menge Funktionalität von der Logik her zwar gleich bleiben muss aber von der Syntax her komplett umgeschrieben wird. In C# gibt es einfach mal keine Pointer und kein STL - aber jede Menge Alternativen.
Ich komme aber sehr gut voran.
Momentan bearbeite ich den Großteil der Hauptnachrichtenschleife mit all den WindowMessages. Das DirectX-Device ist bereits fertig konfiguriert und das Fenster wird schon angezeigt.
Ich nutze das erste mal SVN in größerem Umfang, von da her kann ich sicherlich bald einen GuestAccount anbieten.
Status:
COM-Wrapping der DirectX-Interfaces, Version 9.0c:
- IDirect3D9 : 100%
- IDirect3DDevice9: 40%
- IDirect3DSurface9: 100%
- IDirect3DSwapChain9: 10%
- alle weiteren DirectX Interfaces: 0%
Module des DirectX Toolkits:
- DXUT.cpp (bei mir Toolkit.cs): 75%
- DXUTEnum.cpp (bei mir ToolkitDirectXEnumeration.cs): 100%
- DXUTTimer.cpp (bei mir ToolkitTimer.cs): 100%
- alle weiteren Module: 0%
Win32-Wrapping:
- Jede Menge Funktionen, Strukturen, Enums und Konstanten, teils selbst erzeugt, teils aus PInvoke.net übernommen...
Zusammen derzeit rund 700Kb reiner Code (also ohne Kompilate)
Falls Interesse besteht, mache ich den Code demnächst via SVN verfügbar.
MfG, AFE-GmdG _________________
CPP: | float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;} |
|
|
Nach oben |
|
|
Kampfhund Super JLI'ler
Alter: 42 Anmeldedatum: 20.07.2002 Beiträge: 408
Medaillen: Keine
|
Verfasst am: 15.06.2010, 11:41 Titel: |
|
|
Kennst du Git? Das finde ich noch etwas besser als SVN. Du kannst auf Github deinen Quellcode kostenlos zur verfügung stellen. _________________ Kochen ist ein NP-schweres Optimierungsproblem. |
|
Nach oben |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 15.06.2010, 12:31 Titel: |
|
|
Nein, bisher nicht. Aber es sieht so aus, als ob es dafür kein Plugin für das VS2010 gibt, weshalb es prinzipbedingt ausfällt.
Eine Quellcodeverwaltung muss nicht nur (gut) mit Textdateien umgehen können, sondern auch die Eigenheiten einer IDE mit berücksichtigen.
Und dazu gehören unter anderem auch benutzerindividuelle CompilerSettings und Pfade sowie in die IDE integrierte Vergleichs-Funktionen.
Deshalb habe ich mich für SVN mit dem freiem Ankh-SVN-Plugin entschieden... _________________
CPP: | float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;} |
|
|
Nach oben |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 20.06.2010, 14:22 Titel: |
|
|
ProjektUpdate
Win32-Wrapping:
- Alle nötigen Win32-Funktionen sind vollständig gewrappt.
HauptNachrichtenBehandlungsFunktion (StaticWndProc):
- Vollständig implementiert.
- Einige dort aufgerufene Subfunktionen enthalten noch CPP: | throw new NotImplementedException(); |
Die nächsten Funktionen, welche migriert werden sind:
- Reset3DEvnironment() - erledigt
- ToggleFullscreen() - erledigt
Anschließend kann das Toolkit bereits
- DirectXCaps auswerten
- passende PresentationParameters erzeugen
- Device erzeugen
- Hauptfenster erzeugen
- Hauptfenster verschieben, minimieren, maximieren, Menu verarbeiten, Rendering pausieren / fortsetzen (z.B. bei Minimierung / PauseTaste)
- DirectXBackbuffer löschen / leeren
- Present()
- Vollbild / Fenster-Wechsel, vollständig transparentes freigeben benutzter Resourcen.
Nachfolgende Funktionen werden demnächst folgen: - in Arbeit
- BeginSzene()
- EndSzene()
- FVF, erstmal ohne Vertex/Indexbuffer _________________
CPP: | float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;} |
|
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 29.06.2010, 15:48 Titel: |
|
|
Nur aus Neugier: Wieso tust du das und benutzt nicht einfach SlimDX?
Das ist immerhin quasi der offizielle Ersatz für Managed DX. Dort wurde schon alles gerwrappt und du brauchst nicht mehr selbst das Marshalling der DX Interfaces durchführen. _________________ "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse." |
|
Nach oben |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 30.06.2010, 08:46 Titel: |
|
|
Cool - Weil ich es nicht kannte.
Schaue ich mir auf alle Fälle mal genauer an - maybe mein Projekt ist schon obsolete^^ _________________
CPP: | float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;} |
|
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 30.06.2010, 09:19 Titel: |
|
|
Dein Toolkit wäre dennoch recht interessant. Ich glaube das gibts in SlimDX nämlich nicht (DXUT). _________________ "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse." |
|
Nach oben |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 30.06.2010, 09:51 Titel: |
|
|
Stimmt - habe ich bemerkt.
Aber ich glaube, ich kann den DirectX-Krahm auf SlimDX portieren und das DXUT darauf aufbauend Portieren.
Auf jeden Fall sieht SlimDX recht gut aus. _________________
CPP: | float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;} |
|
|
Nach oben |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 07.07.2010, 07:47 Titel: |
|
|
Neuer Status:
Die eigenen DX-Komponenten habe ich durch die SlimDX-Komponenten austauschen können. Leider sind dazu einige Umprogrammierungsarbeiten an den Enumerationsklassen erforderlich gewesen, weil einige Funktionen von SlimDX einen direkten Rückgabewert hatten, statt eines indirekten.
Bsp.:
Alt / Meine Variante
Code: | public bool GetXYZ(int Eingabeparameter, out XYZ Ausgabeparameter)
{
[...]
if(...)
return false;
return true;
} |
Neu / SlimDX-Variante
Code: | public XYZ GetXYZ(int Eingabeparameter)
{
[...]
if(...)
throw Exception();
return XYZ_Object;
} |
Dies bedeutet, dass ich für einige Funktionen, bei denen ich früher einfach mit if abfragen konnte jetzt einen Try-Catch-Block anlegen muss, was der Gesamtgeschwindigkeit und auch der Lesbarkeit des Codes nicht unbedingt zuträglich ist.
Des weiteren habe ich festgestellt, dass SlimDX seinen DotNet-Code mit Managed C++ erstellt.
Dies hat mich doch überrascht, hat aber durchaus seine Vorteile, vorallem in der Schnittstelle Win32/Com und DotNet. _________________
CPP: | float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;} |
|
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de
|