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
и это сработало.
Спасибо