I want to create a Texture loader. However, when I create the following line:
HRESULT res = CreateWICTextureFromFile(device, file.c_str(),&resource,&shaderResourceView,0);
it returns E_NOINTERFACE.
The file I want to load definitively exists and both the ID3D11Device and the ID3D11DeviceContext are created successfully.
Here is my class declaration:
using std::wstring;
using Microsoft::WRL::ComPtr;
using DirectX::CreateWICTextureFromFile;
class Texture2DHandle {
private:
ComPtr<ID3D11Texture2D> texture;
ComPtr<ID3D11ShaderResourceView> shaderResourceView;
public:
Texture2DHandle() = default;
Texture2DHandle(void* data, int w, int h, DXGI_FORMAT format, ID3D11Device* device);
Texture2DHandle(wstring file, ID3D11Device* device, ID3D11DeviceContext* context);
ID3D11Texture2D* tex() const;
ID3D11ShaderResourceView* srv() const;
};
And here is the definition of the constructor:
Texture2DHandle::Texture2DHandle(wstring file, ID3D11Device* device,ID3D11DeviceContext* context)
{
ComPtr<ID3D11Resource> resource;
HRESULT res = CreateWICTextureFromFile(device, file.c_str(),&resource,&shaderResourceView,0);
if (FAILED(res))
throw std::exception("Could not load texture from file!");
res = resource.As<ID3D11Texture2D>(&texture);
if (FAILED(res))
throw std::exception("Could not load texture from file!");
}
I dont have any clue what is meant with E_NOINTERFACE since both Device and DeviceContext exist
Make sure you have initialized COM as that's the most likely problem.
See WICTextureLoader for detailed docs.