5edf7c19

в настоящее время видимая пользователю.


Основная поверхность - поверхность, в настоящее время видимая пользователю. Когда Вы создаете основную поверхность, Вы фактически создаете объект 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 ниже) подготовлены к созданию простой вне экранной поверхности.

DDSURFACEDESC ddsd;

ddsd.dwSize = sizeof( ddsd );

//Tell DDRAW, которые поля имеют силу

ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH;

//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 ниже) подготовлены к сложному поверхностному созданию и заполнены, чтобы описать переключающуюся поверхность, которая имеет один обратный буфер.

DDSURFACEDESC      ddsd;

ddsd.dwSize = sizeof( ddsd );

//Tell DDRAW which fields are valid

ddsd.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT;

//Ask для первичной поверхности с одиночным

//back буфер

ddsd.ddsCaps.dwCaps = DDSCAPS_COMPLEX | DDSCAPS_FLIP |

DDSCAPS_PRIMARYSURFACE;

ddsd.dwBackBufferCount = 1;

Пример создает поверхность с двойным буфером и переключающимися страницами, a одиночное обращение к IDirectDrawSurface::Flip обменивает поверхностную память  основной поверхности с обратным буфером. Если BackBufferCount  определен значением 2, будут созданы два обратных буфера, и каждое обращение к IDirectDrawSurface:: Flip вращает поверхности по кругу, обеспечивая тройную буфернуюпереключающуюся среду.


Содержание раздела