HOWTO: How to Set Up and Use 320x200x8 and 320x240x8 DDraw Modes
ID: Q139096
|
The information in this article applies to:
-
Microsoft Game Software Development Kit (SDK), version 1.0
SUMMARY
To set up DirectDraw's mode 13 (320x200x8) or mode X (320x240x8), an
application must use the DDSCL_ALLOWMODEX flag with SetCooperativeLevel() for both modes. After calling SetCooperativeLevel(), call SetDisplayMode() for the appropriate display mode. SetDisplayMode will return DDERR_INVALIDMODE if DDSCL_ALLOWMODEX is not used.
DirectDraw's mode 13 and mode X primary surfaces cannot be locked down
for direct access. Applications using these two modes should create a
primary surface with one back buffer. The back buffer is used as the
rendering surface. Call Flip() for page flipping between the primary
surface and the back buffer.
MORE INFORMATION
Example Code to Set Up Mode 13 or Mode X
LPDIRECTDRAW lpDD; // DirectDraw object
LPDIRECTDRAWSURFACE lpDDSPrimary; // DirectDraw primary surface
LPDIRECTDRAWSURFACE lpDDSBack; // DirectDraw back surface
DDSCAPS ddscaps;
DDSURFACEDESC ddsd;
HRESULT hResult;
// Create the main DirectDraw object
hResult = DirectDrawCreate( NULL, &lpDD, NULL );
if (DD_OK != hResult)
{
// Handle error
}
// Get exclusive mode
hResult = lpDD->SetCooperativeLevel(hWnd, DDSCL_EXCLUSIVE |
DDSCL_FULLSCREEN | DDSCL_ALLOWMODEX);
if (DD_OK != hResult)
{
// Handle error
}
// Use mode 13
hResult = lpDD->SetDisplayMode( 320, 200, 8 );
if (DD_OK != hResult)
{
// handle error
}
Example Code to Create a Primary Surface with One Back Buffer
ZeroMemory(&ddsd, sizeof(ddsd));
ddsd.dwSize = sizeof(ddsd);
ddsd.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT;
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_FLIP |
DDSCAPS_COMPLEX;
ddsd.dwBackBufferCount = 1;
// Create a primary surface with one back buffer
hResult = lpDD->CreateSurface( &ddsd, &lpDDSPrimary, NULL );
if (DD_OK != hResult)
{
// Handle error
}
// Get a pointer to the back buffer
ddscaps.dwCaps = DDSCAPS_BACKBUFFER;
hResult = lpDDSPrimary->GetAttachedSurface(&ddscaps, &lpDDSBack);
if (DD_OK != hResult)
{
// Handle error
}
Additional query words:
1.00
Keywords : kbcode GDIDDraw
Version : :1.0
Platform : WINDOWS
Issue type : kbhowto