0

我正在尝试在 VC++ 中使用 VS 2015 中的 Direct X 11 模板。我正在使用: D3D11_MAPPED_SUBRESOURCE资源和 MAP 和 UNMAP 来更新纹理。现在我的项目中有一个单独的文件,我正在读取像素并需要将其上传到此纹理。

我正在使用一个结构来保存纹理数据:

struct Frames{
int text_Width;
int text_height;
unsigned int text_Sz;
unsigned char* text_Data; };

想知道如何使用来自单独文件的这个结构将纹理数据上传到基于 Direct X 的 Spinning Cube 文件中。

4

1 回答 1

0

你没有提到数据是什么格式,这对于知道如何做到这一点至关重要,但让我们假设你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 工具包,尤其是教程。当你可以DDSTextureLoaderWICTextureLoader.

于 2016-09-17T06:09:40.450 回答