gpt4 book ai didi

c++ - 带纹理的 DirectX Release 函数 (C++)

转载 作者:太空宇宙 更新时间:2023-11-04 14:07:15 28 4
gpt4 key购买 nike

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

我制作了一个处理游戏元素列表的类。在其中,我在创建类时为每个项目加载纹理,并在游戏退出时释放每个纹理。但是,我一直遇到问题。

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

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

编辑:

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

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

最佳答案

IDirect3DTexture9 *Texture;

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

释放时

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

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

关于c++ - 带纹理的 DirectX Release 函数 (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16385232/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com