четверг, 24 сентября 2009 г.

DirectX 11 первые разборки

Начал копать сабж. Всем кто в теме понятно, что принципиальных отличий от 10-ой версии нет, просто расширен фичелист и включены старые профили. Но не тут-то было.

Первой трудностью стало создание девайса и своп чейна по образу и подобию D3D 10. Портированный 1 к 1 код (заменил только нумерацию токенов и интерфейсов с 10 на 11) не захотел работать. Пришлось воспользоваться готовой функцией D3D11CreateDeviceAndSwapChain(). Смотрел DXUT, но там как-то мудрёно проходит инициализация DXGI, через QueryInterface() и т. д. В общем надо разбираться.

Во-вторых, из ядра убран FX. Т. е. в 10 был интерфейс ID3D10Effect и ещё куча сопутствующих интерфейсов, теперь MS решили перебросить их назад в D3DX. В принципе - правильно, т. к. FX сам по себе - просто толстая обёртка над интерфейсами ядра. Я использовал интерфейсы FX'a в 10 т. к. код с ними получался компактнее, да и примеры из SDK тоже их использовали повсеместно. Теперь же для них придётся таскать за собой d3dx11_NN.dll. Ещё беда в том что в August 2009 SDK нет никаких ID3DX11Effect(XXX) и Create-функций - видимо ещё в разработке (в SDK ни слова об этом, если найдёте - пишите). Проверил для надёжности сэмплы - везде используют функции ядра и свои функции-оболочки загрузки/компиляции шейдеров.

И последнее. В ID3D11Device остались только тяжёлые Create-функции. Вся работа с пайплайном (включая Map/Unmap ресурсов) перенесена в ID3D11DeviceContext, для эффективного формирования command-буфера на многоядерных машинах.

2 комментария:

  1. Исходники рантайма Effects11 находятся в папке utilities. И доки тоже в SDK есть.

    ОтветитьУдалить
  2. Нашёл :) Только что он там делает - непонятно. И почему примеры из SDK не используют FX - тоже. То что в SDK интерфейсы документированы - это ясно, непонятно, почему не сказано, что FX убран из ядра в utilities.

    Я ставил SDK до установки студии и пропустил, какие пути прописываются автоматически при установке SDK.

    ОтветитьУдалить