Поделиться через


Метод 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

См. также раздел

IDirectDrawSurface7