【问题标题】:DirectX Release function with Textures (C++)带纹理的 DirectX 发布功能 (C++)
【发布时间】:2013-05-16 14:03:51
【问题描述】:

我有一个关于 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();`

【问题讨论】:

  • 我不确定它是如何工作的。但它应该基本上是作为引用计数。也许您可以在创建后尝试检查计数。

标签: c++ memory-management textures directx-9


【解决方案1】:
IDirect3DTexture9 *Texture;

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

发布时

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

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

【讨论】:

  • 如果注释掉Draw函数行,程序会崩溃。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
相关资源
最近更新 更多