我想製作一個紋理處理程序,以便我可以從文本文件加載紋理文件名,然後加載紋理並將它們存儲到一個矢量中,並在每當我需要畫畫。C2259:'ID3D11ShaderResourceView'無法實例化抽象類-DX11
問題是,我收到了C2259錯誤,它在編譯之前就會中斷,並且想知道是否有人可以幫我解決問題。
TextureManager.h
class TextureManager{
private:
std::vector<ID3D11ShaderResourceView> * textures;
public:
TextureManager();
~TextureManager();
void TMLoadTexture(ID3D11Device* d);
ID3D11ShaderResourceView * TMgetTexture(int index);
};
TextureManager.cpp - TMLoadTexture/TMGetTexture
void TextureManager::TMLoadTexture(ID3D11Device* d)
{
std::vector<std::string> files;
files = readFile("textures");
D3DX11_IMAGE_LOAD_INFO loadInfo;
ZeroMemory(&loadInfo, sizeof(D3DX11_IMAGE_LOAD_INFO));
loadInfo.BindFlags = D3D11_BIND_SHADER_RESOURCE;
loadInfo.Format = DXGI_FORMAT_BC1_UNORM;
for(int i = 0; i < files.size(); i++)
{
std::wstring stemp = std::wstring(files.at(i).begin(), files.at(i).end());
LPCWSTR sw = stemp.c_str();
ID3D11ShaderResourceView* temp;
D3DX11CreateShaderResourceViewFromFile(d, sw, &loadInfo, NULL, &temp, NULL);
textures->push_back(*temp);
delete temp;
}
}
ID3D11ShaderResourceView * TextureManager::TMgetTexture(int index)
{
return &textures->at(index);
}
謝謝:)
如果您使用向量作爲對象成員,但不知道COM指針如何工作,則需要了解所有這些指針。我有一種感覺,你會泄漏大量的記憶。這個指針需要在'〜destruct'或'&reused'時釋放。在這種情況下加指針屬性是沒有意義的,因此您需要了解如何創建,銷燬C++對象以及指針如何工作。否則...它不會很漂亮。因此,使用COM包裝器來安全地使用COM指針。 – CodeAngry