当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《DirectX11-如何创建非常简单的2D纹理》经验,为你挑选了1个好方法。

我是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. 

非常感谢你。



1> Chuck Walbou..:

假设您将粉红色定义为RGB(255,174,201),这将创建1x1的粉红色纹理:

ComPtr 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 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!
}

Microsoft::WRL::ComPtr在此代码中为COM使用了推荐的C ++智能指针,而不是“原始”指针,后者很难确保正确的引用计数。有关更多信息,请参见此页面。

当然,通常这不是创建纹理的方式。通常,您使用图像文件,并且经常使用DDS具有mipmap链并使用专用纹理压缩格式的文件。

请参阅如何:从 MSDN上的文件初始化纹理。

使用C ++从DirectX 11开始的一个好地方是DirectX 11的DirectX工具套件及其教程。


请注意,创建单个像素纹理可以通过不区分带有纹理的着色器和不带有纹理的着色器来减少着色器的数量。
推荐阅读
k78283381
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有