LPDIRECT3DDEVICE9 - > BeginScene()函数失败

时间:2011-12-09 07:49:20

标签: c++ algorithm directx

现在,我尝试为2D游戏实现引擎。 我已经为游戏成功创建了窗口。 但是有一个问题。当我打电话给 device-> BeginScene()时,它无效。那个功能失败了。

我搜索并知道该功能失败,因为我之前已经调用 device-> BeginScene()而没有调用 device-> EndScene() (这意味着我连续两次调用函数 device-> BeginScene())。 一些代码:

//GameEngine.cpp
    void CGameEngine::Draw() 
        {
            // let the state draw the screen
            if (!states.empty())
            {
                this->RenderStart();// this function failed- return 0
                this->Render2D_Start();
                states.back()->Draw(this);
                this->Render2D_Stop();
                this->RenderStop();

            }
        }

我已经多次调试但没有发现错误!!

任何人都可以帮助我吗?

(引擎中的所有类都可以,仅在类CIntroState和CGameEngine上有问题) 下载我的项目:http://mediafire.com/?h3jumchcqujnh69

提前感谢。 Sory因英语不好。

1 个答案:

答案 0 :(得分:0)

您是否阅读过the documentation?它指定不允许嵌套BeginScene调用。您必须在EndScene之后致电BeginScene,然后再次致电BeginScene

  

在任何连续的调用之间应该有一个IDirect3DDevice9 :: BeginScene / IDirect3DDevice9 :: EndScene对(IDirect3DDevice9 :: Present或IDirect3DSwapChain9 :: Present)。 IDirect3DDevice9 :: BeginScene 应该在执行任何渲染之前调用,并且在将帧的所有渲染都提交到运行时之后,应该调用IDirect3DDevice9 :: EndScene 。在调用present之间存在多个非嵌套的IDirect3DDevice9 :: BeginScene / IDirect3DDevice9 :: EndScene对是合法的,但是如果有多对,可能会导致性能下降。