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 21 |
void Display::render (Surface *sface) { RECT rect; SetRect(&rect, 50, 50, 300, 300); switch(m_bFullscreen) { case true: m_pddsBackBuffer->Blt(&rect, sface->GetSurface(), NULL, DDBLT_WAIT, NULL); m_pddsPrimary->Blt(&rect, m_pddsBackBuffer, NULL, DDBLT_WAIT, NULL); m_pddsPrimary->Flip(NULL, DDFLIP_WAIT); case false: // noch nicht behandelt.. default: return; } } |
C-/C++-Quelltext |
|
1 |
m_pddsPrimary->Blt(&rect, m_pddsBackBuffer, NULL, DDBLT_WAIT, NULL); |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
void Display::render (Surface *sface) { RECT rect; SetRect(&rect, 0, 0, 124, 39); switch(m_bFullscreen) { case true: m_pddsBackBuffer->Blt(&rect, sface->GetSurface(), NULL, DDBLT_WAIT, NULL); while(m_pddsPrimary->Flip(NULL, DDFLIP_WAIT) != DD_OK); case false: // noch nicht behandelt.. default: return; } } |
Zitat von »"$nooc"«
bin jetz im moment nicht daheim, aber ich glaub ich weiss bereits warum ich das weglassen muss
vermutlich weil Flip() sowieso den BackBuffer zuerst auf PrimarySurface blittet, oder?
danke für die antwort!
C-/C++-Quelltext |
|
1 |
while(m_pddsPrimary->Flip(NULL, DDFLIP_WAIT) != DD_OK); |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
// [...] while(run) { if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { if(msg.message == WM_QUIT) break; TranslateMessage(&msg); DispatchMessage(&msg); } ulRenderTime = GetTickCount(); pDsp->render(sface); ulRenderTime = GetTickCount() - ulRenderTime; if(ulRenderTime < 30) Sleep(30 - ulRenderTime); } // [...] |
C-/C++-Quelltext |
|
1 |
pDsp->render(sface); |
C-/C++-Quelltext |
|
1 2 |
pDsp->render(sface); pDsp->render(sface); |
Zitat von »"$nooc"«
boah .. jetz hab ich was lustiges gemacht..
pDsp->render(sface);
ist der aufruf fürs rendern..
wenn ich es wirklich nur 1mal aufrufe, dann ist das bild richtig dargestellt..
C-/C++-Quelltext
1 pDsp->render(sface);
wenn ich es 2mal aufrufe, dann seh ich nur ein weisses, leeres fenster
C-/C++-Quelltext
1 2 pDsp->render(sface); pDsp->render(sface);
beim 3ten mal isses wieder richtig, beim 4ten mal wieder falsch..
also irgendwas wechselt da dauernd, aber ich kann beim debuggen nichts sehen..
er geht immer einfach nur rein in die funktion, macht was es soll und geht wieder raus, ohne irgendwelche umwege..
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 |
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrecInstancen, LPSTR lpCmdLine, int iCmdShow) { // [...] <- Fenster initialisierung pDsp = new Display(hwnd); Bitmap bmp; if(!bmp.loadBitmap(TEXT("Bitmap1.bmp"))) return 1; pDsp->CreateFullScreenDisplay(1024, 768, 32); pDsp->CreateSurfaceFromBitmap(&sface, bmp); unsigned long ulRenderTime; while(run) { if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { if(msg.message == WM_QUIT) break; TranslateMessage(&msg); DispatchMessage(&msg); } ulRenderTime = GetTickCount(); pDsp->render(sface); ulRenderTime = GetTickCount() - ulRenderTime; if(ulRenderTime < 30) Sleep(30 - ulRenderTime); } ptrDelete(pDsp); ptrDelete(sface); return static_cast<int>(msg.wParam); } // WinMain() |
Werbeanzeige