|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Hasenfuß Senior JLI'ler
Alter: 37 Anmeldedatum: 20.08.2002 Beiträge: 291
Medaillen: Keine
|
Verfasst am: 07.08.2006, 12:36 Titel: D3D Fenstermodus ruckelt |
|
|
Hiho,
nachdem ich seit langem mal wieder an meinem Projekt weitergemacht habe, hab ich festgestellt, dass sämtliche D3D Anwendungen stark ruckeln (fps werden ca. um die Hälfte gesenkt). Sobald ich sie im Fullscreen starten lasse ist alles normal. Und jetzt kommt das schärfste^^: Wenn ich ein anderes Programm starte, zB. Trillian, dann läufts im Fenstermodus einwandfrei mit normalen fps...
Habe bereits versucht, die neuste DX Version draufzuspielen und das SDK (verwende das Summer 2004 update) nochmal neu installiert.
Habe eine Geforce 4MX440 mit neustem Treiber, AthlonXP 1800+ ~1.5GHz, 512MB DDR, Windows XP Prof mit SP2.
Falls es hilft, hier der Code, mit dem ich D3D starte:
CPP: | bool CDirect3D::Init(HWND hWnd,BOOL bWindowed,int scrWidth,int scrHeight,CErrorLog* ErrLog)
{
m_ErrorLog = ErrLog;
if(FAILED(m_lpD3D = Direct3DCreate9(D3D_SDK_VERSION)))
{
m_ErrorLog->Write("[CDirect3D]Direct3DCreate9 FAILED");
return false;
}
D3DPRESENT_PARAMETERS PParams;
ZeroMemory(&PParams,sizeof(PParams));
PParams.SwapEffect = D3DSWAPEFFECT_DISCARD;
PParams.hDeviceWindow = hWnd;
PParams.Windowed = bWindowed;
PParams.BackBufferWidth = scrWidth;
PParams.BackBufferHeight = scrHeight;
PParams.BackBufferFormat = D3DFMT_A8R8G8B8;
m_scrWidth = scrWidth;
m_scrHeight = scrHeight;
HRESULT hr;
{
m_ErrorLog->Write("[CDirect3D]CreateDevice FAILED");
const char* Err = {0};
DXTRACE_ERR(Err,hr);
return false;
}
if(FAILED(hr = m_lpD3DDevice->GetBackBuffer(0,0,D3DBACKBUFFER_TYPE_MONO,&m_lpBackBuffer)))
{
m_ErrorLog->Write("[CDirect3D]GetBackBuffer FAILED");
const char* Err = {0};
DXTRACE_ERR(Err,hr);
return false;
}
return true;
}
|
|
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 07.08.2006, 13:49 Titel: |
|
|
Ok du hast 0 Enumerationssachen, aber wo genau renderst du, Schleife etc, sowas wäre interessanter. _________________ "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 |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 07.08.2006, 13:53 Titel: |
|
|
Du meinst nicht, das Trillian dann ruckelfrei läuft, sonder die D3D Anwendung, ja?
Also, ich weiß nur, das es normal ist, das Windowed langsamer ist, weil Windows dann ja ncoh mehr verwlaten muss. Hast du Fullscreen gehört der Bidlschirm dir, und die Grafikkarte braucht sich nur um ein einziges Programm zu kümmern.
Was du allerdings beschreibst, ist in er Tat merkwürdig, könnte am Treiber an Dx oder an Windows leigen, oder sonst wo dran. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 07.08.2006, 13:59 Titel: |
|
|
Hmm...sowas ähnliches habe ich allerdings auch schon beobachten können.
Auf einigen unserer Schulrechner haben diese Visualisierungsformen des WMPlayers die Tendenz dazu zu ruckeln. Wenn ich allerdings ein anderes Fenster darüber öffne, läuft alles fließend im Hintergrund.
Ich weiß nicht, ob ich das auch schon hier bei mir am PC beobachten konnte, aber seltsam und beachtenswert finde ich es auf jeden Fall... _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
|
51m0n JLI'ler
Alter: 33 Anmeldedatum: 06.01.2006 Beiträge: 167 Wohnort: Erkelenz Medaillen: Keine
|
Verfasst am: 07.08.2006, 21:40 Titel: |
|
|
Hm..Andersrum wärs eigentlich viel logischer. Aber probier vll. mal VSync. anzuschalten(nur im Fenstermodus). Kann sein das Windows irgendwie damit probleme hat.
The Lord of Programming hat Folgendes geschrieben: | Auf einigen unserer Schulrechner haben diese Visualisierungsformen des WMPlayers die Tendenz dazu zu ruckeln. Wenn ich allerdings ein anderes Fenster darüber öffne, läuft alles fließend im Hintergrund. |
Wenn ein anderes Fenster davor ist, werden die Visualisierungsformen ja auch nicht angezeigt. Deshalb hörts wahrscheinlich auf. _________________ Teigwaren
heißen Teigwaren,
weil sie früher einmal Teig waren |
|
Nach oben |
|
|
manu Super JLI'ler
Alter: 35 Anmeldedatum: 09.03.2006 Beiträge: 327 Wohnort: allgäu (DE) Medaillen: Keine
|
Verfasst am: 07.08.2006, 22:20 Titel: |
|
|
51m0n hat Folgendes geschrieben: | Hm..Andersrum wärs eigentlich viel logischer. Aber probier vll. mal VSync. anzuschalten(nur im Fenstermodus). Kann sein das Windows irgendwie damit probleme hat.
|
Ist im Fenstermodus VSync nicht immer aktiviert?
51m0n hat Folgendes geschrieben: |
The Lord of Programming hat Folgendes geschrieben: | Auf einigen unserer Schulrechner haben diese Visualisierungsformen des WMPlayers die Tendenz dazu zu ruckeln. Wenn ich allerdings ein anderes Fenster darüber öffne, läuft alles fließend im Hintergrund. |
Wenn ein anderes Fenster davor ist, werden die Visualisierungsformen ja auch nicht angezeigt. Deshalb hörts wahrscheinlich auf. |
Ich denke es war gemeint, dass es nicht mehr ruckelt, wenn ein anderes Fenster nur Teilweise über dem Visualisierungs dingens ist oder sogar nur gerade aktiv über dem WMP ist, diesen aber garnicht bedeckt. Ist auf den rechner der schule zu der ich bis vor 3 Wochen noch ging auch so... |
|
Nach oben |
|
|
Hasenfuß Senior JLI'ler
Alter: 37 Anmeldedatum: 20.08.2002 Beiträge: 291
Medaillen: Keine
|
Verfasst am: 07.08.2006, 22:21 Titel: |
|
|
VSync ist doch standardmäßig an oder?
Hier ist meine Spielschleife und die Renderfunktion der Engine. Selbst wenn ich beim GameState die gesamte Draw-Funktion leer lasse ist die Framerate niedrig.
CPP: | while(Engine->Running()) // Solange die Engine läuft...
{
Engine->HandleEvents(); //... Eingaben verarbeiten
Engine->Update(); //... Updaten
Engine->Draw(); //... Zeichnen
}
|
CPP: | void CEngine::Draw()
{
m_Direct3D.GetDevice()->Clear(0,0,D3DCLEAR_TARGET,D3DCOLOR_XRGB(0,0,0),0,0); // Bildschirm löschen
m_Direct3D.GetDevice()->BeginScene(); // Szene beginnen
if(states.empty()) // Fehlerbehandlung wenn keine States vorhanden sind
m_ErrorLog.Write("[CEngine]Draw() NO STATES");
else
states.back()->Draw(this); // aktuellen State zeichnen
m_Direct3D.GetDevice()->EndScene(); // Szene beenden
m_Direct3D.GetDevice()->Present(0,0,0,0); // und darstellen
}
|
Habe zum Test auch mal die Frameratebeispiele aus JLI2 ausprobiert. Wenn ich die im Windowed-Modus starte, hab ich auch nur noch halb so viele fps wie im Fullscreen. |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 07.08.2006, 23:41 Titel: |
|
|
manu hat Folgendes geschrieben: | 51m0n hat Folgendes geschrieben: |
The Lord of Programming hat Folgendes geschrieben: | Auf einigen unserer Schulrechner haben diese Visualisierungsformen des WMPlayers die Tendenz dazu zu ruckeln. Wenn ich allerdings ein anderes Fenster darüber öffne, läuft alles fließend im Hintergrund. |
Wenn ein anderes Fenster davor ist, werden die Visualisierungsformen ja auch nicht angezeigt. Deshalb hörts wahrscheinlich auf. |
Ich denke es war gemeint, dass es nicht mehr ruckelt, wenn ein anderes Fenster nur Teilweise über dem Visualisierungs dingens ist oder sogar nur gerade aktiv über dem WMP ist, diesen aber garnicht bedeckt. Ist auf den rechner der schule zu der ich bis vor 3 Wochen noch ging auch so... |
Exakt. Ich finds auch total unlogisch, aber die Visualisierung ruckelte wirklich, sobald sie im Vordergrund war. Egal wieviel davon zu sehen war, sobald man ein anderes Fenster im Vordergrund hatte, lief es wieder flüssig. _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
|
manu Super JLI'ler
Alter: 35 Anmeldedatum: 09.03.2006 Beiträge: 327 Wohnort: allgäu (DE) Medaillen: Keine
|
Verfasst am: 07.08.2006, 23:49 Titel: |
|
|
Und da kommt mir die Idee... Wie wärs, wenn du das Programm mal an jemanden oder an mehrere weitergibst. Dann kannst du sehen, ob es nur bei dir oder bei allen/anderen so ist...
Und könntest du bitte nochwas ausprobieren(zu meinem interesse). Und zwar mal das programm im Fullscreen starten ==> minimieren ==> und wieder maximieren. Fallen dann die FPS auch um die hälfte?
(so ist das mit meinem ersten Projekt und ich kann es mir nicht erklären. Denn falls ich beim restore was falsch gemacht haben sollte und eins, zwei grafiken(ich hab gradmal 0,5-1 MB an grafiken) doppelt im Speicher habe. Die FPS sollnten nicht von 800 auf 388 sinken) Alls du nun von halbierter FPS rate sprachst, hab ich mir gedacht: "hey.. " |
|
Nach oben |
|
|
Hasenfuß Senior JLI'ler
Alter: 37 Anmeldedatum: 20.08.2002 Beiträge: 291
Medaillen: Keine
|
Verfasst am: 08.08.2006, 08:13 Titel: |
|
|
manu hat Folgendes geschrieben: | Und da kommt mir die Idee... Wie wärs, wenn du das Programm mal an jemanden oder an mehrere weitergibst. Dann kannst du sehen, ob es nur bei dir oder bei allen/anderen so ist...
|
Brauch ich gar nicht, denn es scheint ja, wie ich oben schon gesagt habe, bei jeder D3D-Anwendung so zu sein - wenigstens beim FRAMETIMING Beispiel von JLI2 habe ich, wenn ich im Code den Parameter auf TRUE stelle für Fenster, 40-45 fps. Starte ich dann Trillian, steigt die Zahl mitten im Laden plötzlich auf die gewohnten 85. Und dabei spielt es keine Rolle ob das Programm im Vordergrund ist oder nicht!
Was ich zu meinem Code oben noch sagen wollte: Ich habe auch die Funktionen HandleEvents und Update vollständig leer gelassen, also nur noch ein schwarzes Fenster zeichnen lassen, was aber keine Verbesserung brachte.
<edit> Das mit dem Minimieren und Maximieren kann ich gerne ausprobieren, muss dazu aber noch das mit DeviceLost einbauen, also kann ichs jetz grad noch nicht sagen. |
|
Nach oben |
|
|
DirectXer Dark JLI'ler
Anmeldedatum: 05.02.2005 Beiträge: 1201 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 08.08.2006, 08:18 Titel: |
|
|
kanns sein, dass eine bestimmte TrillianAnwendung ausgeführt wird, während du trillian nicht gestartet hast und das diese sich net mit deinem Programm versteht? Guck ma im TaskManager bei Prozesse, 1x bevor du trillian startest und 1x danach, was sich da ändert. Weil es scheint ja offensichtlich was mit Trillian selbst zu tun haben...
Gruß DXer |
|
Nach oben |
|
|
Hasenfuß Senior JLI'ler
Alter: 37 Anmeldedatum: 20.08.2002 Beiträge: 291
Medaillen: Keine
|
Verfasst am: 08.08.2006, 08:26 Titel: |
|
|
Ich habe Trillian oben nur als Beispiel benutzt. Das ganze passiert zB. auch bei LuaEdit.
Bei Winamp oder Firefox bzw. dem Visual Studio allerdings nicht.
Habe da noch kein System entdecken können. |
|
Nach oben |
|
|
manu Super JLI'ler
Alter: 35 Anmeldedatum: 09.03.2006 Beiträge: 327 Wohnort: allgäu (DE) Medaillen: Keine
|
Verfasst am: 08.08.2006, 10:31 Titel: |
|
|
Hasenfuß hat Folgendes geschrieben: |
<edit> Das mit dem Minimieren und Maximieren kann ich gerne ausprobieren, muss dazu aber noch das mit DeviceLost einbauen, also kann ichs jetz grad noch nicht sagen. |
Nein. In dem Fall musst du dir die Mühe nicht extra machen. Da es ja bei dir bei allen (D)3D Anwendungen ist...
Hasenfuß hat Folgendes geschrieben: | Ich habe Trillian oben nur als Beispiel benutzt. Das ganze passiert zB. auch bei LuaEdit.
Bei Winamp oder Firefox bzw. dem Visual Studio allerdings nicht.
Habe da noch kein System entdecken können. |
Ich hab so irgendwie im gefühl, dass es mit dem DirectX SDK oder mit der DirectX runtime ansich oder deren Konfiguration zusammenhängt, welche du bei dir installiert hast |
|
Nach oben |
|
|
Hasenfuß Senior JLI'ler
Alter: 37 Anmeldedatum: 20.08.2002 Beiträge: 291
Medaillen: Keine
|
Verfasst am: 08.08.2006, 10:44 Titel: |
|
|
Das dachte ich mir auch schon, hab daher die neuste DX end user version runtergeladen und das SDK nochmal neu installiert. Hat aber auch nix gebracht. |
|
Nach oben |
|
|
manu Super JLI'ler
Alter: 35 Anmeldedatum: 09.03.2006 Beiträge: 327 Wohnort: allgäu (DE) Medaillen: Keine
|
Verfasst am: 08.08.2006, 12:46 Titel: |
|
|
Hasenfuß hat Folgendes geschrieben: | Das dachte ich mir auch schon, hab daher die neuste DX end user version runtergeladen und das SDK nochmal neu installiert. Hat aber auch nix gebracht. |
Vielleicht mal in "systemsteuerung ==> DirectX" gucken, ob Debug oder retail eingestellt ist und ggf. mal umstellen auf das andere..
aber sonst fällt mir auch nichts mehr wirklich ein... |
|
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
|