C++ 带有纹理(C+;+;)的DirectX释放功能

C++ 带有纹理(C+;+;)的DirectX释放功能,c++,memory-management,textures,directx-9,C++,Memory Management,Textures,Directx 9,我有一个关于DirectX 9、纹理和发布它们的问题。 我现在正在用C++构建一个2D游戏。我用D3DXCreateTextureFromFileEx加载了许多纹理,然后当从“场景”继续时,用纹理->释放()释放它们;这很好 我已经做了一个类来处理游戏的项目列表。在其中,我在创建类时为每个项目加载纹理,当游戏退出时,它会释放每个纹理。然而,我一直遇到一个问题 即使我已经加载了纹理,如果我不->draw()它,程序在试图释放它时会崩溃 谁能解释一下为什么会这样? 我想在尝试->释放()纹理之前,我

我有一个关于DirectX 9、纹理和发布它们的问题。 我现在正在用C++构建一个2D游戏。我用D3DXCreateTextureFromFileEx加载了许多纹理,然后当从“场景”继续时,用纹理->释放()释放它们;这很好

我已经做了一个类来处理游戏的项目列表。在其中,我在创建类时为每个项目加载纹理,当游戏退出时,它会释放每个纹理。然而,我一直遇到一个问题

即使我已经加载了纹理,如果我不->draw()它,程序在试图释放它时会崩溃

谁能解释一下为什么会这样? 我想在尝试->释放()纹理之前,我需要某种条件检查来查看纹理是否已绘制

编辑:

这是我试图描述的一个被淡化了很多的版本。这是可行的,但如果注释掉d3dspt->绘制线,则在释放纹理时失败。它似乎只能在绘制纹理后释放纹理。我假设您需要在加载并完成它们之后释放它们,不管它们是否已绘制。我只是在寻找一个确认、解释或任何可能启发我的东西。 现在,我已经为每个纹理添加了一个布尔值,以检查在释放纹理时是否绘制了该纹理

LPDIRECT3DTEXTURE9 Texture;

D3DXCreateTextureFromFileEx(d3ddev,
                        L"Texture.png",
                        D3DX_DEFAULT,
                        D3DX_DEFAULT,
                        D3DX_DEFAULT,
                        NULL,
                        D3DFMT_A8R8G8B8,
                        D3DPOOL_MANAGED,
                        D3DX_DEFAULT,
                        D3DX_DEFAULT,
                        NULL,
                        NULL,
                        NULL,
                        &Texture);

d3ddev->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 0, 0), 1.0f, 0);
d3ddev->BeginScene();
d3dspt->Begin(D3DXSPRITE_ALPHABLEND);

D3DXVECTOR3 TextureCentre(0.0f, 0.0f, 1.0f);
D3DXVECTOR3 TexturePos(0.0f, 0.0f, 1.0f);

d3dspt->Draw(Texture, NULL, &TextureCentre, &TexturePos, D3DCOLOR_ARGB(255, 25, 255, 255));

d3dspt->End();
d3ddev->EndScene();
d3ddev->Present(NULL, NULL, NULL, NULL);

Texture->Release();`
释放时

if(Texture)
{
    Texture->Release();
    Texture = NULL;
}

如果这不能解决问题。上传您的代码。

我不确定它是如何工作的。但它基本上应该作为参考计数。也许你可以在创建计数后检查它。如果你注释掉绘图函数行,程序就会崩溃。
if(Texture)
{
    Texture->Release();
    Texture = NULL;
}