簡體   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