【发布时间】:2013-11-30 12:33:31
【问题描述】:
我从书中的一个示例中得到了一个简单的 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“信息”在哪里。任何帮助将不胜感激。
【问题讨论】:
-
" 它正在崩溃" - 那么错误消息是什么以及调试器说什么?如果您在
Render函数上设置断点并逐行执行,您的所有变量是否都已正确初始化? -
啊,非常有帮助,谢谢。我现在看到我在尝试从 NULL 指针读取时遇到了错误。在演示代码中,他们创建了一个演示对象,但我没有做过类似的事情。谢谢
-
我一直在研究这个问题,但仍然无法找出问题所在。似乎在 'd3dContext_->ClearRenderTargetView(backBufferTarget_, clearColor);' backBufferTarget_ 的值为 0x000。当我将其移至 InitD3D 区域时,我的 swapChain_ 的值为 0X000。在我初始化 D3d 之后,我的程序似乎不记得我已经设置了它。但是我很确定,从我在网上找到的示例中,他们以类似的方式进行操作并且有效。任何想法都会很棒,谢谢。
-
您是否在检查 Create* 调用的 HRESULT? COM 指针设置为 NULL (0x000...) 通常意味着创建失败。
-
你说得对,我没有检查设置 DirectX 模块的每个特定区域的初始化。