Direct3D 11 инициализация и рендеринг разделов

Я получил простую программу Direct3D, запущенную на примере из книги. Сначала создается окно win 32, а затем пустая сцена Direct3D. Я пытаюсь полностью перенастроить код, чтобы он был более модульным и в стиле, который мне удобнее.

Прямо сейчас он падает, когда я звоню Render функция. Функция:

void Render(void)
{

    float clearColor[4] = { 0.0f, 0.0f, 0.25f, 1.0f };
    d3dContext_->ClearRenderTargetView(backBufferTarget_, clearColor);
    swapChain_->Present(0, 0);

}

Функция wWinMain выглядит следующим образом:

int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE prevInstance, LPWSTR cmdLine, int cmdShow)
{
InitWindow();

InitD3D();

InitScene();

while (!progFinished)
{

    MessagePump(); 

    Render(); 
}
return 0;
}

Насколько я вижу, он падает, когда d3dContext_->ClearRenderTargetView(backBufferTarget_, clearColor); Исходный код имеет функцию рендеринга как:

    while( msg.message != WM_QUIT )
{
    if( PeekMessage( &msg, 0, 0, 0, PM_REMOVE ) )
    {
        TranslateMessage( &msg );
        DispatchMessage( &msg );
    }
    else
    {
    // Update and Draw
    demo->Update( 0.0f ); 
    demo->Render( ); 
    }
}

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

1 ответ

Решение

Я забыл обновить это для ответа. Проблема была в области кода, которую я не представил:

HWND hwnd = CreateWindowA("DX11BookWindowClass", "Blank Win32 Window", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, rc.right - rc.left, rc.bottom - rc.top, NULL, NULL, hInstance, NULL);

HWND ранее был определен как глобальный, а затем снова локально. Все, что мне нужно было сделать, это удалить HWND и это сработало.

Спасибо

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