2014-01-23 2 views
1

Итак, я недавно начал использовать SharpDX и столкнулся с проблемой. Я не знаю, как заставить SharpDX мультисэмпл. Я нашел две вещи связанные; вы можете указать SampleDescription при создании SwapChainDescription, но любой ввод, отличный от (1, 0), выдает исключение неправильного параметра.Multisampling в SharpDX

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

Уверен, что у меня что-то не хватает, но без каких-либо предыдущих directX knowlegde я понятия не имею, что именно искать.

+0

Добро пожаловать в SO!Пожалуйста, отредактируйте свою запись, чтобы включить код, который не работает, что позволит нам лучше помочь вам. – Derek

+0

Вы решили свою проблему? – tweellt

ответ

2

Это пригодится в вашем случае:

int maxsamples = Device.MultisampleCountMaximum; 

int res = device.CheckMultisampleQualityLevels(SharpDX.DXGI.Format.R8G8B8A8_UNorm, samplecount); 

Если разреш возвращает 0, то это число проб не поддерживается.

Также обратите внимание, что некоторые параметры не совместимы, так что если вы создаете SwapChain с:

sd.Usage = (other usages) | Usage.UnorderedAccess; 

Вам не разрешено использовать мультисэмплинг.

Другой очень полезный метод, чтобы определить проблемы для этих ошибок:

Создание устройства с DeviceCreationFlags.Debug

В свойствах проекта запуска (отладочный раздел), отметьте «Включить родной отладки кода».

Любой отказ API, вызвавший ошибку, даст вам описание ошибки в окне вывода отладки.

+0

Привет, когда я использую 'Device.MultisampleCountMaximum', я получаю значение 32. Но независимо от' format' и 'samplecount' я перехожу к' CheckMultisampleQualityLevels', он всегда возвращает 1. Однако, когда я затем пытаюсь использовать 'new SampleDescription (samplecount, 1) 'он выдает исключение, говоря, что эта комбинация не поддерживается. Что я делаю не так? –

+1

new SampleDescription (samplecount, 0), так как вы можете подняться до максимумов - 1 – catflier

0

У меня была такая же проблема, я не мог заставить Multisampling работать до тех пор, пока не включил отладку и не получил хороший намек (очень хотелось, чтобы я сделал это несколько часов назад и сэкономил много испытаний!).

Первоначально я где-то читал, что DepthStencilBuffer имел тот же SampleDescription, что и текстуру Render, но я не настолько уверен, что, как кажется, работает без этого, как только что показал быстрый тест.

Для меня было создание DepthStencilView с DepthStencilViewDescription с параметром Dimension = DepthStencilViewDimension.Texture2DMultisampled.

0

Просто голова, когда вы делаете мультисэмплинг.

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

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

НО, если у вас есть rendertarget, который будет текстурой, которая возвращается в конвейер, вы можете определить текстуру не MSAA и буфер глубины NON MSAA, что удобно, поскольку вы можете использовать сэмплер на текстуры (вы не можете использовать обычный сэмплер для текстуры ресурсов MSAA).

Большая часть этой информации может быть не новой для вас.

Смежные вопросы