Problem mit DirectX - Cursor
-
Hallo zusammen, ich habe folgendes Problem. Mit dem folgenden Code erscheint einfach auf Teufel komm raus kein Cursor auf dem Bildschirm... Ich bin echt verzweifelt, denn es wird keine Exception ausgelöst, sprich alle Methoden und Funktion geben D3D_OK zurück! Was soll denn das ????
void Environment::setCursor(char *strFile){ // release the current cursor if one is set if(this->pD3DSrfCursor){ // hide, unassign and release the cursor this->pD3DDev->ShowCursor(false); this->pD3DDev->SetCursorProperties(0,0,0x00); this->pD3DSrfCursor->Release(); this->pD3DSrfCursor = 0x00; } // check if a cursor was defined if(strFile && strlen(strFile)){ // create a new surface and load the cursor - image or throw an exception on failure if(this->pD3DDev->CreateOffscreenPlainSurface(32,32,D3DFMT_A8R8G8B8,D3DPOOL_DEFAULT,&this->pD3DSrfCursor,0x00) != D3D_OK) throw Exception(EC_UNKNOWN,this,"IDirect3DDevice9::CreateOffscreenPlainSurface"); if(D3DXLoadSurfaceFromFile(this->pD3DSurfColor,0x00,0x00,strFile,0x00,D3DX_DEFAULT,0,0x00) != D3D_OK) throw Exception(EC_RESOURCE,this,strFile); if(this->pD3DDev->SetCursorProperties->SetCursorProperties(0,0,this->pD3DSrfCursor) != D3D_OK) throw Exception(EC_UNKNOWN,this,"IDirect3DDevice9::SetCursorProperties"); // set the cursor position and show it this->pD3DDev->SetCursorPosition(0,0,0); this->pD3DDev->ShowCursor(true); } }
-
Und die debug runtimes sagen auch nix?
Bye, TGGC (Der Held ist zurück)
-
Überhaupt nichts! kein Fehler, keine Warnung, kein gar nichts, aber es wird nichts gezeichnet...
-
Überhaupt nichts kann nicht sein. Zumindest beim Create und Release des Devices sagt er eigentlich immer was. Evtl. mal den Level hochstellen. Und strFile ist nicht zufällig == NULL oder sowas?
Bye, TGGC (Der Held ist zurück)
-
Ich habe jetzt bemerkt, dass das Ganze fehlerfrei und ohne Probleme funktioniert, wenn ich es in der ReleaseVersion erstelle! Was soll denn der Schwachsinn???
Im Debug - Modus funktioniert es nicht und im Release - Modus funktioniert alles einwandfrei!!
Aber ich habe jetzte bemerkt, dass auch ganz andere Sachen in der Debug - Version nicht richtig funktionieren (ist mir vorher nicht aufgefallen, da ich zusehr mit dem Cursor beschäftigt war). Hier eine Liste:- Ambient Lighting funktioniert nicht. (Mit SetRenderState ambient auf 0xffffffff und dann ein Material mit 1.0f für alle 4 Farbkomponenten von Ambient.
Release: alles wird wie erwartet weiss gezeichnet!
Debug: nichts als ein schwarzer Bildschirm!
Schalte ich die Lichtberechnungen aus, wird in beiden versionen weiss gezeichnet.- Cursor das hatten wir schon.
- Und zum Schluss das krasseste:
In der Debugversion werden generell keine virtuellen funktionen von abgeleiteten Klassen aufgerufen. Hier ein wenig Pseudocode:class Window{ public: virtual void onRender(void){}; }; class MainScreen:public Window{ public: void onRender(void); }; void MainScreen::onRender(void){ // Wenn ich hier einen breakpoint setze, hält das Programm nicht an } int main(void){ Window *pWnd = new MainScreen(); while(true){ pWnd->onRender(); // wenn ich hier einen breakpoint setze, dann hält das Programm an } delete pWnd; return 0; }
// die onRender Methode der abgeleiteten Klasse MainScreen ist natürlich im richtigen Code alles andere als leer, es ist also auszuschliessen, dass der Kompiler da etwas wegoptimiert hat!
Einen Lieben Gruss an alle Ishildur
-
Ich kann dir höchstens den Tipp geben alles neu zu erstellen und in der Doku zu deinem Compiler mal nach Unterschied Debug/Release zu suchen. Und überprüf mal die Debug und Release Einstellung.
Bye, TGGC (Der Held ist zurück)
-
...und falls Du MS-Produkte nutzt, immer die neusten ServicePacks aufspielen!
-
Hi Leute, mir ist inzwischen noch was aufgefallen! Bei einigen Computern kommt der Mauszeiger auch in der Release - Version nicht! Ich habe zu Testzwecken das exe file auf verschiedene Computer kopiert und ausprobiert und bei einigen erscheint der Cursor einfach nicht! Es wird allerdings auch nie eine Exception ausgelöst und ich habe bei allen 3 Mausmethoden eine Exception platziert! Wenn ich mir das Ganze so ansehe, glabe ich langsam aber sicher, es ist besser, wenn ich das ganze Maushandling komplett selbst übernehme, sprich den Mauszeiger mit DrawPrimitive selbst zeichne! Dann kann ich auch sehr schöne Effekte mit Alphablending und Texturtransformationen mit dem Cursor anstellen!
Gruss Ishildur
-
Du bist wohl dabei, so ein Kunstwerk zu zaubern wie die Entwickler von "Project I.G.I."?!?
Das sieht auch auf jedem XP-System anders aus, und reicht von "Super!" bis "Unspielbar, da das komplette HUD nicht gepaintet wird"...
-
Sgt. Nukem schrieb:
Du bist wohl dabei, so ein Kunstwerk zu zaubern wie die Entwickler von "Project I.G.I."?!?
Das sieht auch auf jedem XP-System anders aus, und reicht von "Super!" bis "Unspielbar, da das komplette HUD nicht gepaintet wird"...is auch ne kunst das so hinzubekommen, vielleicht gibts ja auf einigen anderen systemen dann noch irgendwelche extras bei denen man durch die wände schauen kann oder so?
-
Ich würde erstmal denken, das liegt eher an was ganz Anderen. Den das irgendwelche Methoden nicht aufgerufen werden, kann ja nicht an einem Fehler in DX liegen.
Bye, TGGC (Der Held ist zurück)