
Чёрная кубическая текстура в DX9
Спросил RAXAT,
Пытаюсь отрендерить под DX9 сцену в кубическую текстуру, столкнулся с тем, что получаю в итоге абсолютно чёрную текстуру, т.е. буквально каждый пиксель ARGB 0x00000000.
Код: (С++)
Т.е. сначала создаётся болванка кубической текстуры pTexTemp, сохраняется текущий RenderTarget, затем начинается рендеринг в каждую из 6 граней куба, сопровождающийся созданием новой поверхности pSurf, которая содержит в себе результат рендеринга. Наконец, RenderTarget восстанавливается обратно и в отладку выводится сообщение о завершении.
Предположительно, DX получает неверный RenderTarget:
Уже неделю не могу понять, почему текстура чёрная. Какие могут быть варианты?
Код: (С++)
LPDIRECT3DCUBETEXTURE9 pTexTemp;
pD3DDevice->CreateCubeTexture(256, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &pTexTemp, NULL);
pD3DDevice->GetRenderTarget(0,&pBackBuffer);
for(int j=0;j<6;++j)
{
LPDIRECT3DSURFACE9 pSurf;
pTexTemp->GetCubeMapSurface((D3DCUBEMAP_FACES)j, 0, &pSurf);
pD3DDevice->SetRenderTarget(0, pSurf);
//the same thing as microsoft's SAFE_RELEASE macro does here
pSurf->Release();
pSurf = NULL;
pD3DDevice->BeginScene();
RenderMesh((Mesh*)meshes[0]);
RenderMesh((Mesh*)meshes[1]);
pD3DDevice->EndScene();
}
D3DXSaveTextureToFile("rendertarget.dds", D3DXIFF_DDS, pTexTemp, NULL);
pD3DDevice->SetRenderTarget(0, pBackBuffer); //setting render target back to screen
debug("render target saved");
Т.е. сначала создаётся болванка кубической текстуры pTexTemp, сохраняется текущий RenderTarget, затем начинается рендеринг в каждую из 6 граней куба, сопровождающийся созданием новой поверхности pSurf, которая содержит в себе результат рендеринга. Наконец, RenderTarget восстанавливается обратно и в отладку выводится сообщение о завершении.
Предположительно, DX получает неверный RenderTarget:
pTexTemp->GetCubeMapSurface((D3DCUBEMAP_FACES)j, 0, &pSurf);
pD3DDevice->SetRenderTarget(0, pSurf);
Уже неделю не могу понять, почему текстура чёрная. Какие могут быть варианты?
1 ответ
у мелкомягких это описывается макросом SAFE_RELEASE, затем поправил порядок рендеринга сеток, там небольшая ошибка была. Этот порядок подробно описан ТУТ, может кому тоже пригодится.