|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
andijota Junior JLI'ler
Anmeldedatum: 07.11.2002 Beiträge: 66 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 30.07.2003, 19:13 Titel: Dialog geht im excl. FullScreenMode (mit aufpassen) |
|
|
hallo
ich benutze (nach dem DX8 Beispiel fullscreendialog) normale win-Dialoge auch im exclusive fullscreen-modus
ABER:
50/50 erscheint der Dialog mal und mal erst nach Flip().
momentane (amateur-) Loesung:
1. lass ich einfach Flip() oder Present weg waehrend des Dialoges:
if(!windowed && !g_FullscreenDialog)Flip() oder ...Present(...)
//(damit nix flackert, das spiel
//wird weiter berechnet im Thread)
2. ruf ich einfach Flip() auf, wenn man den Dialog das zweite mal aufruft (weil er noch nicht sichtbar ist= weil er im momentanen BackBuffer ist):
" (mit aufpassen) "
//////anfang SHOW_DIALOGfull
void SHOW_DIALOGfullexit()
//VK_F10
{
g_FullDiag =0; //EXIT
EndDialog(
g_hWndDlg, TRUE );
g_hWndDlg = NULL; //EXIT
}
void SHOW_DIALOGfull( HWND hWnd )
// case IDM_SHOW_DIALOGfull: //full: VK_F5
{
HINSTANCE hInst; //, hInstDlg;
#ifdef _WIN64
hInst = (HINSTANCE) GetWindowLongPtr( hWnd, GWLP_HINSTANCE );
#else
hInst = (HINSTANCE) GetWindowLong( hWnd, GWL_HINSTANCE );
#endif
if(!g_hWndDlg)
//wenn der noch nicht da is
{
////WAERE SUPER, wer weiss wie das geht
////FlipToGDISurface(THIS);
g_hWndDlg = CreateDialog(
hInst,
MAKEINTRESOURCE(IDD_DIALOG_SAMPLE),
hWnd, (DLGPROC) SampleDlgProc );
}
else if(g_FullDiag > 1) //1mal
{
g_FullDiag--;
//wenn == 1 wird es nicht mehr aufgerufen
//wegen oben else if(g_FullDiag > 1)
EndDialog( g_hWndDlg,TRUE );
//koennte unnoetig sein
//aber never change a running code )
g_hWndDlg = CreateDialog(
hInst, MAKEINTRESOURCE(IDD_DIALOG_SAMPLE),
hWnd, (DLGPROC) SampleDlgProc );
m_pd3dDevice->Present( NULL, NULL, NULL, NULL );
//entweder der Dialog is da oder beim 2.mal aufruf
}
if(m_bWindowed ) ShowWindow( g_hWndDlg, SW_SHOW );
else ShowWindow( g_hWndDlg, SW_SHOWMAXIMIZED );
//damit nix beim verschieben/groesse veraendern nervt
//groesse veraendern hab ich im fullscreen gesperrt
}
//und sonst
//in zusammenhang mit Render():
...
if(g_FullDiag)
m_pd3dDevice->Present( NULL, NULL, NULL, NULL );
//bzw
Flip();
...
//////ende SHOW_DIALOGfull
//anstelle von allen Amateur-Kunstgriffen wuerde
//ich gern immer zum richtigen buffer schalten:
////*******entweder mit
////FlipToGDISurface(THIS);
////*******oder auch noch amateurmaessig ich
//frag ein (paar) pixel-farben meines fullscreen ab
//um zu entscheiden:
//wenn Dialog zu sehen == farbe is nicht von meinem spiel: OK
//wenn Dialog nicht zu sehen: Flip() bzw. Present(....)
//folgendes ging aber nicht:
//////////////////anfang GetDlgPixColor()
void GetDlgPixColor()
{
LPDIRECT3DSURFACE8 pBack ;
pBack = g_pApp->m_b_BackBuf;
D3DLOCKED_RECT lr;
pBack->LockRect( &lr, NULL, 0 );
// pointer to the associated surface memory
//so wars im jli-text-beispiel zum oberflaeche sperren:
//...
//WORD* wlpSurface=(WORD*)DDSurfDesc.lpSurface;
//das geht leider nicht:
WORD* wlpSurface=(WORD*)pBack;
//weil der back-buffer is im Grafikkartenspeicher????
//muss ich den erst in RAM kopieren????
int Pitch=64; //mein erkennungs-Pixel-Offset
g_DlgPixColor =(unsigned int) wlpSurface[Pitch]; ////x + y * Pitch];
pBack->UnlockRect();
}
/////////////////ende GetDlgPixColor()
////******oder am liebsten
////so wie im DX-Aufruf des Input Config Screens:
BOOL CMyD3DApplication::ConfigureInputDevicesCB(
IUnknown* pUnknown )
{...
LPDIRECT3DSURFACE8 pBackBuffer;
m_pd3dDevice->GetBackBuffer(
0, D3DBACKBUFFER_TYPE_MONO, &pBackBuffer );
m_pd3dDevice->CopyRects(
pConfigSurface, &rcSrc, 1, pBackBuffer,
&ptDst );
pBackBuffer->Release();
// Present the backbuffer contents to the front buffer
m_pd3dDevice->Present( NULL, NULL, NULL, NULL );
// Release the surface
pConfigSurface->Release();
}
erbitte einen tip
danke
aber ich will auch was beitragen
(und nicht nur fragen stellen) ))
ich poste gleich mal den
aufruf einer console fuer in/out im fullscreenmodus auf dem 2. monitor
und ein beispiel fuer Threads aus dem www
gruesse aus berlin
andi |
|
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
|