Вы не указали, какой формат данных необходим, что важно для того, чтобы знать, как это сделать, но давайте предположим, что ваш text_Data
указывает на массив данных R8G8B8A8 (т. Е. Каждый пиксель составляет 32 бита с 8 бит красного, зеленого, синего и альфа в этом порядке от 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 в How to use Direct3D 11 темы, хотя стиль пример кода есть немного устарели.
Посмотрите на DirectX Tool Kit for DirectX 11 и tutorials в частности. Нет причин писать собственный загрузчик, если вы можете просто DDSTextureLoader
или WICTextureLoader
.