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"
46namespace dragon::platform {
struct Statistics; }
126namespace mce::framebuilder {
128class FrameBuilder :
public ::Bedrock::EnableNonOwnerReferences {
141 ::ll::TypedStorage<8, 8, double> renderThreadDurationInSeconds;
142 ::ll::TypedStorage<8, 8, double> waitUntilCompletedDurationInSeconds;
143 ::ll::TypedStorage<8, 8, double> flipTimestampInMilliseconds;
151 virtual ~InitializationState() =
default;
155 using InitializationStatePointer = ::std::shared_ptr<::mce::framebuilder::FrameBuilder::InitializationState>;
157 using LayerRanges = ::std::function<::RangeIndices(::TerrainLayer
const&, ::TerrainLayerLOD)>;
159 using IndexData = ::std::variant<::gsl::span<ushort const>, ::gsl::span<uint const>>;
164 virtual ~FrameBuilder() =
default;
166 virtual bool enabled()
const = 0;
168 virtual ::std::optional<::dragon::platform::Statistics> getStatistics() = 0;
170 virtual ::std::optional<::dragon::platform::Statistics> getPreviousFrameStatistics()
const = 0;
172 virtual double getAverageGPUTime()
const = 0;
174 virtual void resetGPUTimeData() = 0;
176 virtual bool supportsRenderFeature(::mce::RenderFeature
const feature)
const = 0;
178 virtual ::mce::framebuilder::FrameBuilder::FrameTimings getLastFrameTimings()
const = 0;
180 virtual ::std::weak_ptr<::mce::framebuilder::DynamicResolutionController> getDynamicResolutionController() = 0;
182 virtual bool isDeviceRemoved();
184 virtual ::std::optional<::std::shared_ptr<::mce::framebuilder::FrameBuilder::InitializationState>>
185 init(::mce::framebuilder::FrameBuilderInitDependencies&& deps) = 0;
187 virtual ::std::optional<::std::shared_ptr<::mce::framebuilder::FrameBuilder::InitializationState>>
188 continueInit(::std::shared_ptr<::mce::framebuilder::FrameBuilder::InitializationState> state) = 0;
190 virtual bool initialized()
const = 0;
192 virtual void destroy() = 0;
194 virtual void initializePipelineDiskCache(::Core::PathView directory);
196 virtual void loadCoreAssets(
197 ::Core::PathBuffer<::std::string>
const& dataDirectory,
198 ::std::function<::std::string(::std::string
const&, ::std::string
const&)> loadFileDataCallback
201 virtual ::mce::framebuilder::AsyncLoadResult loadAsyncAssets() = 0;
203 virtual void startFrame() = 0;
205 virtual void endFrame(::mce::framebuilder::FrameBuilderContext&& frameBuilderContext) = 0;
207 virtual void discardFrame(
bool wait) = 0;
209 virtual void setTerrainAtlasTexture(::mce::ClientTexture
const& texture) = 0;
211 virtual float getTargetFrameTime()
const = 0;
213 virtual ::mce::framebuilder::FramePacingConfig getFramePacingConfig()
const = 0;
215 virtual void setFramePacingConfig(::mce::framebuilder::FramePacingConfig
const& config) = 0;
217 virtual void setDefaultActorMERSUniforms(
218 float const metalnessUniform,
219 float const emissiveUniform,
220 float const roughnessUniform,
221 float const subsurfaceUniform
224 virtual void setDefaultParticleMERSUniforms(
225 float const metalnessUniform,
226 float const emissiveUniform,
227 float const roughnessUniform,
228 float const subsurfaceUniform
231 virtual void setBiomeBlendingData(::mce::framebuilder::BiomeBlendingData
const& biomeBlendingData) = 0;
233 virtual void setActiveShadowTiles(::std::vector<::mce::framebuilder::ActiveShadowTileInfo>
const& activeTiles) = 0;
235 virtual void updateSurfaceParameters(::dragon::platform::SurfaceParameters
const& surfaceParams) = 0;
237 virtual void updateWindowSize(uint
const width, uint
const height) = 0;
239 virtual void updateClientViewSize(::glm::vec2
const& clientViewSize) = 0;
241 virtual bool updateMsaaLevel(uchar
const level) = 0;
243 virtual void updateFrameRateLimit(::std::optional<int>
const frameRate) = 0;
245 virtual void updateVSync(::dragon::platform::VerticalSync verticalSync) = 0;
247 virtual void updateFramePacing(
bool enabled) = 0;
249 virtual bool enableDynamicTextureHandles() = 0;
251 virtual void setDebugMode(::dragon::platform::DebugModeFlags debugFlags) = 0;
253 virtual void suspend() = 0;
255 virtual void resume() = 0;
257 virtual ::dragon::tasks::DeferredResult<::dragon::rendering::SharedTextureHandle> createExternalTexture(
258 ::std::optional<::std::variant<::std::monostate, ::dragon::platform::GLTextureWrapper>> nativeTexture
261 virtual void updateExternalTexture(
262 ::dragon::tasks::DeferredResult<::dragon::rendering::SharedTextureHandle> texture,
263 ::std::optional<::std::variant<::std::monostate, ::dragon::platform::GLTextureWrapper>> nativeTexture,
264 ::std::function<
void(::dragon::rendering::SharedTextureHandle)> rendererCallbackUpdateDelegate
267 virtual ::mce::ServerResourcePointer<::dragon::ResolvedTextureResource> wrapExternalTexture(
268 ::dragon::platform::RenderAPI api,
269 ::dragon::TextureDescription
const& desc,
270 void* externalTexture
273 virtual void createRenderChunk(::dragon::RenderMetadata
const& renderMetadata) = 0;
275 virtual void destroyRenderChunk(::dragon::RenderMetadata
const& renderMetadata) = 0;
277 virtual void generateRenderChunkVertexData(
278 ::RenderChunkDirectVertexData& renderChunkDirectVertexData,
279 ::std::function<::RangeIndices(::TerrainLayer
const&, ::TerrainLayerLOD)> layerRanges,
280 ::gsl::span<uchar const>
const& chunkData,
281 uint64
const& vertexCount,
282 ::mce::VertexLayout
const& mceLayout,
283 int const* absoluteBlockPosition
286 virtual void generateRenderChunkVertexData(
287 ::dragon::streampacking::PackedStreamsGPU& outPackedStreams,
288 ::dragon::streampacking::StreamPackingPlan
const& plan,
289 ::dragon::streampacking::PackedBuffers&& packedBuffers
292 virtual void generateRenderChunkIndexData(
293 ::RenderChunkDirectIndexData& renderChunkDirectIndexData,
294 ::std::function<::RangeIndices(::TerrainLayer
const&, ::TerrainLayerLOD)> layerRanges,
295 ::gsl::span<uchar const>
const& indexData,
296 ::dragon::mesh::IndexSize
const indexSize
299 virtual void generateRenderChunkIndexData(
300 ::mce::ServerResourcePointer<::dragon::ResolvedIndexBufferResource>& outIndexBuffer,
301 ::std::variant<::gsl::span<ushort const>, ::gsl::span<uint const>>
const& indexData
304 virtual void generateRenderChunkAdditionalVertexData(
305 ::RenderChunkDirectVertexData& renderChunkDirectVertexData,
306 ::gsl::span<uchar const>
const& additionalData,
307 uint64
const& vertexCount,
308 ::mce::VertexFormat
const& additionalDataFormat
311 virtual void freeRenderChunkVertexData(::RenderChunkDirectVertexData& renderChunkDirectVertexData) = 0;
313 virtual void freeRenderChunkIndexData(::RenderChunkDirectIndexData& renderChunkDirectIndexData) = 0;
315 virtual void debugPrintToScreen(::std::function<
void(
char const*)> printFunction) = 0;
317 virtual void debugDeclareSceneCamera(
318 ::mce::framebuilder::CameraDescriptionPerspective
const& cameraDescription,
319 ::mce::framebuilder::BufferClearDescription
const& bufferClearDescription
322 virtual void debugDeclareSceneCamera(
323 ::mce::framebuilder::CameraDescriptionOrthographic
const& cameraDescription,
324 ::mce::framebuilder::BufferClearDescription
const& bufferClearDescription
327 virtual ::glm::vec3 getSunDir()
const = 0;
329 virtual void setSunDir(::glm::vec3
const& sunDir) = 0;
331 virtual ::dragon::rendering::ClipSpaceDepthMode getClipSpace()
const = 0;
333 virtual ::mce::CheckedResourceService<::dragon::ResolvedVertexBufferResource>* getVertexBufferResourceService() = 0;
335 virtual ::mce::CheckedResourceService<::dragon::ResolvedIndexBufferResource>* getIndexBufferResourceService() = 0;
337 virtual ::mce::CheckedResourceService<::dragon::ResolvedShaderBufferResource>* getShaderBufferResourceService() = 0;
339 virtual ::mce::CheckedResourceService<::dragon::ResolvedMaterialResource>* getMaterialResourceService() = 0;
342 initializeTextureCache(::gsl::not_null<::WorkerPool*> workerPool, ::gsl::not_null<::Scheduler*> scheduler) = 0;
344 virtual void initializeTextureStreamer() = 0;
346 virtual bool isTextureStreamingEnabled()
const = 0;
348 virtual ::std::shared_ptr<
349 ::dragon::texturestreaming::TextureCache<::dragon::texturestreaming::DragonTextureCacheContext>>
350 getTextureCache() = 0;
352 virtual ::dragon::texturestreaming::unimplemented::DebugPolicy::TextureStreamingDebugControl
353 getTextureStreamingDebugControl() = 0;
355 virtual ::dragon::materials::MaterialResourceManager* getMaterialResourceManager() = 0;
357 virtual ::mce::framebuilder::FrameLightingModelCapabilities getFrameLightingModelCapabilities()
const = 0;
359 virtual bool isRayTracingCapable()
const = 0;
361 virtual bool isRayTracingEnabled()
const = 0;
363 virtual bool isDeferredEnabled()
const = 0;
365 virtual bool isVSyncEnabled_DEPRECATED()
const = 0;
367 virtual bool isFrameDiscardWhileRenderingCapable()
const = 0;
369 virtual bool isFrameDiscardWhileRenderingEnabled()
const = 0;
371 virtual ::std::shared_ptr<::dragon::rendering::RayTracingResources>
const getRayTracingResources()
const = 0;
373 virtual ::std::shared_ptr<::dragon::rendering::RayTracingResources> getRayTracingResources() = 0;
375 virtual ::std::shared_ptr<::dragon::rendering::RayTracingFeatureConfiguration>
const
376 getRayTracingFeatureConfiguration()
const = 0;
378 virtual ::std::shared_ptr<::dragon::rendering::RayTracingFeatureConfiguration>
379 getRayTracingFeatureConfiguration() = 0;
381 virtual ::std::shared_ptr<::mce::framebuilder::RenderingFeatureConfiguration>
const
382 getRenderingFeatureConfiguration()
const = 0;
384 virtual ::std::shared_ptr<::mce::framebuilder::RenderingFeatureConfiguration>
385 getRenderingFeatureConfiguration() = 0;
387 virtual void setLightingModel(::dragon::rendering::LightingModels lightingModel,
bool& modified) = 0;
389 virtual ::glm::vec<2, ushort> getRenderResolution()
const = 0;
391 virtual ::std::vector<::dragon::platform::RenderAPI> getSupportedRenderers()
const = 0;
393 virtual bool isUpscalingAvailable()
const = 0;
395 virtual void setUpscaling(
bool upscale) = 0;
397 virtual bool isUpscalingEnabled()
const = 0;
399 virtual float getUpscalingFactor()
const = 0;
401 virtual ::std::string_view
const getUpscalingInfo()
const = 0;
404 ::std::function<
void(::mce::framebuilder::bgfxbridge::EntityCreationContext
const&)>
const& insertCallback
407 virtual void queuePreFrameTask(::std::function<
void()>
const& task) = 0;
409 virtual ::LevelCullerType getLevelCullerType()
const = 0;
411 virtual ::LevelCullerType getShadowLevelCullerType()
const = 0;
413 virtual ::FrustumCullerType getFrustumCullerType()
const = 0;
415 virtual void clearRenderingResourcesCache() = 0;
417 virtual void updatePBRData(::mce::framebuilder::PBRTextureDataManager& pbrTextureDataManager) = 0;
419 virtual void updateTextureShiftData(::std::vector<::mce::TextureShiftBuffer>
const& shiftBuffers) = 0;
421 virtual bool shouldRenderPersistentUI(uint64 viewCount)
const = 0;
423 virtual bool shouldFlipTextureOrigin()
const = 0;
425 virtual uint getMaxVertexCount()
const = 0;
427 virtual uint getMaxVertexStreams()
const = 0;
429 virtual void queueMaterialReload() = 0;
432 registerWindowHandle(::dragon::platform::SurfaceParameters
const&, ushort
const,
int const,
int const) = 0;
434 virtual void unregisterWindowHandle(ushort
const viewId) = 0;
436 virtual ::std::string getGraphicsCapabilitiesJsonString() = 0;
438 virtual bool hasGpuTimerSupport()
const = 0;
440 virtual ::mce::ClientResourcePointer<::dragon::ResolvedImageResource>
441 readBackTexture(::cg::ImageDescription
const& destinationImageDescription, ::std::string
const& name) = 0;
443 virtual ::mce::CheckedResourceService<::dragon::ResolvedTextureResource>* _getTextureResourceService() = 0;
445 virtual void _insert(
447 ::std::reference_wrapper<::mce::framebuilder::LightAmbientDescription const>,
448 ::std::reference_wrapper<::mce::framebuilder::LightDirectionalDescription const>,
449 ::std::reference_wrapper<::mce::framebuilder::gamecomponents::GameplayMetadata const>,
450 ::std::reference_wrapper<::mce::framebuilder::LightPointDescription const>,
451 ::std::reference_wrapper<::mce::framebuilder::ShadowAtlasFrameDescription const>,
452 ::std::reference_wrapper<::mce::framebuilder::gamecomponents::ServerGraphicsOverrideParameters const>,
453 ::std::reference_wrapper<::mce::framebuilder::VoxelVolumeDescription const>,
454 ::std::reference_wrapper<::mce::framebuilder::TransitioningVoxelVolumeDescription const>> description
457 virtual void _insert(
459 ::std::reference_wrapper<::mce::framebuilder::RenderEnvironmentalTextDescription const>,
460 ::std::reference_wrapper<::mce::framebuilder::RenderNametagDescription const>,
461 ::std::reference_wrapper<::mce::framebuilder::RenderMeshFallbackDescription const>,
462 ::std::reference_wrapper<::mce::framebuilder::RenderChunkGeometryDescription const>,
463 ::std::reference_wrapper<::mce::framebuilder::RenderChunkOccludersDescription const>,
464 ::std::reference_wrapper<::mce::framebuilder::RenderCrackDescription const>,
465 ::std::reference_wrapper<::mce::framebuilder::RenderItemInHandDescription const>,
466 ::std::reference_wrapper<::mce::framebuilder::RenderSkinnedMeshDescription const>,
467 ::std::reference_wrapper<::mce::framebuilder::RenderBlockSelectionOverlayBlockEntityDescription const>,
468 ::std::reference_wrapper<::mce::framebuilder::BlockChangesDescription const>,
469 ::std::reference_wrapper<::mce::framebuilder::RenderBatchActorDescription const>> description
472 virtual void _insert(
474 ::std::reference_wrapper<::mce::framebuilder::RenderAtmosphereDescription const>,
475 ::std::reference_wrapper<::mce::framebuilder::RenderCloudsDescription const>,
476 ::std::reference_wrapper<::mce::framebuilder::RenderCubemapDescription const>,
477 ::std::reference_wrapper<::mce::framebuilder::RenderEndSkyDescription const>,
478 ::std::reference_wrapper<::mce::framebuilder::RenderLegacyCubemapDescription const>,
479 ::std::reference_wrapper<::mce::framebuilder::RenderSkyDescription const>,
480 ::std::reference_wrapper<::mce::framebuilder::RenderStarsDescription const>,
481 ::std::reference_wrapper<::mce::framebuilder::RenderCelestialBodyDescription const>,
482 ::std::reference_wrapper<::mce::framebuilder::RenderVolumetricFogDescription const>,
483 ::std::reference_wrapper<::mce::framebuilder::RenderWeatherDescription const>,
484 ::std::reference_wrapper<::mce::framebuilder::SkyAmbientSamplesDescription const>> description
487 virtual void _insert(
489 ::std::reference_wrapper<::mce::framebuilder::RenderUIGamefaceDescription const>,
490 ::std::reference_wrapper<::mce::framebuilder::RenderUIHudIconDescription const>,
491 ::std::reference_wrapper<::mce::framebuilder::RenderUIMeshDescription const>,
492 ::std::reference_wrapper<::mce::framebuilder::RenderUITextDescription const>,
493 ::std::reference_wrapper<::mce::framebuilder::RenderUIImGuiDescription const>> description
496 virtual void _insert(
498 ::std::reference_wrapper<::mce::framebuilder::RenderFlameBillboardDescription const>,
499 ::std::reference_wrapper<::mce::framebuilder::BlitFlipbookTextureDescription const>,
500 ::std::reference_wrapper<::mce::framebuilder::RenderParticleDescription const>,
501 ::std::reference_wrapper<::mce::framebuilder::RenderPlayerVisionDescription const>,
502 ::std::reference_wrapper<::mce::framebuilder::RenderShadowDescription const>,
503 ::std::reference_wrapper<::mce::framebuilder::FadeToBlackDescription const>,
504 ::std::reference_wrapper<::mce::framebuilder::RenderCameraAimAssistHighlightDescription const>,
505 ::std::reference_wrapper<::mce::framebuilder::FullscreenEffectDescription const>,
506 ::std::reference_wrapper<::mce::framebuilder::gamecomponents::EditorHighlightConfiguration const>>
510 virtual void _insert(
512 ::std::reference_wrapper<::mce::framebuilder::RenderEditorBlockVolumeBoundingBoxDescription const>,
513 ::std::reference_wrapper<::mce::framebuilder::RenderEditorGizmoHandleArrowDescription const>,
514 ::std::reference_wrapper<::mce::framebuilder::RenderEditorGizmoHandleCubeDescription const>,
515 ::std::reference_wrapper<::mce::framebuilder::RenderEditorGizmoHandlePaneDescription const>,
516 ::std::reference_wrapper<::mce::framebuilder::RenderEditorGizmoHandleRingDescription const>,
517 ::std::reference_wrapper<::mce::framebuilder::RenderEditorSelectionCursorDescription const>,
518 ::std::reference_wrapper<::mce::framebuilder::RenderEditorBlockVolumeOutlineDescription const>,
519 ::std::reference_wrapper<::mce::framebuilder::RenderEditorRenderPlaneDescription const>> description
522 virtual void _initiateTDR() = 0;
Definition Scheduler.h:15
Definition WorkerPool.h:22
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 StreamPackingPlan.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 PackedBuffers.h:7
Definition PackedStreamsGPU.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 RenderEditorGizmoHandleRingDescription.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 TransitioningVoxelVolumeDescription.h:7
Definition VoxelVolumeDescription.h:7
Definition EntityCreationContext.h:7
Definition EditorHighlightConfiguration.h:7
Definition ServerGraphicsOverrideParameters.h:7