2016-09-15 7 views
0

VC 20에서 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; }; 

내가 내 직접 X를 기반으로 회전 큐브 파일의 텍스처 데이터를 업로드하는 별도의 파일에서이 구조체를 사용하는 방법을 알고 싶어요.

답변

0

당신은 데이터가이 작업을 수행하는 방법을 알고 필수적이다, 어떤 형식 언급하지만, 이제 (R8G8B8A8 데이터의 배열에 text_Data 점을 가정하지 않는 즉, 각 픽셀은 8 비트 각각 32 비트 빨강, 초록, 파랑, 알파 순으로 LSB부터 MSB까지). 샘플 코드 스타일이 조금 일자가 있지만, 이것은 How to use Direct3D 11 주제에 MSDN에 덮여

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)) 
    ... 

참고 :이 경우는 같을 것이다.

특히 DirectX Tool Kit for DirectX 11tutorials을 살펴보십시오. 단지 DDSTextureLoader 또는 WICTextureLoader 일 수있을 때 독자적인 로더를 쓸 이유가 없습니다.