2012-10-10 109 views
1

我正在尝试查找调整图形界面大小的最佳方法。我尝试重新初始化设备,但没有删除我制作的形状缓冲区,但我最终大量泄漏。高效调整DirectX窗口的大小

我在这个问题上没有找到任何有用的东西。

是否需要删除所有[缓冲区,设备,适配器] &从头开始重新启动图形界面? 或者有没有一种有效的方法呢?

这是用于DX 10/11接口。

编辑: 这是一个很大的代码来显示,但我只是:

cleanup(); // Pointers related to the device 
    initDevice(hWnd); // Create new device with updated size 
    draw(stuff); // I never deleted my constant/index/vertex buffers 

具体而言,我没有删除这些:

ID3D11Buffer* constantBuffer; 
    ID3D11Buffer* vertexBuffer; 
    ID3D11Buffer* indexBuffer; 
    ID3D11VertexShader* vertexShader; 
    ID3D11PixelShader* pixelShader; 
    ID3D11InputLayout* vertexLayout; 

我希望通过在用户调整大小时不重新创建图形来节省性能。

+0

如果不查看代码,我不能说任何有用的内容,但在阅读您的描述时,我怀疑您必须重新分配某个缓冲区而不是重新使用旧的。它总是发生**或只有当你从一个大界面切换到一个小界面时。 –

+0

**编辑:**确定要添加什么代码,但我希望这有助于。 – RandomClown

回答

6

有一个msdn article解释你需要做什么。你读过吗?

+0

/embarassed_face我没有捕捉到,当我谷歌搜索。现在检查出来。 – RandomClown

+0

好文章,但可能矫枉过正。如果你添加了不适合你的东西,这将会很有帮助。如果你创建一个d3d设备窗口它应该真的automagicaly调整大小。你必须做的一件事是改变视口,也许你的尺寸依赖矩阵。我看到很多没有很好理由的人工交换链管理的代码。 – starmole

+0

好吧,它比我期待的更容易。当我实施它时,这太浪费了。我注意到许多行与init步骤相同,不同之处在于3行。我做了一个功能,现在它工作得很好。 – RandomClown