DirectX 9 Shadow Map не работает на новой карте Nvidia - PullRequest
0 голосов
/ 05 сентября 2018

У меня проблема с тем, кто утверждает, что мой код создания текстуры карты теней не работает на их видеокарте 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 для тестирования.

Спасибо за любую помощь!

...