[英]DirectX 11 - How to create a very simple 2D texture
我是Direct X 11的新手。我想创建一个简单的2d纹理(ID3D11Texture2D类型)。 我已阅读有关CreateTexture2D的文档,我理解:
pDesc是我们定义图像的方式。
pInitialData包含呈现图像纹理的每个像素的字节数组
ppTexture2D是我们的结果--DirectX 11的2D纹理。
我想创建一个非常简单的2D纹理: 粉红色矩形 。 但我不知道如何为粉红色矩形创建字节数组。 我有以下代码:
D3D11_TEXTURE2D_DESC Desc;
D3D11_SUBRESOURCE_DATA InitialData;
ID3D11Texture2D* pTexture2D;
Desc.Usage = D3D11_USAGE_DEFAULT;
BYTE* array;//How to have an array of Pink rectangle?
InitialData.pSysMem = array;
InitialData.SysMemPitch = 0;
InitialData.SysMemSlicePitch = 0;
m_device->CreateTexture2D(&Desc, &InitialData, &pTexture2D);//ID3D11Device m_device has been created before.
非常感谢你。
假设您将粉红色定义为RGB(255,174,201),则会创建1x1粉红色纹理:
ComPtr<ID3D11ShaderResourceView> texSRV;
{
static const uint32_t s_pixel = 0xffc99aff;
D3D11_SUBRESOURCE_DATA initData = { &s_pixel, sizeof(uint32_t), 0 };
D3D11_TEXTURE2D_DESC desc = {};
desc.Width = desc.Height = desc.MipLevels = desc.ArraySize = 1;
desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
desc.SampleDesc.Count = 1;
desc.Usage = D3D11_USAGE_IMMUTABLE;
desc.BindFlags = D3D11_BIND_SHADER_RESOURCE;
ComPtr<ID3D11Texture2D> tex;
HRESULT hr = mDevice->CreateTexture2D( &desc, &initData, tex.GetAddressOf() );
if (SUCCEEDED(hr))
{
D3D11_SHADER_RESOURCE_VIEW_DESC SRVDesc = {};
SRVDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
SRVDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D;
SRVDesc.Texture2D.MipLevels = 1;
hr = mDevice->CreateShaderResourceView( tex.Get(),
&SRVDesc, texSRV.GetAddressOf() );
}
if (FAILED(hr))
// error!
}
我在这段代码中使用推荐的C ++智能指针用于COM
Microsoft::WRL::ComPtr
而不是“原始”指针,这些指针更难以确保正确的引用计数。 请参阅此页面了解更多信息
当然,这通常不是如何创建纹理的。 您通常使用图像文件,并且通常使用具有mipmap链并使用专门纹理压缩格式的DDS
文件。
使用C ++开始使用DirectX 11的好地方是适用于DirectX 11的DirectX工具包及其教程 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.