JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=267b4c3177dc05af0519c9b68b39dd47Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Managed DX & Toolkit

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Projekte
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
AFE-GmdG
JLI MVP
JLI MVP


Alter: 44
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 14.06.2010, 22:18    Titel: Managed DX & Toolkit Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Kampfhund
Super JLI'ler


Alter: 41
Anmeldedatum: 20.07.2002
Beiträge: 408

Medaillen: Keine

BeitragVerfasst am: 15.06.2010, 11:41    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
AFE-GmdG
JLI MVP
JLI MVP


Alter: 44
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 15.06.2010, 12:31    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
AFE-GmdG
JLI MVP
JLI MVP


Alter: 44
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 20.06.2010, 14:22    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Fallen
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 29.06.2010, 15:48    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
AFE-GmdG
JLI MVP
JLI MVP


Alter: 44
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 30.06.2010, 08:46    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Fallen
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 30.06.2010, 09:19    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
AFE-GmdG
JLI MVP
JLI MVP


Alter: 44
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 30.06.2010, 09:51    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
AFE-GmdG
JLI MVP
JLI MVP


Alter: 44
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 07.07.2010, 07:47    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Projekte Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
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

Impressum