Repository navigation
Dynamicexposure and reflection probe improvements - #137
Merged
CCPNobody merged 29 commits intoNov 10, 2026
Merged
Conversation
Move jitter, reprojection, mip LOD bias, and upscaling setup out of `EveSpaceScene` and into the render driver so render state is prepared explicitly per view. This also splits execution into old/new render routes, adds shared feature-gated buffer allocation helpers, and exposes a post-process jitter helper for TAA. The change also wires in reflection quality/probe settings and keeps cached upscaling info in sync when contexts are created or destroyed.
Unify space scene view rendering and drive reflection faces through it Collapse RenderOld/RenderNew into a single RenderView that renders one view (the main view or a reflection probe face) and returns its targets. Execute now does the per-frame work (settings, light manager, render target push/pop, post process, 3D UI, tools, FPS) once. m_newRoute only chooses who renders the reflection faces: the driver through RenderView, or the scene's RenderReflectionPass from within the main view. Replace the main-view checks in the scene and the driver with explicit SceneRender::ViewInfo flags (sceneObjects, temporal, reflection, subsurfaceScattering, gpuParticles, lensflares), built by ViewInfo::MainView and ViewInfo::ReflectionFace. RenderInfo now carries the ViewInfo, so distortion is stored in one place instead of two, and a FeatureSet::background and overlay flags gate the background and overlay render nodes. GatherBatches is split into GatherSceneObjectRenderables and GatherReflectionRenderables, and reflection shadows and reflection fog move into RenderReflectionShadows and RegisterReflectionFog. Share the reflection rules between the old and new paths: the reflection-in-reflection intensity damping, the reflection shadow setup, and the probe's finishing step (Tr2ReflectionProbe::FinishFaces, now also used by EndRenderPass, replacing the Filter overload and AdvanceFrame). The volumetrics reflection flag is set per view in BeginView instead of being set and reset in separate places. The main view now also honours the caller's named outputs on the new route.
Split EveSpaceScene::Update into UpdateFrame (animation, object updates and post process attributes, once per frame) and UpdateView (frustum and detail thresholds from the current camera). Execute now does the frame's work explicitly, in order: bind the main view's color target, update the scene from the main camera (UpdateSceneFrame, which also updates the GPU particles), BeginFrame, the reflection faces, then the main view. BeginFrame no longer guards itself with a frame counter.
from GetFrustum in Tr2ReflectionProbe
and the ability to show light shadows in the reflection probe
Reflection probe faces get their own dynamic lights. Each face is lit by the lights tagged for the current reflection quality, and face fog uses the face's own volumetric lights. Light manager: - One light store per view (Tr2LightManager::View): the main view plus one per face rendered in a frame (1 or 6, by the probe's render frequency). Face views are only recreated when that count changes. - AddLight tests each light against every view and keeps a separate copy per view (fade, flags). Face views take only lights tagged for the current reflection quality and never cast shadows. - Resolve, list building and the getters work on the active view. SetActiveView binds that view's buffers; SetViewFrustum sets a frustum without activating the view. - Face views: 16 volumetric lights, no shadow casters, 1M-entry index buffer. Lights: - Tr2LightTags on LightData. The reflectionMode attribute is exposed on point, spot, textured point and faction lights. ReflectionQuality gains OFF and ULTRA. Removed the unused reflectionShadowCaster attribute and the duplicate castsShadows registrations. Scene and driver: - SceneRender::View and Features replace the driver's RenderInfo/FeatureSet and the scene's ViewInfo parameters. The view's frustum is computed when the view is built, not taken from the bound viewport. - Lights are gathered once per frame, by the driver, for the main view and the faces, instead of once per view in BeginView. - The driver sets the reflection quality on the light manager, prepares the reflection faces before the gather and activates each view's lights in RenderView. - The probe's first pass only draws the background into the faces. Tr2ReflectionProbe gets GetRenderFrequency() and IsFirstPass().
So now the reflections always get Iights
Removing reflection rendering code from the EveSpaceScene. In turn there were unneeded functions in Tr2ReflectionProbe removed as well
- Faces render into the cube's slices; the six face targets and the copy are gone. The cube is unbound before filtering (DX12 fix). - The probe's first pass renders all faces as normal faces; removed Features::ReflectionBackground. - Tr2LightManager::SetViews replaces the per-view count and frustum calls; a view's index is its position in the list.
Fixing lensflares in the reflections. They rendered into opposite faces (f.ex -y and +y) and would dissappear if the main view looks away from the lensflare
Renaming EndRenderto EndView
Fixing the way we time frame, mainview and reflection views. So it now shows up correctly
fixing a compiler error...
fixing calls to EveInstancedMeshManager::CollectMeshes for every view
forgot to move the CollectMeshes (last commit only deleted it). lupdatePostProcessAttrributes is now only called once
There was a problem hiding this comment.
🟡 Changes recommended
Unresolved rendering regressions can leave camera and post-process state incorrect, make camera-attached objects lag, and let reflection passes overwrite the main view’s occlusion history.
6 open issues
Refresh post-process settings on same-frame updates · New Preserve camera initialization for direct update entry points · New Update camera-attached transforms before gathering renderables · New Restore view camera after background node rendering · New Gate occlusion queries to temporal main views · New Avoid normal maps for raytraced shadows in reflections · New
What changed in this PR
Unifies main-view and reflection-probe rendering in the space-scene driver, separating per-frame updates from per-view rendering.
Changes:
- Renders reflection faces directly into the probe cubemap through the shared render path.
- Adds per-view light lists, reflection-quality filters, and lens-flare visibility updates.
- Introduces explicit view settings, extracts projection jitter generation, and reorganizes profiling timers.
| File | Description |
|---|---|
| trinity/Tr2ReflectionProbe.h | Exposes face cameras, cube target, and filtering API. |
| trinity/Tr2ReflectionProbe.cpp | Removes intermediate face targets and adapts filtering. |
| trinity/Tr2LightManager.h | Defines reflection quality and per-view light storage. |
| trinity/Tr2LightManager.cpp | Gathers, filters, and uploads lights per view. |
| trinity/PostProcess/Tr2PostProcessRenderer.h | Declares reusable projection jitter helper. |
| trinity/PostProcess/Tr2PostProcessRenderer.cpp | Implements projection jitter generation. |
| trinity/Lights/Tr2TexturedPointLight_Blue.cpp | Exposes textured-light reflection filtering. |
| trinity/Lights/Tr2SpotLight_Blue.cpp | Exposes spotlight reflection filtering. |
| trinity/Lights/Tr2PointLight_Blue.cpp | Exposes point-light reflection filtering. |
| trinity/Lights/Tr2Light.h | Adds light reflection tags and chooser declaration. |
| trinity/Lights/Tr2Light.cpp | Passes reflection tags to the light manager. |
| trinity/Lights/Tr2Light_Blue.cpp | Registers reflection-quality filter options. |
| trinity/Lights/Tr2FactionLight_Blue.cpp | Exposes faction-light reflection filtering. |
| trinity/Eve/EveSpaceSceneRenderDriver.h | Defines shared rendering structures and per-view timers. |
| trinity/Eve/EveSpaceSceneRenderDriver.cpp | Coordinates frame setup and shared view rendering. |
| trinity/Eve/EveSpaceScene.h | Declares frame/view lifecycle and camera APIs. |
| trinity/Eve/EveSpaceScene.cpp | Separates frame updates from view-specific scene work. |
| trinity/Eve/EveSceneView.h | Defines camera and scene-view settings. |
| trinity/Eve/EveSceneView.cpp | Builds frustums and main/reflection view defaults. |
| trinity/CMakeLists.txt | Adds the new scene-view source files. |
Review effort: Balanced
Making render attachments only early out if the texture and slice are the same as the bound attachment. Also removed the use of depthPlane from ResolveMsaa and replaced it with slice
…ttps://github.com/carbonengine/trinity into dynamicexposure-and-reflection-probe-improvements
…ttps://github.com/carbonengine/trinity into dynamicexposure-and-reflection-probe-improvements
ccpisheden
reviewed
Nov 3, 2026
Remove SetActiveView and the light manager's active-view state. UpdateLists and RenderRaytracedShadows now take a Tr2LightManager::View, and the view's lights are read from the View itself. SetViews returns the views in frustum order, and BindViewBuffers only points LightBuffer/LightIndexBuffer at a view's buffers. The driver stores each view's light view in EveSceneView::ViewInfo, and the scene passes it on to the shadow code and Tr2VolumetricsRenderer. A null light view means the view has no dynamic lights, which replaces the driver's Features::dynamicLights flag. Also remove the unused TR2RENDERREASON_VOLUMETRIC render reason.
formatting
ccpisheden
previously approved these changes
Nov 9, 2026
There was a problem hiding this comment.
Cpp-linter Review
Used clang-format v21.1.8
Only 10 out of 52 clang-format concerns fit within this pull request's diff.
Click here for the full clang-format patch
diff --git a/trinity/Eve/EveSpaceScene.h b/trinity/Eve/EveSpaceScene.h
--- a/trinity/Eve/EveSpaceScene.h
+++ b/trinity/Eve/EveSpaceScene.h
@@ -119,2 +119,2 @@ public:
- virtual void Render( Tr2RenderContext & renderContext );
- virtual void RenderDebugInfo( Tr2RenderContext & renderContext );
+ virtual void Render( Tr2RenderContext& renderContext );
+ virtual void RenderDebugInfo( Tr2RenderContext& renderContext );
@@ -149 +149 @@ public:
- void BeginFrame( Tr2RenderContext & renderContext );
+ void BeginFrame( Tr2RenderContext& renderContext );
@@ -152,2 +152,2 @@ public:
- void Render3DUI( Tr2RenderContext & renderContext );
- void PopulateAndApplyPerFrameData( Tr2RenderContext & renderContext );
+ void Render3DUI( Tr2RenderContext& renderContext );
+ void PopulateAndApplyPerFrameData( Tr2RenderContext& renderContext );
@@ -168 +168 @@ public:
- bool OnModified( Be::Var * val );
+ bool OnModified( Be::Var* val );
@@ -211 +211 @@ public:
- void SetShLightingManager( Tr2ShLightingManager * manager );
+ void SetShLightingManager( Tr2ShLightingManager* manager );
@@ -353,3 +353,3 @@ public:
- void PopulatePerFrameVSData( PerFrameVSData & data, Tr2RenderContext & renderContext );
- void PopulatePerFramePSData( PerFramePSData & data, Tr2RenderContext & renderContext );
- void PopulatePerFramePSData( PerFramePSData & data, Tr2ShadowMap * shadowMap, Tr2RenderContext & renderContext );
+ void PopulatePerFrameVSData( PerFrameVSData& data, Tr2RenderContext& renderContext );
+ void PopulatePerFramePSData( PerFramePSData& data, Tr2RenderContext& renderContext );
+ void PopulatePerFramePSData( PerFramePSData& data, Tr2ShadowMap* shadowMap, Tr2RenderContext& renderContext );
@@ -357 +357 @@ public:
- void ApplyPerFrameData( Tr2RenderContext & renderContext );
+ void ApplyPerFrameData( Tr2RenderContext& renderContext );
@@ -360 +360 @@ public:
- void RenderPlanets( Tr2RenderContext & renderContext );
+ void RenderPlanets( Tr2RenderContext& renderContext );
@@ -362 +362 @@ public:
- void RenderDistortion( Tr2RenderContext & renderContext );
+ void RenderDistortion( Tr2RenderContext& renderContext );
@@ -365,2 +365,2 @@ public:
- void SetupPlanetsAsShadowCaster( CcpMath::Sphere * planets, size_t maxPlanets );
- void SetupPlanetsAsShadowCaster( Tr2RenderContext & renderContext );
+ void SetupPlanetsAsShadowCaster( CcpMath::Sphere* planets, size_t maxPlanets );
+ void SetupPlanetsAsShadowCaster( Tr2RenderContext& renderContext );
@@ -369,5 +369,5 @@ public:
- void GetAllBatchesFromRenderables( std::vector<ITr2Renderable*> & objectRenderables, Tr2RenderableSortList & objectsWithTransparencies, bool includeDistortions, BatchMap& batches, Tr2RenderReason reason = TR2RENDERREASON_NORMAL );
- void GetOpaqueBatchesFromRenderables( std::vector<ITr2Renderable*> & objectRenderables, BatchMap & batches, Tr2RenderReason reason = TR2RENDERREASON_NORMAL );
- void GetDepthBatchesFromRenderables( std::vector<ITr2Renderable*> & objectRenderables, BatchMap & batches, Tr2RenderReason reason = TR2RENDERREASON_NORMAL );
- void GetTransparentBatchesFromRenderables( std::vector<ITr2Renderable*> & objectRenderables, Tr2RenderableSortList & objectsWithTransparencies, bool includeDistortions, BatchMap& batches, Tr2RenderReason reason = TR2RENDERREASON_NORMAL );
- void PrepareTransparentBatch( Tr2RenderableSortList & objectsWithTransparencies, BatchMap & batches, Tr2RenderReason reason = TR2RENDERREASON_NORMAL );
+ void GetAllBatchesFromRenderables( std::vector<ITr2Renderable*>& objectRenderables, Tr2RenderableSortList& objectsWithTransparencies, bool includeDistortions, BatchMap& batches, Tr2RenderReason reason = TR2RENDERREASON_NORMAL );
+ void GetOpaqueBatchesFromRenderables( std::vector<ITr2Renderable*>& objectRenderables, BatchMap& batches, Tr2RenderReason reason = TR2RENDERREASON_NORMAL );
+ void GetDepthBatchesFromRenderables( std::vector<ITr2Renderable*>& objectRenderables, BatchMap& batches, Tr2RenderReason reason = TR2RENDERREASON_NORMAL );
+ void GetTransparentBatchesFromRenderables( std::vector<ITr2Renderable*>& objectRenderables, Tr2RenderableSortList& objectsWithTransparencies, bool includeDistortions, BatchMap& batches, Tr2RenderReason reason = TR2RENDERREASON_NORMAL );
+ void PrepareTransparentBatch( Tr2RenderableSortList& objectsWithTransparencies, BatchMap& batches, Tr2RenderReason reason = TR2RENDERREASON_NORMAL );
@@ -376,4 +376,4 @@ public:
- void RenderOpaqueBatches( BatchMap & batches, Tr2RenderContext & renderContext );
- void RenderTransparentBatches( BatchMap & batches, Tr2RenderContext & renderContext );
- void RenderTransparentBatches2( BatchMap & batches, Tr2RenderContext & renderContext, bool pass );
- bool RenderDistortionBatches( BatchMap & batches, const Tr2TextureAL& distortionMap, const Tr2TextureAL& depthMap, Tr2RenderContext& renderContext );
+ void RenderOpaqueBatches( BatchMap& batches, Tr2RenderContext& renderContext );
+ void RenderTransparentBatches( BatchMap& batches, Tr2RenderContext& renderContext );
+ void RenderTransparentBatches2( BatchMap& batches, Tr2RenderContext& renderContext, bool pass );
+ bool RenderDistortionBatches( BatchMap& batches, const Tr2TextureAL& distortionMap, const Tr2TextureAL& depthMap, Tr2RenderContext& renderContext );
@@ -382 +382 @@ public:
- void RenderBatch( ITriRenderBatchAccumulator * batch,
+ void RenderBatch( ITriRenderBatchAccumulator* batch,
@@ -384 +384 @@ public:
- Tr2RenderContext & renderContext );
+ Tr2RenderContext& renderContext );
@@ -537 +537 @@ protected:
- void SetGpuParticleSystem( Tr2GpuParticleSystem * ps )
+ void SetGpuParticleSystem( Tr2GpuParticleSystem* ps )
@@ -552 +552 @@ protected:
- ShadowResources SetupCascadedShadows( Tr2RenderReason renderReason, Tr2ShadowMap & shadowMap, const TriFrustum& viewFrustum, const Tr2TextureAL& depthMap, Tr2GpuResourcePool& gpuResourcePool, Tr2RenderContext& renderContext );
+ ShadowResources SetupCascadedShadows( Tr2RenderReason renderReason, Tr2ShadowMap& shadowMap, const TriFrustum& viewFrustum, const Tr2TextureAL& depthMap, Tr2GpuResourcePool& gpuResourcePool, Tr2RenderContext& renderContext );
@@ -563 +563 @@ protected:
- void GetPickingObjectsToRender( std::vector<ITr2Renderable*> & pickableRenderObjects );
+ void GetPickingObjectsToRender( std::vector<ITr2Renderable*>& pickableRenderObjects );
@@ -572,2 +572,2 @@ public:
- IRootPtr PickAsyncObject( EvePickingContext * listener, int x, int y, TriProjection* proj, TriView* view, TriViewport* viewport, Be::OptionalWithDefaultValue<Tr2PickTypes, PICK_TYPE_PICKING | PICK_TYPE_OPAQUE> filter ); // for use by python, uses default immediate context
- BluePy PickAsyncObjectAndExtraData( EvePickingContext * listener, int x, int y, TriProjection* proj, TriView* view, TriViewport* viewport, Be::OptionalWithDefaultValue<Tr2PickTypes, PICK_TYPE_PICKING | PICK_TYPE_OPAQUE> pickTypes );
+ IRootPtr PickAsyncObject( EvePickingContext* listener, int x, int y, TriProjection* proj, TriView* view, TriViewport* viewport, Be::OptionalWithDefaultValue<Tr2PickTypes, PICK_TYPE_PICKING | PICK_TYPE_OPAQUE> filter ); // for use by python, uses default immediate context
+ BluePy PickAsyncObjectAndExtraData( EvePickingContext* listener, int x, int y, TriProjection* proj, TriView* view, TriViewport* viewport, Be::OptionalWithDefaultValue<Tr2PickTypes, PICK_TYPE_PICKING | PICK_TYPE_OPAQUE> pickTypes );
@@ -575 +575 @@ public:
- std::tuple<IRootPtr, uint32_t, uint32_t> PerformPicking( EvePickingContext * listener, bool immediate, int x, int y, TriProjection* proj, TriView* view, TriViewport* viewport, Tr2PickTypes pickTypes, Tr2PrimaryRenderContext& renderContext );
+ std::tuple<IRootPtr, uint32_t, uint32_t> PerformPicking( EvePickingContext* listener, bool immediate, int x, int y, TriProjection* proj, TriView* view, TriViewport* viewport, Tr2PickTypes pickTypes, Tr2PrimaryRenderContext& renderContext );
@@ -605,2 +605,2 @@ protected:
- void ClearBatches( BatchMap & batches );
- void FinalizeBatches( BatchMap & batches );
+ void ClearBatches( BatchMap& batches );
+ void FinalizeBatches( BatchMap& batches );
@@ -614 +614 @@ protected:
- void GatherDynamicLights( Tr2RenderContext & renderContext );
+ void GatherDynamicLights( Tr2RenderContext& renderContext );
@@ -616,2 +616,2 @@ protected:
- void GatherSceneObjectRenderables( std::vector<IEveSpaceObject2*> & allObjects, std::vector<ITr2Renderable*> & renderables, Tr2RenderContext & renderContext );
- void GatherReflectionRenderables( std::vector<ITr2Renderable*> & renderables );
+ void GatherSceneObjectRenderables( std::vector<IEveSpaceObject2*>& allObjects, std::vector<ITr2Renderable*>& renderables, Tr2RenderContext& renderContext );
+ void GatherReflectionRenderables( std::vector<ITr2Renderable*>& renderables );
@@ -638 +638 @@ protected:
- void UpdateImpostors( Tr2RenderContext & renderContext );
+ void UpdateImpostors( Tr2RenderContext& renderContext );
@@ -680 +680 @@ public:
- bool PrepareShadowMapForLights( Tr2RenderContext & renderContext, const Tr2TextureAL& shadowMap );
+ bool PrepareShadowMapForLights( Tr2RenderContext& renderContext, const Tr2TextureAL& shadowMap );
@@ -682 +682 @@ public:
- Tr2RenderContext & renderContext,
+ Tr2RenderContext& renderContext,
@@ -691,2 +691,2 @@ public:
- void RenderShadowMapForLight( Tr2RenderContext & renderContext, const std::vector<IEveShadowCaster*>& shadowCasters, const Tr2LightManager::PerLightData& lightData, const Tr2TextureAL& shadowMap );
- void FinishRenderingShadowMapForLights( Tr2RenderContext & renderContext );
+ void RenderShadowMapForLight( Tr2RenderContext& renderContext, const std::vector<IEveShadowCaster*>& shadowCasters, const Tr2LightManager::PerLightData& lightData, const Tr2TextureAL& shadowMap );
+ void FinishRenderingShadowMapForLights( Tr2RenderContext& renderContext );
@@ -712,2 +712,2 @@ public:
- void RenderVolumetricShadowMap( Tr2RenderContext & renderContext );
- void RenderIntoCloudShadowMap( Tr2RenderContext & renderContext, const ITr2VolumetricRenderable::ShadowInfo* cloudShadowInformation, std::vector<IEveShadowCaster*> shadowCasters );
+ void RenderVolumetricShadowMap( Tr2RenderContext& renderContext );
+ void RenderIntoCloudShadowMap( Tr2RenderContext& renderContext, const ITr2VolumetricRenderable::ShadowInfo* cloudShadowInformation, std::vector<IEveShadowCaster*> shadowCasters );
diff --git a/trinity/Eve/EveSpaceSceneRenderDriver.h b/trinity/Eve/EveSpaceSceneRenderDriver.h
--- a/trinity/Eve/EveSpaceSceneRenderDriver.h
+++ b/trinity/Eve/EveSpaceSceneRenderDriver.h
@@ -86 +86 @@ public:
- void SetScene( EveSpaceScene * scene );
+ void SetScene( EveSpaceScene* scene );
@@ -152,2 +152,2 @@ private:
- ReflectionFaces PrepareReflectionFaces( Tr2RenderContext & renderContext );
- void SetLightViews( RenderInfo & mainView, ReflectionFaces & faces, Tr2RenderContext & renderContext );
+ ReflectionFaces PrepareReflectionFaces( Tr2RenderContext& renderContext );
+ void SetLightViews( RenderInfo& mainView, ReflectionFaces& faces, Tr2RenderContext& renderContext );
@@ -159 +159 @@ private:
- void SetCameraToRenderer( Tr2RenderContext & renderContext ) const;
+ void SetCameraToRenderer( Tr2RenderContext& renderContext ) const;
@@ -172 +172 @@ private:
- void UpdateGpuParticleSystem( Tr2RenderContext & renderContext );
+ void UpdateGpuParticleSystem( Tr2RenderContext& renderContext );
diff --git a/trinity/ITr2Renderable.h b/trinity/ITr2Renderable.h
--- a/trinity/ITr2Renderable.h
+++ b/trinity/ITr2Renderable.h
@@ -50 +50 @@ BLUE_INTERFACE( ITr2Renderable ) :
- virtual void GetBatches( ITriRenderBatchAccumulator * batches, TriBatchType batchType, const Tr2PerObjectData* perObjectData, Tr2RenderReason reason = TR2RENDERREASON_NORMAL ) = 0;
+ virtual void GetBatches( ITriRenderBatchAccumulator* batches, TriBatchType batchType, const Tr2PerObjectData* perObjectData, Tr2RenderReason reason = TR2RENDERREASON_NORMAL ) = 0;
@@ -55 +55 @@ BLUE_INTERFACE( ITr2Renderable ) :
- virtual Tr2PerObjectData* GetPerObjectData( ITriRenderBatchAccumulator * accumulator ) = 0;
+ virtual Tr2PerObjectData* GetPerObjectData( ITriRenderBatchAccumulator* accumulator ) = 0;
@@ -97 +97 @@ BLUE_INTERFACE( ITr2Pickable ) :
- virtual void GetPickingBatches( ITriRenderBatchAccumulator * batches, Tr2PickTypes pickTypes, const Tr2PerObjectData* perObjectData ) = 0;
+ virtual void GetPickingBatches( ITriRenderBatchAccumulator* batches, Tr2PickTypes pickTypes, const Tr2PerObjectData* perObjectData ) = 0;
diff --git a/trinity/Lights/Tr2Light.h b/trinity/Lights/Tr2Light.h
--- a/trinity/Lights/Tr2Light.h
+++ b/trinity/Lights/Tr2Light.h
@@ -80,2 +80,2 @@ public:
- void AddLight( Tr2LightManager & lightManager, CXMMATRIX transform, float scale, const Float4x3* bones = nullptr, size_t boneCount = 0 );
- void GetLight( Vector3 & position, float& radius, Color& color );
+ void AddLight( Tr2LightManager& lightManager, CXMMATRIX transform, float scale, const Float4x3* bones = nullptr, size_t boneCount = 0 );
+ void GetLight( Vector3& position, float& radius, Color& color );
@@ -85,2 +85,2 @@ public:
- virtual void RenderDebugInfo( ITr2DebugRenderer2 & renderer, const Matrix& worldMatrix, const Float4x3* bones = nullptr, size_t boneCount = 0 );
- virtual void SetLightData( LightData & baseData );
+ virtual void RenderDebugInfo( ITr2DebugRenderer2& renderer, const Matrix& worldMatrix, const Float4x3* bones = nullptr, size_t boneCount = 0 );
+ virtual void SetLightData( LightData& baseData );
@@ -94 +94 @@ public:
- virtual bool OnModified( Be::Var * value );
+ virtual bool OnModified( Be::Var* value );
diff --git a/trinity/PostProcess/Tr2PostProcessRenderer.h b/trinity/PostProcess/Tr2PostProcessRenderer.h
--- a/trinity/PostProcess/Tr2PostProcessRenderer.h
+++ b/trinity/PostProcess/Tr2PostProcessRenderer.h
@@ -154 +154 @@ private:
- Tr2GpuResourcePool::Texture RenderBloom( Tr2GpuResourcePool::Texture & dest, Tr2GpuResourcePool & gpuResourcePool, Tr2RenderContext & renderContext, Tr2PPBloomEffect * bloom, Tr2PPDynamicExposureEffect * dynamicExposure );
+ Tr2GpuResourcePool::Texture RenderBloom( Tr2GpuResourcePool::Texture& dest, Tr2GpuResourcePool& gpuResourcePool, Tr2RenderContext& renderContext, Tr2PPBloomEffect* bloom, Tr2PPDynamicExposureEffect* dynamicExposure );
@@ -156,5 +156,5 @@ private:
- std::array<Tr2GpuResourcePool::Texture, Bloom::MAX_BLOOM_STEPS> & downsample,
- std::array<Tr2GpuResourcePool::Texture, Bloom::MAX_BLOOM_STEPS> & upsample,
- Tr2GpuResourcePool::Texture & blitCurrent,
- Tr2GpuResourcePool & gpuResourcePool,
- Tr2RenderContext & renderContext );
+ std::array<Tr2GpuResourcePool::Texture, Bloom::MAX_BLOOM_STEPS>& downsample,
+ std::array<Tr2GpuResourcePool::Texture, Bloom::MAX_BLOOM_STEPS>& upsample,
+ Tr2GpuResourcePool::Texture& blitCurrent,
+ Tr2GpuResourcePool& gpuResourcePool,
+ Tr2RenderContext& renderContext );
@@ -184 +184 @@ private:
- void RenderDynamicExposureDebug( Tr2GpuResourcePool & gpuResourcePool, Tr2RenderContext & renderContext, Tr2PPDynamicExposureEffect * dynamicExposure, const Tr2BufferAL& histogramBuffer );
+ void RenderDynamicExposureDebug( Tr2GpuResourcePool& gpuResourcePool, Tr2RenderContext& renderContext, Tr2PPDynamicExposureEffect* dynamicExposure, const Tr2BufferAL& histogramBuffer );
@@ -243,2 +243,2 @@ private:
- [[nodiscard]] Tr2GpuResourcePool::Buffer GetExposureBuffer( Tr2GpuResourcePool & gpuResourcePool ) const;
- [[nodiscard]] Tr2GpuResourcePool::Texture GetBlackTexture( Tr2GpuResourcePool & gpuResourcePool ) const;
+ [[nodiscard]] Tr2GpuResourcePool::Buffer GetExposureBuffer( Tr2GpuResourcePool& gpuResourcePool ) const;
+ [[nodiscard]] Tr2GpuResourcePool::Texture GetBlackTexture( Tr2GpuResourcePool& gpuResourcePool ) const;
@@ -247 +247 @@ private:
- Tr2GpuResourcePool::Texture Blur( Tr2GpuResourcePool::Texture src, Tr2GpuResourcePool & gpuResourcePool, Tr2RenderContext & renderContext, const PostProcessBlur::BlurContext& blurContext );
+ Tr2GpuResourcePool::Texture Blur( Tr2GpuResourcePool::Texture src, Tr2GpuResourcePool& gpuResourcePool, Tr2RenderContext& renderContext, const PostProcessBlur::BlurContext& blurContext );
@@ -250 +250 @@ private:
- [[nodiscard]] Tr2GpuResourcePool::Texture RenderGenericEffects( std::vector<Tr2AccumulatedGenericEffects::GenericEffectInstance> & effects, const Tr2GpuResourcePool::Texture& src, Tr2GpuResourcePool& gpuResourcePool, Tr2RenderContext& renderContext ) const;
+ [[nodiscard]] Tr2GpuResourcePool::Texture RenderGenericEffects( std::vector<Tr2AccumulatedGenericEffects::GenericEffectInstance>& effects, const Tr2GpuResourcePool::Texture& src, Tr2GpuResourcePool& gpuResourcePool, Tr2RenderContext& renderContext ) const;
diff --git a/trinity/Tr2ReflectionProbe.h b/trinity/Tr2ReflectionProbe.h
--- a/trinity/Tr2ReflectionProbe.h
+++ b/trinity/Tr2ReflectionProbe.h
@@ -42 +42 @@ public:
- bool OnModified( Be::Var * value );
+ bool OnModified( Be::Var* value );
@@ -60 +60 @@ private:
- bool DoPrepareResources( ImageIO::PixelFormat targetFormat, Tr2PrimaryRenderContext & renderContext );
+ bool DoPrepareResources( ImageIO::PixelFormat targetFormat, Tr2PrimaryRenderContext& renderContext );
diff --git a/trinity/Tr2VolumetricsRenderer.h b/trinity/Tr2VolumetricsRenderer.h
--- a/trinity/Tr2VolumetricsRenderer.h
+++ b/trinity/Tr2VolumetricsRenderer.h
@@ -78 +78 @@ public:
- static Tr2GpuResourcePool::Texture GetEmptyVolumetricTexture( Tr2GpuResourcePool & gpuResourcePool );
+ static Tr2GpuResourcePool::Texture GetEmptyVolumetricTexture( Tr2GpuResourcePool& gpuResourcePool );
@@ -84,2 +84,2 @@ public:
- Tr2RenderContext & renderContext,
- Tr2GpuResourcePool & gpuResourcePool,
+ Tr2RenderContext& renderContext,
+ Tr2GpuResourcePool& gpuResourcePool,
@@ -101,2 +101,2 @@ public:
- Tr2RenderContext & renderContext,
- Tr2GpuResourcePool & gpuResourcePool,
+ Tr2RenderContext& renderContext,
+ Tr2GpuResourcePool& gpuResourcePool,
@@ -111,2 +111,2 @@ public:
- static Tr2GpuResourcePool::Texture GetEmptyFogTexture( Tr2GpuResourcePool & gpuResourcePool );
- void UpdateFogEnvironmentMap( Tr2RenderContext & renderContext );
+ static Tr2GpuResourcePool::Texture GetEmptyFogTexture( Tr2GpuResourcePool& gpuResourcePool );
+ void UpdateFogEnvironmentMap( Tr2RenderContext& renderContext );
@@ -146 +146 @@ public:
- void PopulatePerFrameData( FroxelPerFrameData & data );
+ void PopulatePerFrameData( FroxelPerFrameData& data );
@@ -174,3 +174,3 @@ private:
- FogViewDependentResources & resources,
- Tr2RenderContext & renderContext,
- Tr2GpuResourcePool & gpuResourcePool,
+ FogViewDependentResources& resources,
+ Tr2RenderContext& renderContext,
+ Tr2GpuResourcePool& gpuResourcePool,
@@ -291 +291 @@ private:
- FogPerObjectData * data,
+ FogPerObjectData* data,
✨ Powered by cpp-linter -- ⭐ Star • ❤️ Sponsor • 💬 Feedback
filipppavlov
approved these changes
Nov 10, 2026
CCPNobody
deleted the
dynamicexposure-and-reflection-probe-improvements
branch
November 10, 2026 13:49
2 of 4 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

Summary
Space scene: one render path for the main view and the reflection probe faces
AI assistance
AI helped