你没有提到数据是什么格式,这对于知道如何做到这一点至关重要,但让我们假设你text_Data
指向一个 R8G8B8A8 数据数组(即每个像素是 32 位,每个像素是 8 位红色,绿色,蓝色和 Alpha,从 LSB 到 MSB 的顺序)。如果是这样,它看起来像:
Frames f = ...; // your structure
D3D11_TEXTURE2D_DESC desc = {};
desc.Width = UINT(f.text_Width);
desc.Height = UINT(f.text_height);
desc.MipLevels = desc.ArraySize = 1;
desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
desc.SampleDesc.Count = 1;
desc.Usage = D3D11_USAGE_DEFAULT;
desc.BindFlags = D3D11_BIND_SHADER_RESOURCE;
desc.CPUAccessFlags = 0;
desc.MiscFlags = 0;
D3D11_SUBRESOURCE_DATA initData = {};
initData.pSysMem = f.text_Data;
initData.SysMemPitch = UINT( 4 * f.text_width );
initData.SysMemSlicePitch = UINT( text_Sz );
Microsoft::WRL::ComPtr<ID3D11Texture2D> pTexture;
HRESULT hr = d3dDevice->CreateTexture2D( &desc, &initData, &pTexture );
if (FAILED(hr))
...
请注意,这在 MSDN如何使用 Direct3D 11主题中有所介绍,尽管其中的示例代码样式有些过时。
看看DirectX 11 的 DirectX 工具包,尤其是教程。当你可以DDSTextureLoader
或WICTextureLoader
.