Skip to content
LeviMC
English
AutoLightDark
LeviLamina
Loading...
Searching...
No Matches
StaticLightTransitionManager.h
1#pragma once
2
3#include "mc/_HeaderOutputPredefine.h"
4
5// auto generated inclusion list
6#include "mc/client/renderer/chunks/point_lighting/ColorGroupTable.h"
7#include "mc/client/renderer/chunks/point_lighting/ILightLODResourceProvider.h"
8#include "mc/deps/core/checked_resource_service/CheckedResourceService.h"
9#include "mc/deps/minecraft_renderer/game/VoxelLightingBuffer.h"
10#include "mc/platform/brstd/bitset.h"
11#include "mc/world/level/SubChunkPos.h"
12
13// auto generated forward declare list
14// clang-format off
15class BlockPos;
16class ChunkSource;
18class TaskGroup;
19namespace LightPropagation { class LightPropagationCoordinator; }
20namespace LightPropagation { class VoxelVolumeBuffersHandler; }
21namespace LightPropagation { struct LightAccumulationVolume; }
22namespace PointLighting { struct BakedLightResources; }
23namespace PointLighting::Detail { struct ColorGroup; }
24namespace dragon { struct ResolvedShaderBufferResource; }
25namespace mce { struct DefaultVoxelBufferTraits; }
26namespace mce { struct PointLightParameters; }
27namespace mce::framebuilder { struct PointLightBudgetParameters; }
28namespace mce::framebuilder { struct TransitioningVoxelVolumeDescription; }
29// clang-format on
30
31namespace PointLighting {
32
34: public ::PointLighting::ILightLODResourceProvider<::PointLighting::BakedLightResources>,
35 public ::std::enable_shared_from_this<::PointLighting::StaticLightTransitionManager> {
36public:
37 // StaticLightTransitionManager inner types declare
38 // clang-format off
39 struct PropagationResult;
40 struct PendingTask;
41 struct InFlightTaskGuard;
42 // clang-format on
43
44 // StaticLightTransitionManager inner types define
45 struct PropagationResult {
46 public:
47 // member variables
48 // NOLINTBEGIN
49 ::ll::TypedStorage<2, 2, short> mGroupIndex;
50 ::ll::TypedStorage<4, 12, ::SubChunkPos> mPos;
51 ::ll::TypedStorage<1, 1, bool> mIsNeighbor;
52 ::ll::TypedStorage<1, 1, bool> mDeferred;
53 ::ll::TypedStorage<8, 8, ::std::unique_ptr<::LightPropagation::LightAccumulationVolume>> mCurrentVolume;
54 ::ll::TypedStorage<8, 8, ::std::unique_ptr<::LightPropagation::LightAccumulationVolume>> mNextVolume;
55 ::ll::TypedStorage<4, 4, ::brstd::bitset<27, uint>> mModified;
56 // NOLINTEND
57 };
58
59 struct PendingTask {
60 public:
61 // member variables
62 // NOLINTBEGIN
63 ::ll::TypedStorage<2, 2, short> mGroupIndex;
64 ::ll::TypedStorage<4, 12, ::SubChunkPos> mPos;
65 ::ll::TypedStorage<1, 1, bool> mIsNeighbor;
66 ::ll::TypedStorage<1, 1, bool> mDeferred;
67 // NOLINTEND
68 };
69
70 struct InFlightTaskGuard {
71 public:
72 // member variables
73 // NOLINTBEGIN
74 ::ll::TypedStorage<8, 16, ::std::weak_ptr<::PointLighting::StaticLightTransitionManager>> mManager;
75 // NOLINTEND
76 };
77
78public:
79 // member variables
80 // NOLINTBEGIN
81 ::ll::TypedStorage<4, 4, ::std::atomic<int>> mInFlightTasksCount;
82 ::ll::TypedStorage<4, 4, int> mMaxInFlightTasks;
83 ::ll::TypedStorage<4, 4, int> mMaxCommitsPerFrame;
84 ::ll::TypedStorage<8, 8, uint64> mMaxStagedResults;
85 ::ll::TypedStorage<8, 8, uint64> mMaxPendingTransitionTasks;
86 ::ll::TypedStorage<8, 8, uint64> mMaxTransitionVolumeCount;
87 ::ll::TypedStorage<8, 80, ::std::mutex> mResultQueueMutex;
88 ::ll::TypedStorage<
89 8,
90 40,
91 ::std::queue<
92 ::PointLighting::StaticLightTransitionManager::PropagationResult,
93 ::std::deque<::PointLighting::StaticLightTransitionManager::PropagationResult>>>
94 mResultQueue;
95 ::ll::TypedStorage<
96 8,
97 16,
98 ::std::map<
99 short,
100 ::std::queue<
101 ::PointLighting::StaticLightTransitionManager::PendingTask,
102 ::std::deque<::PointLighting::StaticLightTransitionManager::PendingTask>>>>
103 mPendingTasksByGroup;
104 ::ll::TypedStorage<
105 8,
106 16,
107 ::std::map<short, ::std::vector<::PointLighting::StaticLightTransitionManager::PropagationResult>>>
108 mStagedResults;
109 ::ll::TypedStorage<2, 2, short> mSpawnCursor;
110 ::ll::TypedStorage<8, 88, ::PointLighting::Detail::ColorGroupTable> mColorGroups;
111 ::ll::TypedStorage<8, 8, ::std::unique_ptr<::mce::VoxelLightingBuffer<::mce::DefaultVoxelBufferTraits>>>
112 mVoxelLightingBuffer;
113 ::ll::TypedStorage<8, 8, ::std::unique_ptr<::LightPropagation::VoxelVolumeBuffersHandler>>
114 mVoxelVolumeBuffersHandler;
115 // NOLINTEND
116
117public:
118 // virtual functions
119 // NOLINTBEGIN
120 virtual ~StaticLightTransitionManager() /*override*/ = default;
121
122 virtual bool atCapacity() const /*override*/;
123
124 virtual bool canReserve(::BlockPos const&) const /*override*/;
125
126 virtual void beginTransition(
127 ::BlockPos const&,
128 ::mce::PointLightParameters const&,
129 float const,
130 ::PointLighting::BakedLightResources&
131 ) /*override*/;
132
133 virtual bool
134 acquired(::BlockPos const&, ::mce::PointLightParameters const&, ::PointLighting::BakedLightResources&) const
135 /*override*/;
136
137 virtual void advance(::BlockPos const&, ::PointLighting::BakedLightResources&, float) /*override*/;
138
139 virtual void
140 refresh(::BlockPos const&, ::mce::PointLightParameters const&, ::PointLighting::BakedLightResources&) /*override*/;
141
142 virtual void finalize(::BlockPos const&, ::PointLighting::BakedLightResources&) /*override*/;
143
144 virtual void release(::BlockPos const&, ::PointLighting::BakedLightResources&) /*override*/;
145 // NOLINTEND
146
147public:
148 // member functions
149 // NOLINTBEGIN
150 MCNAPI void _advanceGroup(::PointLighting::Detail::ColorGroup& group, short groupIndex, float transitionStepSize);
151
152 MCNAPI bool _asyncResourcesSaturated() const;
153
154 MCNAPI void _clearStaleCells(::PointLighting::Detail::ColorGroup& group, short groupIndex);
155
157
158 MCNAPI void _flushStagedStep(::PointLighting::Detail::ColorGroup& group, short groupIndex);
159
161 ::TaskGroup& taskGroup,
162 ::ChunkSource& chunkSource,
163 ::std::shared_ptr<::LightPropagation::LightPropagationCoordinator> lightPropagationCoordinator
164 );
165
166 MCNAPI void _writeVolume(
167 ::std::unique_ptr<::LightPropagation::LightAccumulationVolume const> volumePtr,
168 ::SubChunkPos pos,
169 short layer
170 );
171
172 MCNAPI ::std::optional<::mce::framebuilder::TransitioningVoxelVolumeDescription>
173 getVoxelVolumeBuffers(::mce::CheckedResourceService<::dragon::ResolvedShaderBufferResource>* bufferResourceService);
174
176 ::TaskGroup& taskGroup,
177 ::ChunkSource& chunkSource,
178 ::std::shared_ptr<::LightPropagation::LightPropagationCoordinator> lightPropagationCoordinator,
179 ::mce::framebuilder::PointLightBudgetParameters const& pointLightParameters
180 );
181
182 MCNAPI void reset();
183
184 MCNAPI void resetLightingConfig(::std::weak_ptr<::RuntimeLocalLightingConfig const> localLightConfig);
185 // NOLINTEND
186};
187
188} // namespace PointLighting
Definition BlockPos.h:14
Definition ChunkSource.h:37
Definition LightPropagationCoordinator.h:7
Definition VoxelVolumeBuffersHandler.h:7
Definition StaticLightTransitionManager.h:7
MCAPI void _clearStaleCells(::PointLighting::Detail::ColorGroup &group, short groupIndex)
MCAPI void _advanceGroup(::PointLighting::Detail::ColorGroup &group, short groupIndex, float transitionStepSize)
MCAPI void _writeVolume(::std::unique_ptr<::LightPropagation::LightAccumulationVolume const > volumePtr, ::SubChunkPos pos, short layer)
MCAPI ::std::optional<::mce::framebuilder::TransitioningVoxelVolumeDescription > getVoxelVolumeBuffers(::mce::CheckedResourceService<::dragon::ResolvedShaderBufferResource > *bufferResourceService)
MCAPI void _spawnPendingTasks(::TaskGroup &taskGroup, ::ChunkSource &chunkSource, ::std::shared_ptr<::LightPropagation::LightPropagationCoordinator > lightPropagationCoordinator)
MCAPI void _flushStagedStep(::PointLighting::Detail::ColorGroup &group, short groupIndex)
MCAPI void processPropagationTasks(::TaskGroup &taskGroup, ::ChunkSource &chunkSource, ::std::shared_ptr<::LightPropagation::LightPropagationCoordinator > lightPropagationCoordinator, ::mce::framebuilder::PointLightBudgetParameters const &pointLightParameters)
MCAPI void resetLightingConfig(::std::weak_ptr<::RuntimeLocalLightingConfig const > localLightConfig)
Definition RuntimeLocalLightingConfig.h:5
Definition SubChunkPos.h:5
Definition TaskGroup.h:85
STL namespace.
Definition LightAccumulationVolume.h:7
Definition BakedLightResources.h:7
Definition ColorGroup.h:7
Definition StaticLightTransitionManager.h:21
Definition StaticLightTransitionManager.h:19
Definition StaticLightTransitionManager.h:17
Definition ResolvedShaderBufferResource.h:7
Definition DefaultVoxelBufferTraits.h:7
Definition PointLightParameters.h:7
Definition PointLightBudgetParameters.h:7
Definition TransitioningVoxelVolumeDescription.h:7