繁体   English   中英

C2259:“ ID3D11ShaderResourceView”无法实例化抽象类-DX11

[英]C2259 : 'ID3D11ShaderResourceView' Cannot instantiate abstract class - 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);
}

谢谢 :)

由于ID3D11ShaderResourceView是接口,因此必须使用指针来访问此类对象。 所以:

std::vector<ID3D11ShaderResourceView*> * textures;

顺便说一句,您确定要使用vector指针吗? 我看不出为什么普通vector<...>是不够的。

然后在加载纹理时,将指针放在向量中:

textures.push_back(temp);

并且不要删除您刚创建的纹理。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM