/** Renders the scene with the given view-proj-matrices */ void D3D11PointLight::RenderCubemapFace(const D3DXMATRIX& view, const D3DXMATRIX& proj, UINT faceIdx) { D3D11GraphicsEngineBase* engineBase = (D3D11GraphicsEngineBase *)Engine::GraphicsEngine; D3D11GraphicsEngine* engine = (D3D11GraphicsEngine *) engineBase; // TODO: Remove and use newer system! CameraReplacement cr; cr.PositionReplacement = LightInfo->Vob->GetPositionWorld(); cr.ProjectionReplacement = proj; cr.ViewReplacement = view; // Replace gothics camera Engine::GAPI->SetCameraReplacementPtr(&cr); if(engine->GetDummyCubeRT()) engine->GetContext()->ClearRenderTargetView(engine->GetDummyCubeRT()->GetRTVCubemapFace(faceIdx), (float *)&float4(0,0,0,0)); // Disable shadows for NPCs // TODO: Only for the player himself, because his shadows look ugly when using a torch bool oldDrawSkel = Engine::GAPI->GetRendererState()->RendererSettings.DrawSkeletalMeshes; //Engine::GAPI->GetRendererState()->RendererSettings.DrawSkeletalMeshes = false; float range = LightInfo->Vob->GetLightRange() * 1.1f; // Draw cubemap face ID3D11RenderTargetView* debugRTV = engine->GetDummyCubeRT() != NULL ? engine->GetDummyCubeRT()->GetRTVCubemapFace(faceIdx) : NULL; engine->RenderShadowCube(cr.PositionReplacement, range, DepthCubemap, DepthCubemap->GetDSVCubemapFace(faceIdx), debugRTV, false); //Engine::GAPI->GetRendererState()->RendererSettings.DrawSkeletalMeshes = oldDrawSkel; // Reset settings Engine::GAPI->SetCameraReplacementPtr(NULL); }
/** Debug-draws the cubemap to the screen */ void D3D11PointLight::DebugDrawCubeMap() { if(!InitDone) return; D3D11GraphicsEngineBase* engineBase = (D3D11GraphicsEngineBase *)Engine::GraphicsEngine; D3D11GraphicsEngine* engine = (D3D11GraphicsEngine *) engineBase; // TODO: Remove and use newer system! const int previewSize = POINTLIGHT_SHADOWMAP_SIZE; const int previewDownscale = 4; for(int i=0;i<6;i++) { INT2 pPosition; int stride = (previewSize / previewDownscale); if(i==1) // x- { pPosition.x = 0; pPosition.y = stride; }else if(i==3) // y- { pPosition.x = stride; pPosition.y = stride; }else if(i==0) // x+ { pPosition.x = stride * 2; pPosition.y = stride; }else if(i==2) // y+ { pPosition.x = stride * 3; pPosition.y = stride; }else if(i==5) // z- { pPosition.x = stride; pPosition.y = 0; }else if(i==4) // z+ { pPosition.x = stride; pPosition.y = stride * 2; } INT2 pSize = INT2(previewSize / previewDownscale,previewSize / previewDownscale); ID3D11ShaderResourceView* srv = engine->GetDummyCubeRT()->GetSRVCubemapFace(i); engine->GetContext()->PSSetShaderResources(0,1, &srv); Engine::GraphicsEngine->DrawQuad(pPosition, pSize); } }