2014-11-20 8 views
0

에서 1D 텍스처를 만들어이 코드 WIH 다이렉트 X 11의 1D 텍스처를 만들려고 :다이렉트 X 11

파라미터 : ID3D11Device * pDevice

D3D11_TEXTURE1D_DESC text1_desc; 

::ZeroMemory(&text1_desc, sizeof(D3D11_TEXTURE1D_DESC)); 

text1_desc.Width = 258 

text1_desc.MipLevels = 2; 

text1_desc.ArraySize = 2; 

text1_desc.Usage = D3D11_USAGE_IMMUTABLE; 

text1_desc.BindFlags = D3D11_BIND_SHADER_RESOURCE; 

text1_desc.Format = R8G8B8A8_UNORM; 

FLOAT* pData = new FLOAT[text1_desc.MipLevels * text1_desc.ArraySize * text1_desc.Width]; 

D3D11_SUBRESOURCE_DATA sr_data; 

::ZeroMemory(&sr_data, sizeof(D3D11_SUBRESOURCE_DATA)); 

sr_data.pSysMem = pData; 

ID3D11Texture1D* pTexture1D = nullptr; 

auto hr = pDevice->CreateTexture1D(&text1_desc, &sr_data, &pTexture1D); 

text1_desc.MipLevels = 1text1_desc.ArraySize = 1 모든 것이 좋다. 가 0xc0000005 : 액세스 위반 읽기 위치 내지 0xFFFFFFFFFFFFFFFF

text1_desc.MipLevels = 0 또는 text1_desc.MipLevels > 1 그것은 0x000007FEE6D14CC0 (nvwgf2umx.dll)에서 처리되지 않은 예외를 발생시킵니다.

누구든지이 문제를 해결할 수 있습니까?

+0

Ryan Wheale, 감사합니다. 정말 고맙습니다. 감사드립니다. 너 나 많이 도와 줬어. 토마스 파파 미 호스. –

답변

2

'0'의 밉 레벨은 할당 크기가 '0'이되기 때문에 문제가됩니다. 주어진 입력 너비에 대해 생성 될 밉 레벨의 수를 알아 내야합니다.

size_t mipLevels = 1; 
size_t width = 258; 
while (width > 1) 
{ 
    if (width > 1) 
     width >>= 1; 
    ++mipLevels; 
} 

주목해야 할 두 번째 것은 당신이 복잡한 리소스를 만드는 경우, D3D11_SUBRESOURE_DATA 인스턴스의 배열이 아니라 하나를 통과해야한다는 것입니다 : 0 그래서, 당신은 뭔가를해야합니다. 하위 리소스 당 하나의 D3D11_SUBRESOURE_DATA이 있으며 길이는 mipLevels * text1_desc.ArraySize이어야합니다. 1을 할당하면 런타임 오류가 발생합니다.

모든 종류의 Direct3D 11 텍스처에서 작동하는 코드는 DirectXTex입니다.

+0

척 왈본 (Chuck Walbourn), 감사합니다. 정말 감사드립니다. 너 나 많이 도와 줬어. 토마스 파파 미 호스. –

관련 문제