2016-09-15 5 views
0

Я пытаюсь использовать Direct X 11 в VS 2015 в VC++. Я использую: 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 11 и tutorials в частности. Нет причин писать собственный загрузчик, если вы можете просто DDSTextureLoader или WICTextureLoader.

 Смежные вопросы

  • Нет связанных вопросов^_^