DirectX11 如何从 unsigned char * 数据创建 Texture2D
DirectX11 How to CreateTexture2D from unsigned char * data
我有一个函数 GetCamImage returns 来自相机的图像为:
unsigned char* p = GetCamImage(...);
我需要根据这些数据创建 ID3D11Texture2D。我如何在 DirectX 11 中执行此操作?
谢谢
这取决于p
中实际内容的格式,以及宽度、高度和步幅。假设图像是 RGBA 32 位格式,具有简单的字节间距对齐方式,大小为 w
by h
,那么它会很简单,例如:
D3D11_SUBRESOURCE_DATA initData = {0};
initData.pSysMem = (const void*)p;
initData.SysMemPitch = w * 4;
initData.SysMemSlicePitch = h * w * 4;
D3D11_TEXTURE2D_DESC desc;
desc.Width = w;
desc.Height = h;
desc.MipLevels = 1;
desc.ArraySize = 1;
desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
desc.SampleDesc.Count = 1;
desc.SampleDesc.Quality = 0;
desc.Usage = D3D11_USAGE_DEFAULT;
desc.BindFlags = D3D11_BIND_SHADER_RESOURCE;
desc.CPUAccessFlags = 0;
ID3D11Texture2D* tex = nullptr;
HRESULT hr = d3dDevice->CreateTexture2D( &desc, &initData, &tex );
if (FAILED(hr))
...
我有一个函数 GetCamImage returns 来自相机的图像为:
unsigned char* p = GetCamImage(...);
我需要根据这些数据创建 ID3D11Texture2D。我如何在 DirectX 11 中执行此操作?
谢谢
这取决于p
中实际内容的格式,以及宽度、高度和步幅。假设图像是 RGBA 32 位格式,具有简单的字节间距对齐方式,大小为 w
by h
,那么它会很简单,例如:
D3D11_SUBRESOURCE_DATA initData = {0};
initData.pSysMem = (const void*)p;
initData.SysMemPitch = w * 4;
initData.SysMemSlicePitch = h * w * 4;
D3D11_TEXTURE2D_DESC desc;
desc.Width = w;
desc.Height = h;
desc.MipLevels = 1;
desc.ArraySize = 1;
desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
desc.SampleDesc.Count = 1;
desc.SampleDesc.Quality = 0;
desc.Usage = D3D11_USAGE_DEFAULT;
desc.BindFlags = D3D11_BIND_SHADER_RESOURCE;
desc.CPUAccessFlags = 0;
ID3D11Texture2D* tex = nullptr;
HRESULT hr = d3dDevice->CreateTexture2D( &desc, &initData, &tex );
if (FAILED(hr))
...