【问题标题】:Direct3D 11 initialization and render sectionsDirect3D 11 初始化和渲染部分
【发布时间】: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 模块的每个特定区域的初始化。

标签: directx direct3d


【解决方案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,它就成功了。

谢谢

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-25
    • 2021-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-10
    相关资源
    最近更新 更多