DirectDraw Schokkerig

Status
Niet open voor verdere reacties.

Arjan B

Gebruiker
Lid geworden
11 dec 2006
Berichten
364
Wanneer ik in een fullscreen DirectDraw applicatie de Flip() functie gebruik om de backbuffer naar het scherm te toveren werkt dat prima. Maar in een windowed applicatie kan ik Flip() niet gebruiken en moet ik Blt() gebruiken om de hele backbuffer naar de client area van de window te blitten. Maar wanneer ik dat doe verloopt beweging heel schokkerig. Weet iemand hoe dit komt en hoe ik het kan oplossen?

Hier mijn flip functie:
Code:
void DDEngine::Flip()
{
    //When fullscreen use DirectDraw's Flip() function
    if(m_bFullscreen)
    {
        m_lpDDSPrimary->Flip(NULL, DDFLIP_WAIT);
    }
    else //Else we'll blit the backbuffer to the client rectangle of the window
    {
        RECT rcSource, rcDest;
        POINT p;
        p.x = 0; p.y = 0;
        
        ClientToScreen(m_hWnd, &p);
        GetClientRect(m_hWnd, &rcDest);
        OffsetRect(&rcDest, p.x, p.y);
        SetRect(&rcSource, 0, 0, m_nScreenWidth, m_nScreenHeight);
        m_lpDDSPrimary->Blt(&rcDest, m_lpDDSBack, &rcSource, DDBLT_WAIT, NULL);
    }
}
 
als je met wingdi blit dan is het verstandig om een buffer te maken om het schokken te verminderen. het schokken komt namenlijk op het moment dat je scherm hardware matig ververst terwijl de software verversing nog maar halverwege is

maak je dus een buffer aan dan heb je minder kans omdat je dan minder tijd gebruikt om naar het scherm te tekenen

werkt als volgt:
je hebt 2 "surfaces" de 1e is wat je ziet op het scherm de 2e is waar je alles op tekent. heb je alles wat je wilt tekenen getekend op de 2e dan doe je deze in zijn geheel naar de 1e tekenen.

mja zoals ik zei is dat wingdi mischien kan je er iets mee voor DX
 
Maar in een windowed applicatie kan ik Flip() niet gebruiken en moet ik Blt() gebruiken om de hele backbuffer naar de client area van de window te blitten.

Die buffer heb ik al ^^.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan