Optimierungen noch heute gültig?
-
Hallo!
Das Problem ist ich hab einfach keine mailadresse und icq-nummer.
wir können ruhig hier weiterreden, da hat niemand gegen was. ich weiß es. :pZu den Warnungen:
------ Neues Erstellen gestartet: Projekt: Space Buster, Konfiguration: Debug Win32 ------ Die Zwischen- und Ausgabedateien für das Projekt "Space Buster" mit der Konfiguration "Debug|Win32" werden gelöscht. Kompilieren... StdAfx.cpp Kompilieren... sober.cpp getdxver.cpp d:\programme\microsoft visual studio .net\vc7\platformsdk\include\prerelease\dinput.h: DIRECTINPUT_VERSION undefined. Defaulting to version 0x0800 StateDisplay.cpp c:\SBVer1007SourceCode\Rotate.h(33) : warning C4183: 'Create': Rückgabetyp fehlt; Memberfunktion, die 'int' zurückgibt wird angenommen SpaceShip.cpp c:\SBVer1007SourceCode\Rotate.h(33) : warning C4183: 'Create': Rückgabetyp fehlt; Memberfunktion, die 'int' zurückgibt wird angenommen Space Buster.cpp c:\SBVer1007SourceCode\Rotate.h(33) : warning C4183: 'Create': Rückgabetyp fehlt; Memberfunktion, die 'int' zurückgibt wird angenommen ShotTower.cpp c:\SBVer1007SourceCode\Rotate.h(33) : warning C4183: 'Create': Rückgabetyp fehlt; Memberfunktion, die 'int' zurückgibt wird angenommen d:\Programme\Microsoft Visual Studio .NET\Vc7\include\useoldio.h(29) : warning C4995: '_OLD_IOSTREAMS_ARE_DEPRECATED': der Name, der als #pragma markiert war, wurde verworfen Shot.cpp Rotate.cpp c:\SBVer1007SourceCode\Rotate.h(33) : warning C4183: 'Create': Rückgabetyp fehlt; Memberfunktion, die 'int' zurückgibt wird angenommen d:\Programme\Microsoft Visual Studio .NET\Vc7\include\useoldio.h(29) : warning C4995: '_OLD_IOSTREAMS_ARE_DEPRECATED': der Name, der als #pragma markiert war, wurde verworfen Object.cpp c:\SBVer1007SourceCode\Rotate.h(33) : warning C4183: 'Create': Rückgabetyp fehlt; Memberfunktion, die 'int' zurückgibt wird angenommen Menu.cpp c:\SBVer1007SourceCode\Rotate.h(33) : warning C4183: 'Create': Rückgabetyp fehlt; Memberfunktion, die 'int' zurückgibt wird angenommen LinkedList.cpp c:\SBVer1007SourceCode\Rotate.h(33) : warning C4183: 'Create': Rückgabetyp fehlt; Memberfunktion, die 'int' zurückgibt wird angenommen LevelSelect.cpp c:\SBVer1007SourceCode\Rotate.h(33) : warning C4183: 'Create': Rückgabetyp fehlt; Memberfunktion, die 'int' zurückgibt wird angenommen Level.cpp c:\SBVer1007SourceCode\Rotate.h(33) : warning C4183: 'Create': Rückgabetyp fehlt; Memberfunktion, die 'int' zurückgibt wird angenommen Item.cpp c:\SBVer1007SourceCode\Rotate.h(33) : warning C4183: 'Create': Rückgabetyp fehlt; Memberfunktion, die 'int' zurückgibt wird angenommen Highscore.cpp GuidedShot.cpp c:\SBVer1007SourceCode\Rotate.h(33) : warning C4183: 'Create': Rückgabetyp fehlt; Memberfunktion, die 'int' zurückgibt wird angenommen GameSettings.cpp FPSCount.cpp EngineTrace.cpp c:\SBVer1007SourceCode\Rotate.h(33) : warning C4183: 'Create': Rückgabetyp fehlt; Memberfunktion, die 'int' zurückgibt wird angenommen EnemySpaceShip.cpp c:\SBVer1007SourceCode\Rotate.h(33) : warning C4183: 'Create': Rückgabetyp fehlt; Memberfunktion, die 'int' zurückgibt wird angenommen Code wird generiert... Ressourcen werden kompiliert... Verknüpfen... LINK : LNK6004: .\Debug/Space Buster.exe wurde nicht gefunden oder nicht durch den letzten inkrementellen Bindevorgang erstellt; Bindung erfolgt vollstaendig Das Build-Protokoll wurde unter "file://c:\SBVer1007SourceCode\Debug\TempFiles\BuildLog.htm" gespeichert. Space Buster - 0 Fehler, 16 Warnung(en) ---------------------- Fertig ---------------------- Neues Erstellen: 1 erfolgreich, 0 fehlgeschlagen, 0 übersprungen
Also wenn ich dein Spiel mit dem MSVC 7 kompiliere und es dann aus der IDE heraus starte funktioniert das Spiel bis es losgeht (bis man fliegen kann) und dann stürzt es nach 2 sekunden ab. bild bleibt einfach stehen mit kleinen grafikfehlern. und wenn man es ganz normal über windows startet wird sofort ein Fehler in der ntdll.dll gemeldet.
-
Sgt. Nukem: Wenn du die Option nicht findest (so wie ich), dann nimm Powerstrip.
-
@game freak : Welches OS verwendest du?
Du kompilierst mit Visual C++ .Net?Bist du dir auch ganz sicher das es nicht an deinem Compiler liegt?
Die normalen .exe Files klappen bei dir also ohne Probleme?
Der Fehler mit den Rückgabewerten ist übrigends "schon" korrigiert, war ja nur ein Eintrag!Wegen dem VSync : Nein, die Einstellungen dazu muss man mit den Detonator Coolbits freischalten, oder eben Powerstrip&co nehmen.
Aber so ein shit, das Problem bekomme ich einfach nicht gelöst
Hilfe!!!PH
[ Dieser Beitrag wurde am 12.02.2003 um 23:01 Uhr von Programator editiert. ]
-
ich frage mich gerade wie ich das kompilieren konnte, ich hab garnicht das directx sdk drauf
Ich hab zwar das Platform SDK drauf, aber davon hab ich nur den Core Teil installiert. hmm, ob das vielleicht daran liegt
-
ich hab windows xp und ich lad mir jetzt mal das directx 9 sdk runter.
-
achso, so wie ich das seh sind die directx 8 sachen schon bei visual studio .net dabei
-
die normalen Exe Files klappten aber oder?
-
Ja, die aus deinem ZIP-Archiv funktionieren. Sonst hätt ich das Spiel ja nicht testen können (fps). Oder was meinst du?
-
klar das meinte ich...
Dann scheint dein Problem ja nicht an SB, sondern an deiner Compiler\SDK Version zu liegen. Ich weiß auch nicht ob man Code, der mit VC6 erstellt wurde, mit VC7 kompilieren kann.
Und wir haben unterschiedliche Probleme, ich denke wie skt. irgendwas(sorry :)) meinte, dass es vielleicht an nicht erfolgten Aufräumarbeiten der DX-Interfaces liegt. Aber meiner Meinung nach habe ich alles aufgeräumt, außer:
Der Code:
SafeRelease(lpDDBackSurface); SafeRelease(lpDDPrimarySurface); SafeRelease(lpDDraw);
Der Code des Makros SafeRelease()
#define SafeRelease(x) if (x) { LogDataFile<<GetTime()<<"SafeRelease("<<#x<<");"<<endl; LogDataFile<<GetTime()<<x->Release()<<endl; x=NULL; }
x->Release() ergibt immer 0, außer bei lpDDBackSurface, da ergibt es 1. Deutet das auf einen Fehler hin? Ich hör jetzt übrigends auf zu nerven, bis morgen
PH
-
Bist Du Dir sicher, daß Du mit
LogDataFile<<GetTime()<<x->Release()<<endl;
auch wirklich die Release()-Methode aufrufst?! Ich meine, ich kenn' mich mit denn C++ - Umlenkungspfeilen net so aus... - nich', daß Du das nur ausgibst, aber in Wirklichkeit gar nix releaset...
Aber nee, das muß ja so sein...Mhhh... also hab' g'rad' nachgeguckt:
Methode Release():Decreases the reference count of the interface by 1.
Syntax: ULONG Release(VOID);
Return Value: Returns the new reference count. This value is for diagnostic and testing purposes only.
D.h. also, daß noch eine Referenz auf das Interface existiert.
Aber moment: Primary und Back Buffer sind doch vom selben Typ - von daher...
Oder!?CU, Sarge
P.S.: "Sgt." hab' ich schon abkürzend benutzt, "Sergeant" könnten die meisten nit mal buchstabieren...
Aber "Skt."...!? Sanktum? Geheiligter? Oder wie oder was!?
-
Hm, also das deutet wohl auf einen Fehler hin. Der Referenzzähler hängt nicht vom Typ ab, sondern vom Objekt, das heißt, Primary-Surface und Backbuffer haben nichts miteinander zu tun.
Achte drauf, daß Du, wenn Du Dir den Zeiger auf den BackBuffer holst ihn auch wieder freigibst, an jeder beliebigen Stelle. Also nochmal hübsch den Code durchgucken, ob Du irgendwo den Zeiger nochmal per DX-Funktion anforderst.
MfG Jester
-
Also ich fordere nur ein mal(bei der ersten Initialisierung) einen BackBuffer an. Ist der InitCode so korrekt?
DDSURFACEDESC2 ddsd; DDSCAPS2 ddsCaps; LogApplicationFile<<GetTime()<<"Creating Primary Surface..."; ZeroMemory(&ddsd,sizeof(DDSURFACEDESC2)); ddsd.dwSize = sizeof( ddsd ); ddsd.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT; ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_FLIP | DDSCAPS_COMPLEX; ddsd.dwBackBufferCount = 1; Result=lpDDraw->CreateSurface(&ddsd,&lpDDPrimarySurface,NULL); if(FAILED(Result)) OnFailed("Error creating Primary Surface",__FILE__,__LINE__,true,Result); else LogApplicationFile<<"Done"<<endl; LogApplicationFile<<GetTime()<<"Creating BackBuffer..."; //Hintergrundpuffer erstellen ZeroMemory(&ddsCaps,sizeof(DDSCAPS2)); ddsCaps.dwCaps=DDSCAPS_BACKBUFFER; Result=lpDDPrimarySurface->GetAttachedSurface(&ddsCaps,&lpDDBackSurface); if(FAILED(Result)) OnFailed("Error Creating Back Buffer",__FILE__,__LINE__,true,Result); else LogApplicationFile<<"Done"<<endl;
PH
[ Dieser Beitrag wurde am 13.02.2003 um 15:40 Uhr von Programator editiert. ]
-
So...
Habe mal ein bisschen mit den CacheLines rumgespielt, außerdem noch ein wenig andere Optimierung betrieben.
Das Ergenis ist : Von(450-500FPS)->(500-600FPS).
Ist doch schon nicht schlecht
Kann mir denn noch jemand bei meinem Fehler mit dem Absturz unter WinME(evtl. Release Problem des BackBuffers?) helfen?
THX
PH
-
Hi.
Leider keine Hilfe sondern noch mehr Probleme... *g*Hab' jetzt bei mir auch'n Fehler festgestellt.
Hab' 'ne GeForce3. Mein Code sucht sich die 1024x768x16 Auflösung, und checkt dann sukkzessiv (?), welchen Depth-Buffer er verwenden kann (32, 24, oder 16 Bit). Bei der GF3 ist das immer nur 24 Bit. Dann rendert er wat Terrain - blablabla. Danach geht er raus.
Hab' das jetzt meinem Kumpel geschickt, der genau wie ich WinXP fährt, aber "nur" 'ne GeForce2 MX hat. Und da bleibt er im Logfile genau an der Stelle hängen, wo er CreateDevice( ... ) machen müsste.
Wir dachten erst, ich hätte schon wat drinne, wat die alte GF2 nich' unterstützt.
Aber dann hab' ich den Mock mal auf mein' alten Rechner geschmissen (PII-350 / 128 MB / Riva 128 ZX (Vorläufer der TNT1) + Voodoo 2 / @WinME) - und da läuft's!! Naja, wenn ich ihn 28 Sek. laufen lasse, berechnet er in der Zeit 27 Frames, aber es wird halt alles angezeigt.Dann habe ich statt dem HAL mal das REF (Referenz-Modell) an die CreateDevice() Funktion übergeben. Ergo, bei mir läuft's, aber beim Beenden bricht er mit einem Speicherfehler ab. Bei ihm springt es NICHT mehr direkt auf den Desktop, aber zeigt nur "schwarz" an... in diesem leeren Raum kann er sich trotzdem "bewegen" (steht im Logfile).
Den Speicherfehler hab' ich beseitigt bekommen, indem ich das D3D_Device am Ende nicht Release() -e, sondern nur NULL setze...
Hat einer'n Plan!?!?Für jede Hilfe dankbar, Sarge