繁体   English   中英

DirectX 11 - 如何创建一个非常简单的2D纹理

[英]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文件。

请参见如何:在MSDN上从文件初始化纹理

使用C ++开始使用DirectX 11的好地方是适用于DirectX 11的DirectX工具包及其教程

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM