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
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
void Display::render (Surface *sface) { RECT rectBmp; SetRect(&rectBmp, 0, 0, 129, 39); switch(m_bFullscreen) { case true: m_pddsBackBuffer->Blt(&rectBmp, sface->GetSurface(), NULL, DDBLT_WAIT, NULL); m_pddsPrimary->Blt(&rectBmp, m_pddsBackBuffer, &rectBmp, 0, NULL); return; case false: // noch nicht behandelt.. return; } } |
Zitat von »"$nooc"«
danke, aber dasselbe tutorial hab ich auch schon angesehn..
das verwendet aber die files ddutil.cpp und ddutil.h aus der DirectX SDK 7, und da ist schon alles vorgekaut..
Zitat von »"$nooc"«
ich mach directdraw deshalb, weil man da noch ein bischen mehr selber machen muss als bei der SDL, soweit ich weiss..
Zitat von »"$nooc"«
ps: ich hab mein programm zum laufen bekommen, das flackern ist weg..
der grund:
im fullscreenmodus darf man auf die primarysurface nicht flippen Flip();.. man muss darauf blitten Blt();
Zitat von »"$nooc"«
ps: ich hab mein programm zum laufen bekommen, das flackern ist weg..
der grund:
im fullscreenmodus darf man auf die primarysurface nicht flippen Flip();.. man muss darauf blitten Blt();
Zitat von »"$nooc"«
- color keying zum laufen bringen (klappt irgendwie nicht..)
- zusehn dass man mit der maus draussen im windows nicht klicken kann (weisst du evtl. wie das geht?)
- alles auch "windowed" darstellen lassen..
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
//----------------------------------------------------------------------------- // Name: ColorMatch() // Desc: //----------------------------------------------------------------------------- DWORD Surface::ColorMatch(COLORREF RGB) { COLORREF rgbT; HDC hdc; DWORD dw = CLR_INVALID; DDSURFACEDESC2 ddsd; HRESULT hres; // use GDI SetPixel to color match for us if (RGB != CLR_INVALID && m_pdds->GetDC(&hdc) == DD_OK) { rgbT = GetPixel(hdc, 0, 0); // save current pixel value SetPixel(hdc, 0, 0, RGB); // set our value m_pdds->ReleaseDC(hdc); } // now lock the surface so we can read back the converted color ddsd.dwSize = sizeof(ddsd); while ((hres = m_pdds->Lock(NULL, &ddsd, 0, NULL)) == DDERR_WASSTILLDRAWING); if (hres == DD_OK) { dw = *(DWORD *)ddsd.lpSurface; if(ddsd.ddpfPixelFormat.dwRGBBitCount < 32) dw &= (1 << ddsd.ddpfPixelFormat.dwRGBBitCount)-1; m_pdds->Unlock(NULL); } // now put the color that was there back. if (RGB != CLR_INVALID && m_pdds->GetDC(&hdc) == DD_OK) { SetPixel(hdc, 0, 0, rgbT); m_pdds->ReleaseDC(hdc); } return dw; } // ColorMatch() //----------------------------------------------------------------------------- // Name: SetColorKey() // Desc: Sets the color key //----------------------------------------------------------------------------- HRESULT Surface::SetColorKey(COLORREF RGB) { if(NULL == m_pdds) return E_POINTER; m_bColorKeyed = true; DDCOLORKEY ddck; ddck.dwColorSpaceLowValue = ColorMatch(RGB); ddck.dwColorSpaceHighValue = ddck.dwColorSpaceLowValue; if(failed(m_pdds->SetColorKey(DDCKEY_SRCBLT, &ddck))) return DD_FALSE; return DD_OK; } // SetColorKey() |
C-/C++-Quelltext |
|
1 2 3 4 |
int CreateRGB(int r,int g,int b) { return RGB(b,g,r); } |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Surface.SetColorKey(CreateRGB(0,0,0)); HRESULT Surface::SetColorKey(int color) { if(NULL == m_pdds) return E_POINTER; m_bColorKeyed = true; DDCOLORKEY ddck; ddck.dwColorSpaceLowValue = color; ddck.dwColorSpaceHighValue = ddck.dwColorSpaceLowValue; if(failed(m_pdds->SetColorKey(DDCKEY_SRCBLT, &ddck))) return DD_FALSE; return DD_OK; } // SetColorKey() |
Zitat von »"$nooc"«
oh.. ich hab die falsche flag benutzt..
aber weisst du was ich meine? wenn ich ein fullscreen fenster erstelle, dann kann ich während des renderns auf die title bar klicken und das fenster verschieben.. wie kann ich das unterbinden? also im prinzip blitte ich auf den monitor, kann aber noch immer anklicken was sich dahinter befindet.. wenn ich zb das fenster wegziehe, befindet sich dahinter mein compiler.. er wird natürlich ständig verdeckt, aber wenn ich dann in den compiler klicke, minimiert sich meine directdraw anwendung..
Zitat von »"$nooc"«
flippen kann ich nur im windowed modus..
dazu muss ich alles in den backbuffer packen, und dann nur noch:
primarysurface->Flip(...);
ist das korrekt?
Werbeanzeige