我试图制作纹理处理程序,以便我可以从文本文件加载纹理文件名,然后加载纹理并将它们存储到矢量中,并在需要绘制时获取它们。
问题是,我得到的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);
}
谢谢:)
答案 0 :(得分:1)
由于ID3D11ShaderResourceView
是一个接口,因此必须使用指针来访问这些类型的对象。所以:
std::vector<ID3D11ShaderResourceView*> * textures;
是的,你确定要使用vector
指针吗?我认为没有理由认为普通的vector<...>
是不够的。
然后在加载纹理时,将指针放在向量中:
textures.push_back(temp);
不要删除刚刚创建的纹理。