1

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

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

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

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

编辑:

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

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();`
4

1 回答 1

0
IDirect3DTexture9 *Texture;

Texture = //Load Texture. Hope u did it.

释放时

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

如果这不能解决它。上传你的代码。

于 2013-05-15T13:05:42.523 回答