У меня была нулевая удача, работая с буферизацией глубины. Все рендеринг, но только в том порядке, в котором я их накладываю Когда я смотрю на шаблон глубины в VS Graphics Debugger, он НИКОГДА не пишется. Должно быть, из всего, что я могу придумать, но в отладчике все остается красным (что просто означает, что все еще ясно).
DXUT создал для меня и цель визуализации, и шаблон глубины, и я достаточно тщательно их осмотрел, чтобы быть уверенным, что все они хорошо выглядят. Я прошел его код создания и открыл MSDN и проверил каждый флаг — но тысячи уже использовали этот код раньше, я подозреваю, что конец DXUT в порядке.
Моя цель рендеринга — Texture2D, R8G8B8A8_UNORM_SRGB, 1280×1024, Сэмпл 1, Качество 0, Уровни Mip 1, установленный для привязки к цели рендеринга, без флагов.
Мой шаблон глубины — Texture2D, D24_UNORM_S8_UINT, 1280×1024, отсчет выборки 1, качество 0, уровни Mip 1, установленный для привязки в качестве трафарета глубины, без других флагов.
В начале моего рендера я очищаю представление цели рендеринга. Трудно все испортить. Затем я очищаю DepthStencil:
pd3dImmediateContext->ClearRenderTargetView(DXUTGetD3D11RenderTargetView(), Colors::Black);
pd3dImmediateContext->ClearDepthStencilView(DXUTGetD3D11DepthStencilView(), D3D11_CLEAR_DEPTH, 1.0f, 0);
Мой шаблон глубины для ВСЕХ розыгрышей:
DepthEnable TRUE
DepthFunc LESS_EQUAL
DepthWriteMask ALL
StencilEnable FALSE
DepthStencilView отображается как
Texture2D, D24_UNORM_S8_UINT, no flags, MipSlice 0
в графическом отладчике VS. У меня есть набор смешивания для твердого тела.
Это не похоже на несоответствие (например, мультисэмплинг) текстуры рендеринга цели и текстуры глубины, как я подтвердил (если только эти два формата DXGI по какой-то причине несовместимы).
Все выглядит правильно, кроме глубины, поэтому я собираюсь предположить, что мои матрицы преобразования все в порядке.
Единственный другой совет, который у меня есть на данный момент, заключается в том, что если я очищаю буфер глубины с 0,999999, все исчезает. С 1.0 все рисует (хотя с неправильной / отсутствующей глубиной).
В окне просмотра установлен размер окна, затем 0,0 как минимальная глубина и 1,0 как максимальная. Это первое, что я проверил.
Мое состояние растеризатора:
FillMode SOLID
CullMode BACK
FrontCounterClockwise FALSE
DepthBias 0
DepthBiasClamp 0.000f
SlopeScaleDepthBias 0.000f
DepthClipEnable TRUE
ScissorEnable FALSE
MultisampleEnable TRUE
AntialiasedLineEnable FALSE
ForcedSampleCount 0
Если в этом нет ничего явно неправильного, то что следует проверить дальше? Учитывая, что я использую DXUT-фреймворк, я не делаю много работ по созданию сантехники самостоятельно и всегда работал раньше! А в отладчике все выглядит отлично.
Единственное, что я не могу проверить, это выходные данные вершинного шейдера, потому что графический отладчик взрывается и падает.
Задача ещё не решена.