Метод IDirectDrawSurface7::Flip (ddraw.h)
Позволяет связать память поверхности, связанную с поверхностью DDSCAPS_BACKBUFFER, с поверхностью переднего буфера.
Синтаксис
HRESULT Flip(
[in] LPDIRECTDRAWSURFACE7 unnamedParam1,
[in] DWORD unnamedParam2
);
Параметры
[in] unnamedParam1
Указатель на интерфейс IDirectDrawSurface7 для произвольной поверхности в цепочке переворачивания. Значение по умолчанию для этого параметра равно NULL. В этом случае DirectDraw циклически проходит по буферам в том порядке, в котором они присоединены друг к другу. Если этот параметр не равен NULL, DirectDraw переключается на указанную поверхность, а не на следующую поверхность в цепочке переворачивания. Пролистывание завершается ошибкой, если указанная поверхность не является членом цепочки переворачивания.
[in] unnamedParam2
Сочетание флагов, указывающих параметры пролистывания. Определены следующие флаги:
DDFLIP_DONOTWAIT
В интерфейсах IDirectDrawSurface7 по умолчанию используется DDFLIP_WAIT. Если вы хотите переопределить значение по умолчанию и использовать время, когда ускоритель занят (как указано в возвращаемом значении DDERR_WASSTILLDRAWING), используйте DDFLIP_DONOTWAIT.
DDFLIP_EVEN
Используется только при отображении видео на поверхности наложения. Новая поверхность содержит данные из четного поля видеосигнала. Этот флаг нельзя использовать с флагом DDFLIP_ODD.
DDFLIP_STEREO
DirectDraw переворачивает и отображает main стерео surface. Если этот флаг установлен, включена функция автоподбора стерео. Оборудование автоматически переключается между левым и правым буферами при каждом обновлении экрана.
DDFLIP_INTERVAL2
DDFLIP_INTERVAL3
DDFLIP_INTERVAL4
Флаги DDFLIP_INTERVAL2, DDFLIP_INTERVAL3 и DDFLIP_INTERVAL4 указывают, сколько вертикальных откатов следует ожидать между каждым флипом. Значение по умолчанию — 1. DirectDraw возвращает DERR_WASSTILLDRAWING для каждой поверхности, участвуя в переворачивании, до тех пор, пока не будет выполнено указанное количество вертикальных откатов. Если задано DDFLIP_INTERVAL2, DirectDraw переворачивается при каждой второй вертикальной синхронизации; если DDFLIP_INTERVAL3, при каждой третьей синхронизации; и, если DDFLIP_INTERVAL4, при каждой четвертой синхронизации.
Эти флаги действуют только в том случае, если DDCAPS2_FLIPINTERVAL бит установлен в элементе dwCaps2 структуры DDCAPS , возвращаемой для оборудования дисплея.
DDFLIP_NOVSYNC
Заставляет DirectDraw выполнять физическое пролистывание как можно ближе к следующей строке сканирования. Последующие операции, включающие две перевернутые поверхности, не проверка, завершилось ли физическое пролистывание, т. е. они не возвращают DDERR_WASSTILLDRAWING по этой причине (но могут и по другим причинам). Это позволяет приложению выполнять пролистывание с более высокой частотой, чем частота обновления монитора, но может привести к отображению артефактов.
Если DDCAPS2_FLIPNOVSYNC не задано в элементе dwCaps2 структуры DDCAPS , возвращаемой для оборудования дисплея, DDFLIP_NOVSYNC не действует.
DDFLIP_ODD
Используется только при отображении видео на поверхности наложения. Новая поверхность содержит данные из нечетного поля видеосигнала. Этот флаг нельзя использовать с флагом DDFLIP_EVEN.
DDFLIP_WAIT
Как правило, если пролистывание не удается настроить, так как состояние оборудования дисплея не подходит, DDERR_WASSTILLDRAWING ошибка возвращается немедленно, и пролистывание не происходит. Установка этого флага приводит к тому, что функция Flip продолжит пытаться выполнить проверку, если получает ошибку DDERR_WASSTILLDRAWING от уровня аппаратной абстракции (HAL). Функция Flip не возвращается до тех пор, пока не будет успешно настроена операция пролистывания или не будет возвращена другая ошибка, например DDERR_SURFACEBUSY.
Возвращаемое значение
Если метод выполнен успешно, возвращаемое значение будет DD_OK.
В случае сбоя метод может вернуть одно из следующих значений ошибки:
- DDERR_GENERIC
- DDERR_INVALIDOBJECT
- DDERR_INVALIDPARAMS
- DDERR_NOFLIPHW
- DDERR_NOTFLIPPABLE
- DDERR_SURFACEBUSY
- DDERR_SURFACELOST
- DDERR_UNSUPPORTED
- DDERR_WASSTILLDRAWING
Комментарии
При использовании IDirectDrawSurface7 функция Flip по умолчанию ожидает завершения работы ускорителя. Поэтому в условиях по умолчанию flip никогда не возвращает DDERR_WASSTILLDRAWING. Если вы хотите просмотреть коды ошибок и не ждать, пока операция переворачивания завершится успешно, используйте флаг DDFLIP_DONOTWAIT.
Функция Flip может вызываться только для поверхности с возможностями DDSCAPS_FLIP и DDSCAPS_FRONTBUFFER. Память дисплея, ранее связанная с передним буфером, связана с задним буфером.
Параметр lpDDSurfaceTargetOverride используется в редких случаях, когда задний буфер не является буфером, который должен стать передним. Как правило, этот параметр имеет значение NULL.
Flip всегда синхронизирован с вертикальным пробелом. Если поверхность назначена видеопорту, этот метод обновляет видимую поверхность наложения и целевую поверхность видеопорта.
Требования
Требование | Значение |
---|---|
Целевая платформа | Windows |
Header | ddraw.h |
Библиотека | Ddraw.lib |
DLL | Ddraw.dll |