You must be sure to attach a DirectDraw palette to the primary DirectDraw surface to avoid unexpected colors in Direct3D applications. The Direct3D sample code in this Programmer's Reference attaches the palette to the primary surface whenever the window receives a WM_ACTIVATE message. If you need to track the changes that Direct3D makes to the palette of an 8-bit DirectDraw surface, you can call the IDirectDrawPalette::GetEntries method.
Your application can use three flags to specify how it will share palette entries with the rest of the system:
D3DPAL_FREE | The renderer may use this entry freely. |
D3DPAL_READONLY | The renderer may not set this entry. |
D3DPAL_RESERVED | The renderer may not use this entry. |
These flags can be specified in the peFlags member of the standard Win32 PALETTEENTRY structure. Your application can use these flags when using either the RGB or monochromatic (ramp) renderer. Although you could supply a read-only palette to the RGB renderer, you will get better results with the ramp renderer.