Буфер глубины не записывается вызовами Draw

Мне не повезло, что работа с глубинной буферизацией Все рендерится, но только в том порядке, в котором я их накладываю Когда я смотрю на шаблон глубины в VS Graphics Debugger, он НИКОГДА не пишется. Должно быть, из всего, что я могу придумать, но в отладчике все остается красным (что просто означает, что все еще ясно).

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

Моя цель рендеринга - это Texture2D, R8G8B8A8_UNORM_SRGB, 1280x1024, отсчет выборки 1, качество 0, уровни Mip 1, установленный для привязки к цели рендеринга, без флагов.

Мой шаблон глубины - это Texture2D, D24_UNORM_S8_UINT, 1280x1024, Количество образцов 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-фреймворк, я не делаю много работ по созданию сантехники самостоятельно, и это всегда работало раньше! А в отладчике все выглядит отлично.

Единственное, что я не могу проверить - это выходные данные вершинного шейдера, потому что графический отладчик взрывается и падает.

0 ответов

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