Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

drakon

Supermoderator

  • »drakon« ist der Autor dieses Themas

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

1

28.03.2008, 22:04

D3D - Lost Device

Hi

Ich habe meine Engine jetzt auf Lost Device abgestimmt. Funktioniert eigentlich ganz gut mit der Freigabe der Resourcen und dann wieder laden. Jedoch stimmt danach die Auflösung irgendwie nicht mehr richtig.

Ich benutze die Funktion DIRECT3DDEVICE9::Reset () mit den genau gleichen Present Parameters,wie schon bei der Erstellung.



C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
    m_Parameters.EnableAutoDepthStencil     = true;                                                 
    m_Parameters.AutoDepthStencilFormat     = D3DFMT_D24S8;                                         
    m_Parameters.BackBufferCount            = 0;                                                    
    m_Parameters.BackBufferFormat           = Windowed ? D3DFMT_UNKNOWN:m_DisplayMode.Format ;      
    m_Parameters.BackBufferHeight           = Windowed ? 0:m_DisplayMode.Height;            
    m_Parameters.BackBufferWidth            = Windowed ? 0:m_DisplayMode.Width;         
    m_Parameters.Flags                      = D3DPRESENTFLAG_DISCARD_DEPTHSTENCIL;                  
    m_Parameters.FullScreen_RefreshRateInHz = 0;                                                    
    m_Parameters.hDeviceWindow              = hwnd;                                                 
    m_Parameters.MultiSampleType            = D3DMULTISAMPLE_NONE;(m_DisplayMode.Format,Windowed,&m_SamplerQual); 
    m_Parameters.MultiSampleQuality         = 0;
    m_Parameters.PresentationInterval       = D3DPRESENT_INTERVAL_IMMEDIATE;
    m_Parameters.SwapEffect                 = D3DSWAPEFFECT_DISCARD;
    m_Parameters.Windowed                   = Windowed;


Da es ja vorkommen kann, dass hier rein geschrieben werden kann, habe ich vorher schön kopien gemacht und diese eingesetzt. Aber ich habe immernoch ein Problem.

Also im Fullscreen erscheint mir alles sehr "komisch". Zum einen frage ich die Position des Mauscursors ab und die stimmt nicht richtig. Sprich 0 ist nicht ganz links, sondern ca. 10 Pixel verschoben das gleiche habe ich oben. Zum anderen sehe ich den Fensterbalken irgendwie aufscheinen und wenn ich manchmal im oberen Bereich reinklicke geht das Fenster wieder zu..

Also hat jemand Erfahrung mit ::Reset () ? Oder allgemeint mit Lost Device? Oder sonst irgendeine Idee?

2

28.03.2008, 23:01

Da hast du aber einen Verhau! :)

Was ist das denn zum Bleistift?

C-/C++-Quelltext

1
m_Parameters.MultiSampleType  = MULTISAMPLE_NONE;(m_DisplayMode.Format,Windowed,&m_SamplerQual); 

Hatte mit Cob_Twister diesbezüglich mal 'ne Diskussion: https://www.spieleprogrammierer.de/phpBB2/viewtopic.php?t=9161&postdays=0&postorder=asc&highlight=lostdevice&start=0

drakon

Supermoderator

  • »drakon« ist der Autor dieses Themas

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

3

28.03.2008, 23:05

Habe beim editieren noch comments gelöscht.. Anscheinend nicht ganz. ;)

Sollte lediglich das da stehen:

C-/C++-Quelltext

1
m_Parameters.MultiSampleType  = MULTISAMPLE_NONE;


Den Link werde ich mir noch anschauen..

drakon

Supermoderator

  • »drakon« ist der Autor dieses Themas

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

4

28.03.2008, 23:16

Naja.. Das Problem bei mir liegt nicht, dass ich nicht weiss, wie ich das abfangen kann oder auch wiederherstellen. Es klappt eigentlich alles und auch wird alles richtig angezeigt, ABER irgendwas stimmt sonst nicht, was die Auflösung anbelangt.

Naja.. Werde wahrscheinlich Morgen nochmal schauen, ob sich da was machen lässt..

EDIT:

Also ich habe es jetzt nochmal getestet und ich habe immer mehr Gefühl, dass es nicht an mir liegt.. :S

Es ist so, dass wenn die App mal die Device verliert und ich nachher wieder draufgehe, dass nachher irgendwie der Screen nicht ganz alleine besetzt ist. Sprich ich habe oben den Windowsbalken, der aufscheint, wenn ich ein wenig am oberem Rand rumklicke.. Ich kann so auch das Programm über den x- Schliessen Button schliessen..:S
Ebenso wird die Tastkleiste manchmal angezeigt und auch aktiv, wenn in meiner App dort draufklicke, wo der Button wäre..

Also noch irgendwelche Ideen?

5

29.03.2008, 08:41

Zitat von »"Drakon"«

Also noch irgendwelche Ideen?

Ein paar. Mal schaun, ob sie auch was bringen... :)

Beim Wechsel in den Vollbildmodus:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
// Breite/Höhe des Desktops verwenden

int width  = GetSystemMetrics(SM_CXSCREEN);
int height = GetSystemMetrics(SM_CYSCREEN);

// Fensterstil WS_POPUP verwenden (ohne Rahmen etc.)

SetWindowLongPtr(hWnd, GWL_STYLE, WS_POPUP);

// Fenster positionieren

SetWindowPos(hWnd, HWND_TOP, 0, 0, width, height, SWP_NOZORDER | SWP_SHOWWINDOW); // width/height wie BackBufferWidth/Height


Beim Wechsel in den Fenstermodus:

C-/C++-Quelltext

1
2
3
4
5
// Fensterstil OVERLAPPEDWINDOW verwenden

RECT R = {0, 0, 800, 600}; // Deine Werte hier, BackBufferWidth/Height analog

AdjustWindowRect(&R, WS_OVERLAPPEDWINDOW, false);
SetWindowLongPtr(hWnd, GWL_STYLE, WS_OVERLAPPEDWINDOW);
SetWindowPos(hWnd, HWND_TOP, x, y, R.right, R.bottom, SWP_NOZORDER | SWP_SHOWWINDOW);

Davon ausgegangen natürlich, daß deine Present Parameters stimmen ... ;)

drakon

Supermoderator

  • »drakon« ist der Autor dieses Themas

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

6

29.03.2008, 18:21

Ok, thx das geht. Aber das kann doch nicht die Lösung sein, wenn DX doch eigentlich den Screen verwaltet.. :roll:
Es MÜSSTEN ja eigentlich die gleichen Einstellungen gemacht werden, wie schon zu Anfang. :roll: - Naja.. Werde mal die Fenstereinstellungen vom Anfang ein wenig unter die Lupe nehmen. ;)

7

29.03.2008, 18:39

Alles macht DX nun auch nicht für dich.
Dürfte auch kein Problem für dich sein, das in dein Framework/deine Engine einzubinden.
Wenn du dann noch auf Änderrung der Fenstergröße (WM_SIZE, WM_EXITSIZEMOVE...) reagierst, dann hast du eigentlich alles, was man so braucht.
Inklusive gleiche proportionale Darstellung (ohne Verzerrung) von Modellen.
Das Framework vom DirectX SDK (und viele andere, die ich gesehen habe) macht es genauso.
Ein Auge auf die Fenstereinstellungen und Present Parameters zu haben, kann natürlich nicht schaden. :)

drakon

Supermoderator

  • »drakon« ist der Autor dieses Themas

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

8

29.03.2008, 18:59

Zitat von »"TrikkieMikkie"«

Alles macht DX nun auch nicht für dich.
Dürfte auch kein Problem für dich sein, das in dein Framework/deine Engine einzubinden.
Wenn du dann noch auf Änderrung der Fenstergröße (WM_SIZE, WM_EXITSIZEMOVE...) reagierst, dann hast du eigentlich alles, was man so braucht.
Inklusive gleiche proportionale Darstellung (ohne Verzerrung) von Modellen.
Das Framework vom DirectX SDK (und viele andere, die ich gesehen habe) macht es genauso.
Ein Auge auf die Fenstereinstellungen und Present Parameters zu haben, kann natürlich nicht schaden. :)


Naja. Das schon,aber naja.. Da steht ja, dass die Fenstereinstellungen wieder angenommen werden..Ich habe eher das Gefühl, dass er da nicht Fullscreen macht, sondern irgendwie das Fenster einfach erweitert..
Die Present Parameters sind sicher die gleichen. ;)

Werbeanzeige