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


Переключение между стандартным и нестандартным режимами

Драйвер DirectX 9.0 создает стандартную основную поверхность для стандартного режима отображения и фиктивную первичную поверхность для нестандартного режима, чтобы среда выполнения при необходимости переключалась между режимами. Обе поверхности представляют одну и ту же видеопамять, за исключением отображения в разных форматах. Драйвер переключается между стандартным и нестандартным режимами при запросе перелистывания страницы, как показано в следующей последовательности:

  1. Приложение запрашивает переключение режима.

    Приложение вызывает функцию ChangeDisplaySettings , чтобы изменить режим видео на соответствующую битовую глубину. В режиме 10:10:10:2 битовая глубина составляет 32 бита на пиксель. Дополнительные сведения о ChangeDisplaySettings см. в документации по Microsoft Windows SDK.

  2. Драйвер создает стандартную основную поверхность.

    Среда выполнения вызывает функцию DdCreateSurface драйвера, чтобы запросить создание основной поверхности. Эта основная поверхность использует стандартный формат отображения (например, D3DFMT_A8B8G8R8) и не имеет задних буферов.

  3. Драйвер создает фиктивную основную цепочку поверхности.

    Среда выполнения вызывает функцию DdCreateSurface драйвера, чтобы запросить создание фиктивной первичной поверхности. Среда выполнения указывает бит возможности DDSCAPS2_EXTENDEDFORMATPRIMARY (0x40000000) в элементе dwCaps2 структуры DDSCAPS2 для этой поверхности, чтобы указать, что поверхность использует нестандартный режим отображения (например, D3DFMT_A2R10G10B10). Среда выполнения также указывает бит возможности DDSCAPS_OFFSCREENPLAIN в элементе dwCaps DDSCAPS2, чтобы указать, что поверхность имеет явный формат пикселей.

    Так как эта поверхность предназначена только для другого имени существующей основной поверхности, драйвер не должен выделять дополнительную видеопамять для поверхности.

    Для этой поверхности среда выполнения также задает биты DDSCAPS_FLIP и DDSCAPS_COMPLEX в dwCaps и подключенный набор задних буферов аналогично тому, как среда выполнения настраивает стандартную цепочку переворачивания основной поверхности. Драйвер должен выделить видеопамяти для этих задних буферов, так как для этих задних буферов не выполняются дальнейшие вызовы функции DdCreateSurface драйвера; то есть среда выполнения создает несколько объектов Surface только для стандартного первичного объекта.

  4. Драйвер переключает поверхность в нестандартный формат.

    В то время как устройство отображения выводит стандартный формат, приложение создает нестандартное изображение в одном из этих задних буферов. Когда изображение будет готово к отображению, среда выполнения указывает одну из нестандартных поверхностей в качестве целевой в вызове функции DdFlip драйвера. Затем драйвер перепрограммирует устройство отображения, чтобы вывести нестандартный формат.

  5. Выполняется запуск приложения.

    Приложение создает дальнейшие вызовы функции DdFlip драйвера между нестандартными буферами, и драйвер продолжает отображать нестандартный формат. Приложение также может создавать вызовы функции D3dDrawPrimitives2 драйвера, используя код операции D3DDP2OP_BLT для копирования обратного буфера в передний буфер, но эти вызовы всегда выполняются между двумя нестандартными объектами поверхности. Если драйвер не поддерживает нестандартный формат в оконном режиме, драйвер не обрабатывает переключение между нестандартным и стандартным форматами поверхности. Дополнительные сведения о регистре в оконном режиме см. в разделе Поддержка операций Two-Dimensional.

  6. Драйвер переключает поверхность обратно в стандартный формат.

    Когда приложение закрыто или свернуто, среда выполнения указывает основную поверхность стандартного формата в качестве назначения при вызове функции DdFlip драйвера. Затем драйвер перепрограммирует устройство отображения для вывода стандартного формата.

  7. Водитель уничтожает фиктивную поверхность.

    Когда драйвер удаляет фиктивную поверхность, он должен убедиться, что стандартный формат перепрограммирован на устройстве отображения.