| 297 | |
| 298 | |
| 299 | bool EveSpaceSceneRenderDriver::Validate( const Span<const Tr2BitmapDimensions>& destDimensions, const Span<const BlueSharedString>& outputs, Be::Time realTime, Be::Time simTime ) |
| 300 | { |
| 301 | if( destDimensions.size == 0 ) |
| 302 | { |
| 303 | CCP_ASSERT_M( false, "EveSpaceSceneRenderDriver requires at least one destination texture" ); |
| 304 | return false; |
| 305 | } |
| 306 | if( !m_enableRendering ) |
| 307 | { |
| 308 | return true; |
| 309 | } |
| 310 | if( !m_scene ) |
| 311 | { |
| 312 | CCP_LOG( "EveSpaceSceneRenderDriver::Validate failed because the render driver does not have a valid scene" ); |
| 313 | return false; |
| 314 | } |
| 315 | bool hasCamera = m_camera || ( m_view && m_projection ); |
| 316 | if( !hasCamera ) |
| 317 | { |
| 318 | CCP_LOG( "EveSpaceSceneRenderDriver::Validate failed because the render driver does not have a valid camera" ); |
| 319 | return false; |
| 320 | } |
| 321 | const TextureSize2D displaySize = destDimensions[0]; |
| 322 | |
| 323 | SetupUpscaling( displaySize ); |
| 324 | const auto renderSize = GetRenderSize( displaySize ); |
| 325 | |
| 326 | if( m_background ) |
| 327 | { |
| 328 | auto bgDimensions = Tr2BitmapDimensions( renderSize.width, renderSize.height, 1, m_internalPixelFormat ); |
| 329 | if( !m_background->Validate( { &bgDimensions, 1 }, {}, realTime, simTime ) ) |
| 330 | { |
| 331 | return false; |
| 332 | } |
| 333 | } |
| 334 | if( m_sceneOverlay ) |
| 335 | { |
| 336 | Tr2BitmapDimensions overlayDimensions[] = { |
| 337 | Tr2BitmapDimensions( renderSize.width, renderSize.height, 1, m_internalPixelFormat ), |
| 338 | Tr2BitmapDimensions( renderSize.width, renderSize.height, 1, ImageIO::PIXEL_FORMAT_R16G16_FLOAT ) |
| 339 | }; |
| 340 | if( !m_sceneOverlay->Validate( { overlayDimensions, 2 }, {}, realTime, simTime ) ) |
| 341 | { |
| 342 | return false; |
| 343 | } |
| 344 | } |
| 345 | |
| 346 | for( auto& output : outputs ) |
| 347 | { |
| 348 | if( strcmp( output.c_str(), "DepthMap" ) != 0 && |
| 349 | strcmp( output.c_str(), "VelocityMap" ) != 0 && |
| 350 | strcmp( output.c_str(), "NormalMap" ) != 0 && |
| 351 | strcmp( output.c_str(), "CustomStencilMap" ) != 0 ) |
| 352 | { |
| 353 | CCP_LOGERR( "EveSpaceSceneRenderDriver does not support the output '%s'", output.c_str() ); |
| 354 | return false; |
| 355 | } |
| 356 | } |