3#include "mc/_HeaderOutputPredefine.h"
6#include "mc/deps/core/checked_resource_service/CheckedResourceService.h"
7#include "mc/deps/core/checked_resource_service/ClientResourcePointer.h"
8#include "mc/deps/core/file/PathBuffer.h"
9#include "mc/deps/core/utility/EnableNonOwnerReferences.h"
10#include "mc/deps/minecraft_renderer/framebuilder/AsyncLoadResult.h"
11#include "mc/deps/minecraft_renderer/game/FrustumCullerType.h"
12#include "mc/deps/minecraft_renderer/game/LevelCullerType.h"
13#include "mc/deps/minecraft_renderer/game/TerrainLayerLOD.h"
14#include "mc/deps/renderer/hal/enums/RenderFeature.h"
15#include "mc/external/render_dragon/mesh/IndexSize.h"
16#include "mc/external/render_dragon/platform/DebugModeFlags.h"
17#include "mc/external/render_dragon/platform/RenderAPI.h"
18#include "mc/external/render_dragon/platform/VerticalSync.h"
19#include "mc/external/render_dragon/rendering/ClipSpaceDepthMode.h"
20#include "mc/external/render_dragon/rendering/LightingModels.h"
21#include "mc/external/render_dragon/resources/ServerResourcePointer.h"
22#include "mc/external/render_dragon/tasks/DeferredResult.h"
23#include "mc/external/render_dragon/texture_streaming/DebugPolicy.h"
24#include "mc/external/render_dragon/texture_streaming/texture_cache/TextureCache.h"
45namespace dragon::platform {
struct Statistics; }
120namespace mce::framebuilder {
122class FrameBuilder :
public ::Bedrock::EnableNonOwnerReferences {
135 ::ll::TypedStorage<8, 8, double> renderThreadDurationInSeconds;
136 ::ll::TypedStorage<8, 8, double> waitUntilCompletedDurationInSeconds;
137 ::ll::TypedStorage<8, 8, double> flipTimestampInMilliseconds;
145 virtual ~InitializationState() =
default;
149 using InitializationStatePointer = ::std::shared_ptr<::mce::framebuilder::FrameBuilder::InitializationState>;
151 using LayerRanges = ::std::function<::RangeIndices(::TerrainLayer
const&, ::TerrainLayerLOD)>;
156 virtual ~FrameBuilder() =
default;
158 virtual bool enabled()
const = 0;
160 virtual ::std::optional<::dragon::platform::Statistics> getStatistics() = 0;
162 virtual ::std::optional<::dragon::platform::Statistics> getPreviousFrameStatistics()
const = 0;
164 virtual double getAverageGPUTime()
const = 0;
166 virtual void resetGPUTimeData() = 0;
168 virtual bool supportsRenderFeature(::mce::RenderFeature
const feature)
const = 0;
170 virtual ::mce::framebuilder::FrameBuilder::FrameTimings getLastFrameTimings()
const = 0;
172 virtual ::std::weak_ptr<::mce::framebuilder::DynamicResolutionController> getDynamicResolutionController() = 0;
174 virtual bool isDeviceRemoved();
176 virtual ::std::optional<::std::shared_ptr<::mce::framebuilder::FrameBuilder::InitializationState>>
177 init(::mce::framebuilder::FrameBuilderInitDependencies&& deps) = 0;
179 virtual ::std::optional<::std::shared_ptr<::mce::framebuilder::FrameBuilder::InitializationState>>
180 continueInit(::std::shared_ptr<::mce::framebuilder::FrameBuilder::InitializationState> state) = 0;
182 virtual bool initialized()
const = 0;
184 virtual void destroy() = 0;
186 virtual void loadCoreAssets(
187 ::Core::PathBuffer<::std::string>
const& dataDirectory,
188 ::std::function<::std::string(::std::string
const&, ::std::string
const&)> loadFileDataCallback
191 virtual ::mce::framebuilder::AsyncLoadResult loadAsyncAssets() = 0;
193 virtual void startFrame() = 0;
195 virtual void endFrame(::mce::framebuilder::FrameBuilderContext&& frameBuilderContext) = 0;
197 virtual void discardFrame(
bool wait) = 0;
199 virtual void setTerrainAtlasTexture(::mce::ClientTexture
const& texture) = 0;
201 virtual float getTargetFrameTime()
const = 0;
203 virtual ::mce::framebuilder::FramePacingConfig getFramePacingConfig()
const = 0;
205 virtual void setFramePacingConfig(::mce::framebuilder::FramePacingConfig
const& config) = 0;
207 virtual void setDefaultActorMERSUniforms(
208 float const metalnessUniform,
209 float const emissiveUniform,
210 float const roughnessUniform,
211 float const subsurfaceUniform
214 virtual void setDefaultParticleMERSUniforms(
215 float const metalnessUniform,
216 float const emissiveUniform,
217 float const roughnessUniform,
218 float const subsurfaceUniform
221 virtual void setBiomeBlendingData(::mce::framebuilder::BiomeBlendingData
const& biomeBlendingData) = 0;
223 virtual void setActiveShadowTiles(::std::vector<::mce::framebuilder::ActiveShadowTileInfo>
const& activeTiles) = 0;
225 virtual void updateSurfaceParameters(::dragon::platform::SurfaceParameters
const& surfaceParams) = 0;
227 virtual void updateWindowSize(uint
const width, uint
const height) = 0;
229 virtual void updateClientViewSize(::glm::vec2
const& clientViewSize) = 0;
231 virtual bool updateMsaaLevel(uchar
const level) = 0;
233 virtual void updateFrameRateLimit(::std::optional<int>
const frameRate) = 0;
235 virtual void updateVSync(::dragon::platform::VerticalSync verticalSync) = 0;
237 virtual void updateFramePacing(
bool enabled) = 0;
239 virtual bool enableDynamicTextureHandles() = 0;
241 virtual void setDebugMode(::dragon::platform::DebugModeFlags debugFlags) = 0;
243 virtual void suspend() = 0;
245 virtual void resume() = 0;
247 virtual ::dragon::tasks::DeferredResult<::dragon::rendering::SharedTextureHandle> createExternalTexture(
248 ::std::optional<::std::variant<::std::monostate, ::dragon::platform::GLTextureWrapper>> nativeTexture
251 virtual void updateExternalTexture(
252 ::dragon::tasks::DeferredResult<::dragon::rendering::SharedTextureHandle> texture,
253 ::std::optional<::std::variant<::std::monostate, ::dragon::platform::GLTextureWrapper>> nativeTexture,
254 ::std::function<
void(::dragon::rendering::SharedTextureHandle)> rendererCallbackUpdateDelegate
257 virtual ::mce::ServerResourcePointer<::dragon::ResolvedTextureResource> wrapExternalTexture(
258 ::dragon::platform::RenderAPI api,
259 ::dragon::TextureDescription
const& desc,
260 void* externalTexture
263 virtual void createRenderChunk(::dragon::RenderMetadata
const& renderMetadata) = 0;
265 virtual void destroyRenderChunk(::dragon::RenderMetadata
const& renderMetadata) = 0;
267 virtual void generateRenderChunkVertexData(
268 ::RenderChunkDirectVertexData& renderChunkDirectVertexData,
269 ::std::function<::RangeIndices(::TerrainLayer
const&, ::TerrainLayerLOD)> layerRanges,
270 ::gsl::span<uchar const>
const& chunkData,
271 uint64
const& vertexCount,
272 ::mce::VertexLayout
const& mceLayout,
273 int const* absoluteBlockPosition
276 virtual void generateRenderChunkIndexData(
277 ::RenderChunkDirectIndexData& renderChunkDirectIndexData,
278 ::std::function<::RangeIndices(::TerrainLayer
const&, ::TerrainLayerLOD)> layerRanges,
279 ::gsl::span<uchar const>
const& indexData,
280 ::dragon::mesh::IndexSize
const indexSize
283 virtual void generateRenderChunkAdditionalVertexData(
284 ::RenderChunkDirectVertexData& renderChunkDirectVertexData,
285 ::gsl::span<uchar const>
const& additionalData,
286 uint64
const& vertexCount,
287 ::mce::VertexFormat
const& additionalDataFormat
290 virtual void freeRenderChunkVertexData(::RenderChunkDirectVertexData& renderChunkDirectVertexData) = 0;
292 virtual void freeRenderChunkIndexData(::RenderChunkDirectIndexData& renderChunkDirectIndexData) = 0;
294 virtual void debugPrintToScreen(::std::function<
void(
char const*)> printFunction) = 0;
296 virtual void debugDeclareSceneCamera(
297 ::mce::framebuilder::CameraDescriptionPerspective
const& cameraDescription,
298 ::mce::framebuilder::BufferClearDescription
const& bufferClearDescription
301 virtual void debugDeclareSceneCamera(
302 ::mce::framebuilder::CameraDescriptionOrthographic
const& cameraDescription,
303 ::mce::framebuilder::BufferClearDescription
const& bufferClearDescription
306 virtual ::glm::vec3 getSunDir()
const = 0;
308 virtual void setSunDir(::glm::vec3
const& sunDir) = 0;
310 virtual ::dragon::rendering::ClipSpaceDepthMode getClipSpace()
const = 0;
312 virtual ::mce::CheckedResourceService<::dragon::ResolvedVertexBufferResource>* getVertexBufferResourceService() = 0;
314 virtual ::mce::CheckedResourceService<::dragon::ResolvedIndexBufferResource>* getIndexBufferResourceService() = 0;
316 virtual ::mce::CheckedResourceService<::dragon::ResolvedShaderBufferResource>* getShaderBufferResourceService() = 0;
318 virtual ::mce::CheckedResourceService<::dragon::ResolvedMaterialResource>* getMaterialResourceService() = 0;
321 initializeTextureCache(::gsl::not_null<::WorkerPool*> workerPool, ::gsl::not_null<::Scheduler*> scheduler) = 0;
323 virtual void initializeTextureStreamer() = 0;
325 virtual bool isTextureStreamingEnabled()
const = 0;
327 virtual ::std::shared_ptr<
328 ::dragon::texturestreaming::TextureCache<::dragon::texturestreaming::DragonTextureCacheContext>>
329 getTextureCache() = 0;
331 virtual ::dragon::texturestreaming::unimplemented::DebugPolicy::TextureStreamingDebugControl
332 getTextureStreamingDebugControl() = 0;
334 virtual ::dragon::materials::MaterialResourceManager* getMaterialResourceManager() = 0;
336 virtual ::mce::framebuilder::FrameLightingModelCapabilities getFrameLightingModelCapabilities()
const = 0;
338 virtual bool isRayTracingCapable()
const = 0;
340 virtual bool isRayTracingEnabled()
const = 0;
342 virtual bool isDeferredEnabled()
const = 0;
344 virtual bool isVSyncEnabled_DEPRECATED()
const = 0;
346 virtual bool isFrameDiscardWhileRenderingCapable()
const = 0;
348 virtual bool isFrameDiscardWhileRenderingEnabled()
const = 0;
350 virtual ::std::shared_ptr<::dragon::rendering::RayTracingResources>
const getRayTracingResources()
const = 0;
352 virtual ::std::shared_ptr<::dragon::rendering::RayTracingResources> getRayTracingResources() = 0;
354 virtual ::std::shared_ptr<::dragon::rendering::RayTracingFeatureConfiguration>
const
355 getRayTracingFeatureConfiguration()
const = 0;
357 virtual ::std::shared_ptr<::dragon::rendering::RayTracingFeatureConfiguration>
358 getRayTracingFeatureConfiguration() = 0;
360 virtual ::std::shared_ptr<::mce::framebuilder::RenderingFeatureConfiguration>
const
361 getRenderingFeatureConfiguration()
const = 0;
363 virtual ::std::shared_ptr<::mce::framebuilder::RenderingFeatureConfiguration>
364 getRenderingFeatureConfiguration() = 0;
366 virtual void setLightingModel(::dragon::rendering::LightingModels lightingModel,
bool& modified) = 0;
368 virtual ::glm::vec<2, ushort> getRenderResolution()
const = 0;
370 virtual ::std::vector<::dragon::platform::RenderAPI> getSupportedRenderers()
const = 0;
372 virtual bool isUpscalingAvailable()
const = 0;
374 virtual void setUpscaling(
bool upscale) = 0;
376 virtual bool isUpscalingEnabled()
const = 0;
378 virtual float getUpscalingFactor()
const = 0;
380 virtual ::std::string_view
const getUpscalingInfo()
const = 0;
383 ::std::function<
void(::mce::framebuilder::bgfxbridge::EntityCreationContext
const&)>
const& insertCallback
386 virtual void queuePreFrameTask(::std::function<
void()>
const& task) = 0;
388 virtual ::LevelCullerType getLevelCullerType()
const = 0;
390 virtual ::LevelCullerType getShadowLevelCullerType()
const = 0;
392 virtual ::FrustumCullerType getFrustumCullerType()
const = 0;
394 virtual void clearRenderingResourcesCache() = 0;
396 virtual void updatePBRData(::mce::framebuilder::PBRTextureDataManager& pbrTextureDataManager) = 0;
398 virtual void updateTextureShiftData(::std::vector<::mce::TextureShiftBuffer>
const& shiftBuffers) = 0;
400 virtual bool shouldRenderPersistentUI(uint64 viewCount)
const = 0;
402 virtual bool shouldFlipTextureOrigin()
const = 0;
404 virtual uint getMaxVertexCount()
const = 0;
406 virtual void queueMaterialReload() = 0;
409 registerWindowHandle(::dragon::platform::SurfaceParameters
const&, ushort
const,
int const,
int const) = 0;
411 virtual void unregisterWindowHandle(ushort
const viewId) = 0;
413 virtual ::std::string getGraphicsCapabilitiesJsonString() = 0;
415 virtual bool hasGpuTimerSupport()
const = 0;
417 virtual ::mce::ClientResourcePointer<::dragon::ResolvedImageResource>
418 readBackTexture(::cg::ImageDescription
const& destinationImageDescription, ::std::string
const& name) = 0;
420 virtual ::mce::CheckedResourceService<::dragon::ResolvedTextureResource>* _getTextureResourceService() = 0;
422 virtual void _insert(
424 ::std::reference_wrapper<::mce::framebuilder::LightAmbientDescription const>,
425 ::std::reference_wrapper<::mce::framebuilder::LightDirectionalDescription const>,
426 ::std::reference_wrapper<::mce::framebuilder::gamecomponents::GameplayMetadata const>,
427 ::std::reference_wrapper<::mce::framebuilder::LightPointDescription const>,
428 ::std::reference_wrapper<::mce::framebuilder::ShadowAtlasFrameDescription const>,
429 ::std::reference_wrapper<::mce::framebuilder::gamecomponents::ServerGraphicsOverrideParameters const>,
430 ::std::reference_wrapper<::mce::framebuilder::VoxelVolumeDescription const>> description
433 virtual void _insert(
435 ::std::reference_wrapper<::mce::framebuilder::RenderEnvironmentalTextDescription const>,
436 ::std::reference_wrapper<::mce::framebuilder::RenderNametagDescription const>,
437 ::std::reference_wrapper<::mce::framebuilder::RenderMeshFallbackDescription const>,
438 ::std::reference_wrapper<::mce::framebuilder::RenderChunkGeometryDescription const>,
439 ::std::reference_wrapper<::mce::framebuilder::RenderChunkOccludersDescription const>,
440 ::std::reference_wrapper<::mce::framebuilder::RenderCrackDescription const>,
441 ::std::reference_wrapper<::mce::framebuilder::RenderItemInHandDescription const>,
442 ::std::reference_wrapper<::mce::framebuilder::RenderSkinnedMeshDescription const>,
443 ::std::reference_wrapper<::mce::framebuilder::RenderBlockSelectionOverlayBlockEntityDescription const>,
444 ::std::reference_wrapper<::mce::framebuilder::BlockChangesDescription const>,
445 ::std::reference_wrapper<::mce::framebuilder::RenderBatchActorDescription const>> description
448 virtual void _insert(
450 ::std::reference_wrapper<::mce::framebuilder::RenderAtmosphereDescription const>,
451 ::std::reference_wrapper<::mce::framebuilder::RenderCloudsDescription const>,
452 ::std::reference_wrapper<::mce::framebuilder::RenderCubemapDescription const>,
453 ::std::reference_wrapper<::mce::framebuilder::RenderEndSkyDescription const>,
454 ::std::reference_wrapper<::mce::framebuilder::RenderLegacyCubemapDescription const>,
455 ::std::reference_wrapper<::mce::framebuilder::RenderSkyDescription const>,
456 ::std::reference_wrapper<::mce::framebuilder::RenderStarsDescription const>,
457 ::std::reference_wrapper<::mce::framebuilder::RenderCelestialBodyDescription const>,
458 ::std::reference_wrapper<::mce::framebuilder::RenderVolumetricFogDescription const>,
459 ::std::reference_wrapper<::mce::framebuilder::RenderWeatherDescription const>,
460 ::std::reference_wrapper<::mce::framebuilder::SkyAmbientSamplesDescription const>> description
463 virtual void _insert(
465 ::std::reference_wrapper<::mce::framebuilder::RenderUIGamefaceDescription const>,
466 ::std::reference_wrapper<::mce::framebuilder::RenderUIHudIconDescription const>,
467 ::std::reference_wrapper<::mce::framebuilder::RenderUIMeshDescription const>,
468 ::std::reference_wrapper<::mce::framebuilder::RenderUITextDescription const>,
469 ::std::reference_wrapper<::mce::framebuilder::RenderUIImGuiDescription const>> description
472 virtual void _insert(
474 ::std::reference_wrapper<::mce::framebuilder::RenderFlameBillboardDescription const>,
475 ::std::reference_wrapper<::mce::framebuilder::BlitFlipbookTextureDescription const>,
476 ::std::reference_wrapper<::mce::framebuilder::RenderParticleDescription const>,
477 ::std::reference_wrapper<::mce::framebuilder::RenderPlayerVisionDescription const>,
478 ::std::reference_wrapper<::mce::framebuilder::RenderShadowDescription const>,
479 ::std::reference_wrapper<::mce::framebuilder::FadeToBlackDescription const>,
480 ::std::reference_wrapper<::mce::framebuilder::RenderCameraAimAssistHighlightDescription const>,
481 ::std::reference_wrapper<::mce::framebuilder::FullscreenEffectDescription const>,
482 ::std::reference_wrapper<::mce::framebuilder::gamecomponents::EditorHighlightConfiguration const>>
486 virtual void _insert(
488 ::std::reference_wrapper<::mce::framebuilder::RenderEditorBlockVolumeBoundingBoxDescription const>,
489 ::std::reference_wrapper<::mce::framebuilder::RenderEditorGizmoHandleArrowDescription const>,
490 ::std::reference_wrapper<::mce::framebuilder::RenderEditorGizmoHandleCubeDescription const>,
491 ::std::reference_wrapper<::mce::framebuilder::RenderEditorGizmoHandlePaneDescription const>,
492 ::std::reference_wrapper<::mce::framebuilder::RenderEditorSelectionCursorDescription const>,
493 ::std::reference_wrapper<::mce::framebuilder::RenderEditorBlockVolumeOutlineDescription const>,
494 ::std::reference_wrapper<::mce::framebuilder::RenderEditorRenderPlaneDescription const>> description
497 virtual void _initiateTDR() = 0;
Definition Scheduler.h:14
Definition WorkerPool.h:16
Definition ResolvedImageResource.h:7
Definition ResolvedMaterialResource.h:7
Definition ResolvedTextureResource.h:7
Definition MaterialResourceManager.h:7
Definition RayTracingFeatureConfiguration.h:7
Definition RayTracingResources.h:7
Definition DynamicResolutionController.h:7
Definition FrameBuilderContext.h:7
Definition FrameBuilder.h:18
Definition FrameBuilder.h:7
Definition PBRTextureDataManager.h:7
Definition RenderingFeatureConfiguration.h:7
Definition RangeIndices.h:5
Definition RenderChunkDirectIndexData.h:5
Definition RenderChunkDirectVertexData.h:5
Definition TerrainLayer.h:5
Definition ImageDescription.h:14
Definition ResolvedIndexBufferResource.h:7
Definition ResolvedShaderBufferResource.h:7
Definition ResolvedVertexBufferResource.h:7
Definition TextureDescription.h:7
Definition GLTextureWrapper.h:7
Definition SharedTextureHandle.h:7
Definition DragonTextureCacheContext.h:7
Definition ClientTexture.h:7
Definition TextureShiftBuffer.h:7
Definition VertexLayout.h:7
Definition ActiveShadowTileInfo.h:7
Definition BiomeBlendingData.h:7
Definition BlitFlipbookTextureDescription.h:7
Definition BlockChangesDescription.h:7
Definition BufferClearDescription.h:7
Definition CameraDescriptionOrthographic.h:7
Definition CameraDescriptionPerspective.h:7
Definition FadeToBlackDescription.h:7
Definition FrameBuilderInitDependencies.h:7
Definition FrameBuilder.h:16
Definition FrameLightingModelCapabilities.h:7
Definition FramePacingConfig.h:7
Definition FullscreenEffectDescription.h:7
Definition LightAmbientDescription.h:7
Definition LightDirectionalDescription.h:7
Definition LightPointDescription.h:7
Definition RenderAtmosphereDescription.h:7
Definition RenderBatchActorDescription.h:7
Definition RenderBlockSelectionOverlayBlockEntityDescription.h:7
Definition RenderCameraAimAssistHighlightDescription.h:7
Definition RenderCelestialBodyDescription.h:7
Definition RenderChunkGeometryDescription.h:7
Definition RenderChunkOccludersDescription.h:7
Definition RenderCloudsDescription.h:7
Definition RenderCrackDescription.h:7
Definition RenderCubemapDescription.h:7
Definition RenderEditorBlockVolumeBoundingBoxDescription.h:7
Definition RenderEditorBlockVolumeOutlineDescription.h:7
Definition RenderEditorGizmoHandleArrowDescription.h:7
Definition RenderEditorGizmoHandleCubeDescription.h:7
Definition RenderEditorGizmoHandlePaneDescription.h:7
Definition RenderEditorRenderPlaneDescription.h:7
Definition RenderEditorSelectionCursorDescription.h:7
Definition RenderEndSkyDescription.h:7
Definition RenderEnvironmentalTextDescription.h:7
Definition RenderFlameBillboardDescription.h:7
Definition RenderItemInHandDescription.h:7
Definition RenderLegacyCubemapDescription.h:7
Definition RenderMeshFallbackDescription.h:7
Definition RenderParticleDescription.h:7
Definition RenderPlayerVisionDescription.h:7
Definition RenderShadowDescription.h:7
Definition RenderSkinnedMeshDescription.h:7
Definition RenderSkyDescription.h:7
Definition RenderStarsDescription.h:7
Definition RenderUIGamefaceDescription.h:7
Definition RenderUIHudIconDescription.h:7
Definition RenderUIImGuiDescription.h:7
Definition RenderUIMeshDescription.h:7
Definition RenderUITextDescription.h:7
Definition RenderVolumetricFogDescription.h:7
Definition RenderWeatherDescription.h:7
Definition ShadowAtlasFrameDescription.h:7
Definition SkyAmbientSamplesDescription.h:7
Definition VoxelVolumeDescription.h:7
Definition EntityCreationContext.h:7
Definition EditorHighlightConfiguration.h:7
Definition ServerGraphicsOverrideParameters.h:7