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