2016-09-15 100 views
0

我正在嘗試使用VC++中的VS 2015中的Direct X 11模板。我正在使用: D3D11_MAPPED_SUBRESOURCE資源和MAP和UNMAP更新紋理。 現在我在我的項目中有一個單獨的文件,我正在讀取像素並需要將其上傳到此紋理。使用DirectX進行幀緩衝區紋理數據更新

我使用一個結構來保存紋理數據:

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

想知道我怎麼可以使用這個結構由一個單獨的文件上傳的紋理數據在我的Direct X基於旋轉的立方體文件。

回答

0

你沒有提及數據是什麼格式,這對了解如何做到這一點很重要,但我們假設你的text_Data指向一組R8G8B8A8數據(即每個像素是32位,每個8位)紅色,綠色,藍色和阿爾法從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中How to use Direct3D 11主題,雖然樣本代碼風格有一點點過時。

請特別看看DirectX Tool Kit for DirectX 11tutorials。沒有理由編寫自己的加載程序,只需要DDSTextureLoaderWICTextureLoader