| 3009 | |
| 3010 | |
| 3011 | void EveSpaceScene::PopulatePerFrameVSData( PerFrameVSData& data, Tr2RenderContext& renderContext ) |
| 3012 | { |
| 3013 | // column_major for shaders |
| 3014 | data.ViewMat = Transpose( Tr2Renderer::GetViewTransform() ); |
| 3015 | Matrix proj = Tr2Renderer::GetReversedDepthProjectionTransform(); |
| 3016 | data.ProjectionMat = Transpose( proj ); |
| 3017 | Matrix viewProject( Tr2Renderer::GetViewTransform() * proj ); |
| 3018 | data.ViewProjectionMat = Transpose( viewProject ); |
| 3019 | // attention: need the transposed, but shader also needs column_major, so it is transpose(transpose(m)) == m |
| 3020 | data.ViewInverseTransposeMat = Tr2Renderer::GetInverseViewTransform(); |
| 3021 | |
| 3022 | Matrix lastProjection = m_projectionLast * m_jitterMatrix; |
| 3023 | data.ViewProjectionLast = Transpose( m_viewLast * lastProjection ); |
| 3024 | data.ViewLast = Transpose( m_viewLast ); |
| 3025 | data.ProjLast = Transpose( lastProjection ); |
| 3026 | |
| 3027 | // each scene has a nebula and that can be rotated and inverted (via scaling) |
| 3028 | data.EnvMapRotationMat = Transpose( RotationMatrix( m_envMapRotation ) ); |
| 3029 | |
| 3030 | // sun data |
| 3031 | data.Sun = m_sunData; |
| 3032 | data.Sun.DiffuseColor = m_currentSunColor; |
| 3033 | |
| 3034 | // make sure whatever direction we get in here, it is normalized! And inverted: Shaders work with direction to light... |
| 3035 | data.Sun.DirWorld = -Normalize( data.Sun.DirWorld ); |
| 3036 | |
| 3037 | // resolution of rendertarget |
| 3038 | data.TargetResolution.x = (float)renderContext.m_esm.GetRenderTargetWidth(); |
| 3039 | data.TargetResolution.y = (float)renderContext.m_esm.GetRenderTargetHeight(); |
| 3040 | |
| 3041 | // fov in both ways: width (x) and (height (y) |
| 3042 | data.FovXY.y = EveCamera::CalculateFovFromProjection( Tr2Renderer::GetProjectionTransform() ); |
| 3043 | data.FovXY.x = data.FovXY.y * Tr2Renderer::GetAspectRatio(); |
| 3044 | |
| 3045 | float distance = m_fogEnd - m_fogStart; |
| 3046 | if( fabsf( distance ) < 1e-5f ) |
| 3047 | { |
| 3048 | distance = 1e-5f; |
| 3049 | } |
| 3050 | data.FogFactors = Vector3( m_fogEnd / distance, 1.f / distance, m_fogMax ); |
| 3051 | |
| 3052 | // Derived from SetupViewport in Tr2Renderer.cpp |
| 3053 | const Tr2Viewport& deviceViewport = renderContext.m_esm.GetDeviceViewport(); |
| 3054 | const TriViewport& viewport = renderContext.m_esm.GetViewport(); |
| 3055 | data.ViewportAdjustment.x = viewport.x < 0 ? -1.0f : 1.0f; |
| 3056 | data.ViewportAdjustment.y = viewport.y + viewport.height > (int)renderContext.m_esm.GetRenderTargetHeight() ? -1.0f : 1.0f; |
| 3057 | data.ViewportAdjustment.z = deviceViewport.m_width / viewport.width; |
| 3058 | data.ViewportAdjustment.w = deviceViewport.m_height / viewport.height; |
| 3059 | data.Time = Tr2Renderer::GetAnimationTime(); |
| 3060 | data.Upscaling = m_upscalingAmount; |
| 3061 | |
| 3062 | data.ViewportSize.x = renderContext.m_esm.GetDeviceViewport().m_width; |
| 3063 | data.ViewportSize.y = renderContext.m_esm.GetDeviceViewport().m_height; |
| 3064 | } |
| 3065 | |
| 3066 | void EveSpaceScene::PopulatePerFramePSData( PerFramePSData& data, Tr2RenderContext& renderContext ) |
| 3067 | { |
nothing calls this directly
no test coverage detected