2013-05-05 44 views
1

我有一個關於DirectX 9,紋理和釋放它們的問題。 我目前正在用C++構建2D遊戲。我用D3DXCreateTextureFromFileEx加載了很多紋理,然後從那個'場景'繼續使用Texture-> Release()釋放它們;這很好。帶紋理的DirectX釋放函數(C++)

我已經做了一個類,處理遊戲的項目列表。其中,我在創建類時爲每個項目加載紋理,並在遊戲退出時釋放每個紋理。但是,我一直在遇到問題。即使我已經加載了紋理,如果我沒有 - >繪製()它,程序在試圖釋放它時會崩潰。

任何人都可以解釋爲什麼這是請嗎? 我想我會需要某種條件檢查,看看紋理是否已繪製,然後再嘗試 - >釋放()它?

編輯:

這裏是什麼,我想描述一個更淡化的版本。這是有效的,但是如果你註釋掉了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();` 
+0

我不確定它是如何工作的。但它應該基本上作爲參考計數。也許你可以在創建它之後嘗試檢查計數。 – silvesthu 2013-05-05 14:30:47

回答

0
IDirect3DTexture9 *Texture; 

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

當釋放

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

如果這並不能解決問題。上傳你的代碼。

+0

已上傳示例。 – Moph 2013-05-17 02:49:07

+0

你得到的錯誤是什麼? – 2013-05-17 14:43:24

+0

如果註釋掉Draw函數行,程序將崩潰。 – Moph 2013-05-18 16:09:44