我是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中的例子并没有真正帮助我。
谢谢!
答案 0 :(得分:2)
我怀疑问题是CreateWICTextureFromMemory
创建了ID3D11Resource
,而d3dtex
是ID3D11Texture2D
。 COM类和接口层次结构不能像C ++类的实例一样简单地互换。
在此处查看此问题的答案,了解如何使用QueryInterface
或GetResource
在ID3D11Resource
和ID3D11Texture2D
之间进行转换。