在DirectX中加载WIC后创建纹理

时间:2017-05-22 09:52:46

标签: c++ directx textures

我是DirectX的新手,并且无法理解一些纹理加载。我基本上想要使用D3D从JPG文件加载纹理。由于final class DBConnection { // constructor etc. public function query(string $query) { // $result = result of the passed executed string $query return new Statement($result); } } createTextureFromFile已被弃用,我尝试了WIC Loader,但无法弄清楚如何使用它。

早些时候,这是我的代码的一部分:

createTextureFromMemory

现在,来到WIC加载,我关注了this帖子。我现在有:

        ID3D11DeviceContext* ctx = NULL;
        g_D3D11Device->GetImmediateContext(&ctx);

        // update native texture from code
        if (unity_TexturePointer)
        {
            ID3D11Texture2D* d3dtex = (ID3D11Texture2D*)unity_TexturePointer;
            D3D11_TEXTURE2D_DESC desc;
            d3dtex->GetDesc(&desc);

            // filled data is an unsigned char* and has the data

            ctx->UpdateSubresource(d3dtex, 0, NULL, filledData, (width * 4), 0);
            delete[] filledData;
        }
        ctx->Release();

我现在完全糊涂了。我不知何故想要加载的纹理到达我的 ID3D11DeviceContext* ctx = NULL; g_D3D11Device->GetImmediateContext(&ctx); // update native texture from code if (unity_TexturePointer) { ID3D11Texture2D* d3dtex = (ID3D11Texture2D*)unity_TexturePointer; D3D11_TEXTURE2D_DESC desc; d3dtex->GetDesc(&desc); ComPtr<ID3D11ShaderResourceView> srv; std::basic_ifstream<unsigned char> file("bridge.jpg", std::ios::binary); if (file.is_open()) { file.seekg(0, std::ios::end); int length = file.tellg(); file.seekg(0, std::ios::beg); unsigned char* buffer = new unsigned char[length]; file.read(&buffer[0], length); file.close(); HRESULT hr; hr = CreateWICTextureFromMemory(g_D3D11Device, ctx, &buffer[0], (size_t)length, nullptr, &srv, NULL); // What goes here?? } } ctx->Release(); Texture2D指针。

我指的是header file,我发现我们也可以传递纹理指针,但这对我来说似乎不起作用。

d3dtex

它抛出错误,没有重载函数的实例。我想这样做直接我的纹理指针会更新,因为我不太确定如何使用hr = CreateWICTextureFromMemory(g_D3D11Device, ctx, &buffer[0], (size_t)length, &d3dtex, nullptr, NULL);

ShaderResourceView方法的类似问题。

基本上,我知道我正在做一些根本错误的事情,并且会感谢任何帮助或相同的例子,因为Microsoft documentation中的例子并没有真正帮助我。

谢谢!

1 个答案:

答案 0 :(得分:2)

我怀疑问题是CreateWICTextureFromMemory创建了ID3D11Resource,而d3dtexID3D11Texture2D。 COM类和接口层次结构不能像C ++类的实例一样简单地互换。

在此处查看此问题的答案,了解如何使用QueryInterfaceGetResourceID3D11ResourceID3D11Texture2D之间进行转换。

Down Casting ID3D11Texture2D