Основная поверхность - поверхность, в настоящее время видимая пользователю. Когда Вы создаете основную поверхность, Вы фактически создаете объект DirectDrawSurface, чтобы обратиться к уже существующей поверхности, используемой GDI. Следовательно, в то время как все другие типы поверхностей требуют значений dwHeight и dwWidth, основная поверхность не должна иметь их определенными, даже если Вы знаете, что они - те же самые размеры как у существующей поверхности.
Члены структурыDDSURFACEDESC (ddsd ниже) подготовленные к созданию основной поверхности.
DDSURFACEDESC ddsd;
ddsd.dwSize = sizeof( ddsd );
//Tell DDRAW, которые поля имеют силу
ddsd.dwFlags = DDSD_CAPS;
//Ask для первичной поверхности
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;
Создайте простую вне экранную поверхность типа, который мог бы использоваться, чтобы кэшировать растры, которые будут позже составлены для блиттинга. Высота и ширина требуется для всех поверхностей за исключением основной поверхности. Члены в структуреDDSURFACEDESC (ddsd ниже) подготовлены к созданию простой вне экранной поверхности.
//Ask для простой off-screen поверхности, установленной по размеру
//100 100 пикселями
ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
dwHeight = 100;
dwWidth = 100;
DirectDraw создает эту поверхность в памяти дисплея, если это не будет успешно, тогда поверхность будет создана в памяти системы. Если поверхность была создана, используйте флажки DDSCAPS_SYSTEMMEMORY или DDSCAPS_VIDEOMEMORY в dwCaps, чтобы определить где, в памяти системы или памяти дисплея, соответственно. Ошибка возвращается, если поверхность не может быть создана в определенном расположении.
DirectDraw также учитывает создание сложных поверхностей. Сложная поверхность - набор поверхностей, созданных с одиночным обращением к IDirectDraw:: CreateSurface. Если флажок DDSCAPS_COMPLEX установлен в IDirectDraw:: CreateSurface, одна или много неявных поверхностей будут созданы DirectDraw в дополнение к поверхности, явно определенной. Сложные поверхности управляются вместе,одиночное обращение к IDirectDraw::Release разрушит все поверхности в структуре, и одиночное обращение к IDirectDrawSurface::Restore восстановит их все.
Одна из наиболее полезных сложных поверхностей, которые Вы можете определять, составлена из первичной поверхности и одного или многих обратных буферов, которые формируют переключающуюся поверхность. Члены в структуре DDSURFACEDESC (ddsd ниже) подготовлены к сложному поверхностному созданию и заполнены, чтобы описать переключающуюся поверхность, которая имеет один обратный буфер.
Пример создает поверхность с двойным буфером и переключающимися страницами, a одиночное обращение к IDirectDrawSurface::Flip обменивает поверхностную память основной поверхности с обратным буфером. Если BackBufferCount определен значением 2, будут созданы два обратных буфера, и каждое обращение к IDirectDrawSurface:: Flip вращает поверхности по кругу, обеспечивая тройную буфернуюпереключающуюся среду.