2013-11-24 157 views
0

我從一本書中的示例中運行了一個簡單的Direct3D程序。它首先創建一個贏得32個窗口,然後創建一個空白的Direct3D場景。我試圖完全重新調整代碼,使它更模塊化,風格更舒適。Direct3D 11初始化和渲染部分

現在,當我打電話給我的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

*「It is crashing」* - 那麼錯誤信息是什麼,調試器說什麼?如果你在'Render'函數上放置了一個斷點並逐行執行,那麼你所有的變量是否都被正確初始化? –

+0

啊,這是非常有益的感謝。我現在看到,我正在嘗試從NULL指針讀取錯誤。在演示代碼中,他們創建了一個演示對象,但我沒有做過那樣的事情。謝謝 –

+0

我一直在調查,但仍無法弄清楚這個問題。看來,在'd3dContext _-> ClearRenderTargetView(backBufferTarget_,clearColor);' backBufferTarget_的值爲0x000。當我將它移到InitD3D區域時,我的swapChain_的值爲0X000。這似乎是我已經初始化D3D後,我的程序不記得我已經設置好了。但我非常肯定,從我在網上找到的例子中,他們以類似的方式做到了這一點,併發揮了作用。任何想法都會很棒,謝謝。 –

回答

0

我忘了更新這個答案。問題出在我沒有出現的代碼區域:

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,它工作。

謝謝