У меня проблема с тем, кто утверждает, что мой код создания текстуры карты теней не работает на их видеокарте Nvidia. Я много часов прочесываю интернет и не нахожу определенного решения.
Конкретной картой, на которой это происходит, является «NVidia GTX 1050 ti 4GB»
Вот мой код для создания начальной карты теней (ошибка в самой первой функции):
if( FAILED( hr = g_pd3dDevice->CreateTexture( VGlobal::SHADOW_MAP_SIZE, VGlobal::SHADOW_MAP_SIZE, 1, D3DUSAGE_RENDERTARGET,
D3DFMT_R32F, D3DPOOL_DEFAULT, &g_pShadowMap[lpShadow], NULL ) ) )
....
// Create the screen-sized buffer map
if( FAILED( g_pd3dDevice->CreateTexture( d3dpp.BackBufferWidth / 2, d3dpp.BackBufferHeight / 2, 1, D3DUSAGE_RENDERTARGET,
D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &g_pScreenMap, NULL ) ) )
....
// Create the shadow depth surface
if( FAILED( g_pd3dDevice->CreateDepthStencilSurface( VGlobal::SHADOW_MAP_SIZE, VGlobal::SHADOW_MAP_SIZE, D3DFMT_D24S8,
D3DMULTISAMPLE_NONE, 0, TRUE, &g_pShadowDepth, NULL ) ) )
{
MessageBox( hWnd, "Unable to create shadow depth surface!", ERROR, MB_OK | MB_ICONERROR );
return E_FAIL;
}
// Create the general depth surface
if( FAILED( g_pd3dDevice->CreateDepthStencilSurface( d3dpp.BackBufferWidth / 2, d3dpp.BackBufferHeight / 2, D3DFMT_D24S8,
D3DMULTISAMPLE_NONE, 0, TRUE, &g_pNewDepthRT, NULL ) ) )
{
MessageBox( hWnd, "Unable to create general depth surface!", ERROR, MB_OK | MB_ICONERROR );
return E_FAIL;
}
Я нашел эту ветку, объясняющую, что Nvidia может использовать D3DUSAGE_DEPTHSTENCIL, но D3DUSAGE_RENDERTARGET с D3DFMT_R32F должны приниматься всеми картами. https://www.gamedev.net/forums/topic/649614-shadow-mapping-d3dusage-depthstencil-or-d3dusage-rendertarget/
Я не менял свой код рендеринга теней много лет. Я изучал документы по программированию на Nvidia и не нашел однозначного ответа.
Единственный вариант, о котором я могу подумать, это то, что мне нужно проверить, работает ли создание D3DUSAGE_DEPTHSTENCIL, если D3DUSAGE_RENDERTARGET завершится неудачно?
Я полагаю, что Nvidia недавно что-то изменила, и я не уверен, что это за изменения. К сожалению, у меня нет видеокарты Nvidia для тестирования.
Спасибо за любую помощь!