Directx 11 Z-Buffer не рендерится и не мерцает

Я пытаюсь настроить Z-буфер с DirectX 11, но он не работает, как ожидалось. Без Z-буфера он показывает дальнейшие объекты поверх ближайших, как и следовало ожидать. С буфером он показывает пустой экран, затем мерцает биты при его перемещении, как показано на это видео.

Вот моя инициализация Z-буфера.

// Create a Z buffer texture
D3D11_TEXTURE2D_DESC tex2dDesc;
ZeroMemory(&tex2dDesc, sizeof(tex2dDesc));

tex2dDesc.Width = width;
tex2dDesc.Height = height;
tex2dDesc.ArraySize = 1;
tex2dDesc.MipLevels = 1;
tex2dDesc.Format = DXGI_FORMAT_D24_UNORM_S8_UINT;
tex2dDesc.SampleDesc.Count = sd.SampleDesc.Count;
tex2dDesc.BindFlags = D3D11_BIND_DEPTH_STENCIL;
tex2dDesc.Usage = D3D11_USAGE_DEFAULT;

ID3D11Texture2D *pZBufferTexture;
hr = g_pD3DDevice->CreateTexture2D(&tex2dDesc, NULL, &pZBufferTexture);

if(FAILED(hr)) return hr;

// Create the Z buffer
D3D11_DEPTH_STENCIL_VIEW_DESC dsvDesc;
ZeroMemory(&dsvDesc, sizeof(dsvDesc));

dsvDesc.Format = tex2dDesc.Format;
dsvDesc.ViewDimension = D3D11_DSV_DIMENSION_TEXTURE2D;

g_pD3DDevice->CreateDepthStencilView(pZBufferTexture, &dsvDesc, &g_pZBuffer);
pZBufferTexture->Release();// Set the render target view
g_pImmediateContext->OMSetRenderTargets(1, &g_pBackBufferRTView, g_pZBuffer);

Вот что работает в рендеринге.

g_pImmediateContext->ClearRenderTargetView(g_pBackBufferRTView, g_clear_colour);

g_pImmediateContext->ClearDepthStencilView
(g_pZBuffer, D3D11_CLEAR_DEPTH | D3D11_CLEAR_STENCIL, 1.0f, 0);

Я все еще начинающий, когда дело доходит до DirectX 11, поэтому любая помощь будет принята с благодарностью. Если требуется больше кода, я могу предоставить.

0

Решение

Вы должны добавить D3D11_CREATE_DEVICE_DEBUG флаг при создании устройства. Если что-то не так в кадре, вы найдете подробный ключ к объяснению почему в выходном журнале.

также не создавайте буфер трафарета, если вы не используете трафарет. Современные графические процессоры в любом случае не хранят информацию в буфере глубины, формат D32 не тратит впустую 8 бит точности.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector