상쾌한 아침 2012. 3. 24. 17:22

/*************************************************************************/

/* Flip

/*************************************************************************/

LPDIRECTDRAWSURFACE7 m_pDDSPrimary;

LPDIRECTDRAWSURFACE7 m_pDDSBack;

LPDIRECTDRAWSURFACE7 m_pDDSOffScreen;

DDSURFACEDESC2 m_ddsd;

.....

 

/////////////////////////////////////////////////////////////////////////////////////////////////

//프리아머리 서페이스와, 백 서페이스, 오프 스크린 생성

ZeroMemory( &m_ddsd, sizeof(m_ddsd) );
m_ddsd.dwSize = sizeof(m_ddsd);
m_ddsd.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT;
m_ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_FLIP | DDSCAPS_COMPLEX;
m_ddsd.dwBackBufferCount = 1;

 

if (FAILED(m_lpdd->CreateSurface(&m_ddsd, &m_pDDSPrimary, NULL)))
{
  MessageBox( NULL, "CreateSurface 실패했습니다.", "에러", MB_OK );

  return FALSE;
}

 

DDSCAPS2 ddscaps;

ZeroMemory( &ddscaps, sizeof(ddscaps) );

ddscaps.dwCaps = DDSCAPS_BACKBUFFER;

 

if( FAILED(m_pDDSPrimary->GetAttachedSurface(&ddscaps, &m_pDDSBack)) )
{
    MessageBox( NULL, "GetAttachedSurface 실패했습니다.", "에러", MB_OK );
  
    return FALSE;
}

 

ZeroMemory( &m_ddsd, sizeof(m_ddsd) );
m_ddsd.dwSize = sizeof(m_ddsd);
m_ddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT;
m_ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
m_ddsd.dwWidth = 640;
m_ddsd.dwHeight = 480;

 

if (FAILED(m_lpdd->CreateSurface(&m_ddsd, &m_pDDSOffScreen, NULL)))
{
    MessageBox( NULL, "CreateSurface 실패했습니다.", "에러", MB_OK );

    return FALSE;

/////////////////////////////////////////////////////////////////////////////////////////////////

.....

 

m_pDDSBack->Blt( NULL, g_pGame->m_pDDSOffScreen, NULL, DDBLTFAST_WAIT, NULL );

m_pDDSPrimary->Flip( NULL, DDFLIP_WAIT );