Как вы используете CheckMultisampleQualityLevels и включаете мультисэмплинг

Я изучаю DirectX 11 и пытаюсь настроить мультисэмплинг. По какой-то причине каждый учебник в Интернете отключает мультисэмплинг и никогда не рассказывает, как его включить.

Во-первых: я искал и не могу найти примеры того, как использовать CheckMultisampleQualityLevels, Похоже, вам нужно создать устройство, вызвать эту функцию, выяснить доступные уровни, затем уничтожить это устройство и создать новое с нужными вам настройками. Это правильный способ сделать это? Или есть лучший способ?

Во-вторых, как включить мультисэмплинг? Поскольку я не уверен, как получить CheckMultisampleQualityLevels работая, я попытался ввести некоторые значения для DXGI_SWAP_CHAIN_DESC.SampleDesc.Count а также DXGI_SWAP_CHAIN_DESC.SampleDesc.Quality (как 4 и 4), и пока он работает, ничего не отображается (выдает ошибку, если я ввожу сумасшедшие значения, такие как 33 и 2). Нужно ли это устанавливать где-то еще, кроме описания цепочки подкачки, или шейдеры каким-то образом мешают этому (у меня настроен базовый шейдер освещения и текстуры)?

У меня GTX 570, поэтому я знаю, что он поддерживает большинство настроек AA. Я слежу за этим набором учебников, на случай, если это поможет: http://rastertek.com/tutindex.html

3 ответа

Решение

1.Call ID3D11Device:: CheckMultisampleQualityLevels, который дает уровень качества, поддерживаемый адаптером.

2. При заполнении DXGI_SWAP_CHAIN_DESC установите SampleDesc.Count и SampleDesc.Quality.

3.Если используется сглаживание нескольких образцов, все связанные цели рендеринга и буферы глубины должны иметь одинаковое количество образцов и уровни качества. ( Структура DXGI_SAMPLE_DESC)

Согласно документу msdn о D3D11_RASTERIZER_DESC ( структура D3D11_RASTERIZER_DESC), уровень функций API 10.1 и выше, MultisampleEnable не влияет на точки и треугольники в отношении MSAA и влияет только на выбор алгоритма рендеринга линии.

Вы должны проверить MSDN для более подробной информации.

Это помогло мне:

  • буферы глубины должны иметь одинаковое количество образцов и уровни качества
  • глубина StencilViewDesc.ViewDimension = D3D11_DSV_DIMENSION_TEXTURE2DMS;

спасибо @Telanor и @user1253930

Вы должны попробовать установить MultisampleEnable D3D11_RASTERIZER_DESC.

Также установите качество на 1.

Что касается CheckmultisampleQuality, вы просто устанавливаете формат DXGI, который хотите создать. Количество образцов вы хотите. Наконец, передайте указатель на uint, и он вернет количество доступных вам уровней качества. Если он возвращает 0, то мультисэмплинг не поддерживается, иначе вы знаете, какие уровни качества вы можете установить.

Другие вопросы по тегам