Zugriff auf Library (DirectX)

Cromon

Erfahrenes Mitglied
Hallo miteinander!

Ich habe heute eine kleine Library geschrieben, die den Umgang mit DirectX einiges erleichtern soll (sozusagen eine kleine Engine). Um dies nun auch Kollegen und Kolleginnen zur Verfügung stellen zu können, habe ich mich dazu entschlossen, das Projekt in eine statische Library (.lib) zu kompilieren und dann einfach diese mit den Header-Dateien zur Verfügung zu stellen.

Ich habe das ganze dann gemacht, ein neues Projekt erstellt und die Hauptheaderdatei eingebunden und die Library mitgelinkt. Soweit lief eigentlich alles gut, allerdings zeigte sich ein Problem:
Alle Funktionen, die im Endeffekt DrawPrimitive verwenden laufen zwar einwandfrei ab, jedoch erscheint auf dem Bildschirm nichts.

Das Problem zeigt sich jedoch nicht bei Funktionen wie DrawText, der Text wird ohne Probleme dargestellt.

Wenn ich anstelle der Library jedoch die C++-Dateien mitcompilieren im Projekt, dann werden auch die Figuren gezeichnet.

Hat jemand von euch eine Ahnung, woran das liegen könnte? Ich dachte zuerst, es läge unter Umständen an den Konfigurationen der Library, allerdings hätten ja dann auch die anderen Funktionen nicht funktionieren sollen. Aber ich habe dennoch mal alle Einstellungen versucht, hat nichts geholfen.

Erstaunlich finde ich, dass die Exe-Datei mit eingebundener Library 30 kb gross ist, mit all den C++-Dateien jedoch nur 17.

Es würde mich freuen, wenn mir jemand behilflich sein könnte.

Gruss
Cromon
 
Zuletzt bearbeitet:
Hi.

Verwendest du denn irgendwelche globalen Variablen, die voneinander abhängig sind? Also wo es darauf ankommt in welcher Reihenfolge die Variablen initialisiert werden?

Gruß
 
Hallo!

Eigentlich nicht direkt, das einzige was im globalen Bereich steht sind die Klassendefinitionen, ein paar typedefs für die verschiedenen ints, Strukturdefinitionen, Enumerationen und Präprozessormakros.

Modelle fügt man über den SceneManager hinzu, dieser fügt diese dann in ein Set ein und im D3DManager wird dann über dieses Set iteriert und die entsprechenden Models werden gezeichnet. Erstaunlich ist ja auch, dass man in der Funktion, in der auch DrawPrimitive aufgerufen wird gleich davor noch die Informationen über das Model aufrufen kann und sie kommen für jedes korrekt heraus.

/Edit:
Ich habe auch gerade mal noch gestet, was passiert, wenn ich einen Teacup (ein Standardmesh von DirectX) zeichnen lasse. Das hat funktioniert. Auch konnte ich überall immer sämtliche Informationen über die Modelle per MessageBox ausgeben. Ich werde mal schauen, ob vielleicht das Problem beim Vertexbuffer liegt, andernfalls bin ich wirklich ratlos.

/Edit2:
Hm, langsam wird es wirklich obskur:
Ich habe jetzt in der Klasse D3DManager testweise einen Zeiger auf eine Ansammlung von VERTICES-Exemplaren gemacht, diese dann in den vertexbuffer geladen und anzeigen lassen mit DrawPrimitive und siehe da, das Dreieck wurde auch in dem Programm, das die Lib verwendete angezeigt. Offenbar scheint das Problem doch nicht bei DrawPrimitive zu sein.

/Edit3:
Problem gelöst :D
Code:
d3ddevice->SetTransform(D3DTS_WORLD, md->GetTransform());

musste ich ändern in:
Code:
D3DXMATRIX mat = *(md->GetTransform());
d3ddevice->SetTransform(D3DTS_WORLD, &mat);
 
Zuletzt bearbeitet:
Zurück