2014-11-20 4 views
0

Я пытаюсь создать 1D текстуры в DirectX 11 Жека этот код:Создание 1D текстуры в DirectX 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 = 1 Когда и text1_desc.ArraySize = 1 все хорошо.

Когда text1_desc.MipLevels = 0 или text1_desc.MipLevels > 1 это вызывает Необработанное исключение в 0x000007FEE6D14CC0 (nvwgf2umx.dll): 0xC0000005: Нарушение прав доступа чтения местонахождения 0xFFFFFFFFFFFFFFFF.

Может ли кто-нибудь помочь мне решить эту проблему?

+0

Ryan Wheale, Большое спасибо за информацию, я благодарен. Вы мне очень помогли. Томас Папамишос. –

ответ

2

Mip-levels of '0' - проблема, так как она приводит к размеру распределения '0'. Вам нужно выяснить количество уровней mip, которые будут генерироваться для заданной ширины входного сигнала. Так что для 0, вам нужно что-то вроде:

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

Второе, что нужно отметить, что вы должны передать массив D3D11_SUBRESOURE_DATA экземпляров, а не только один, если вы создаете сложный ресурс. Существует один D3D11_SUBRESOURE_DATA на каждый подресурс, который должен быть длиной mipLevels * text1_desc.ArraySize. Вы только когда-либо выделяете 1, поэтому вы получаете ошибку выполнения.

Вы должны посмотреть на DirectXTex для кода, который работает со всеми видами текстур Direct3D 11.

+0

Чак Вэлборн, большое спасибо за информацию, я благодарен. Вы мне очень помогли. Томас Папамишос. –

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