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/renderer/hal/enums/RenderFeature.h"
14#include "mc/external/render_dragon/mesh/IndexSize.h"
15#include "mc/external/render_dragon/platform/DebugModeFlags.h"
16#include "mc/external/render_dragon/platform/RenderAPI.h"
17#include "mc/external/render_dragon/platform/VerticalSync.h"
18#include "mc/external/render_dragon/rendering/ClipSpaceDepthMode.h"
19#include "mc/external/render_dragon/rendering/LightingModels.h"
20#include "mc/external/render_dragon/resources/ServerResourcePointer.h"
21#include "mc/external/render_dragon/tasks/DeferredResult.h"
22#include "mc/external/render_dragon/texture_streaming/texture_cache/TextureCache.h"
40namespace dragon::platform {
struct Statistics; }
109namespace mce::framebuilder {
111class FrameBuilder :
public ::Bedrock::EnableNonOwnerReferences {
124 ::ll::TypedStorage<8, 8, double> renderThreadDurationInSeconds;
125 ::ll::TypedStorage<8, 8, double> waitUntilCompletedDurationInSeconds;
126 ::ll::TypedStorage<8, 8, double> flipTimestampInMilliseconds;
134 virtual ~InitializationState() =
default;
138 using InitializationStatePointer = ::std::shared_ptr<::mce::framebuilder::FrameBuilder::InitializationState>;
143 virtual ~FrameBuilder() =
default;
145 virtual bool enabled()
const = 0;
147 virtual ::std::optional<::dragon::platform::Statistics> getStatistics() = 0;
149 virtual double getAverageGPUTime()
const = 0;
151 virtual void resetGPUTimeData() = 0;
153 virtual bool supportsRenderFeature(::mce::RenderFeature
const feature)
const = 0;
155 virtual ::mce::framebuilder::FrameBuilder::FrameTimings getLastFrameTimings()
const = 0;
157 virtual ::std::weak_ptr<::mce::framebuilder::DynamicResolutionController> getDynamicResolutionController() = 0;
159 virtual bool isDeviceRemoved();
161 virtual ::std::optional<::std::shared_ptr<::mce::framebuilder::FrameBuilder::InitializationState>>
162 init(::mce::framebuilder::FrameBuilderInitDependencies&& deps) = 0;
164 virtual ::std::optional<::std::shared_ptr<::mce::framebuilder::FrameBuilder::InitializationState>>
165 continueInit(::std::shared_ptr<::mce::framebuilder::FrameBuilder::InitializationState> state) = 0;
167 virtual bool initialized()
const = 0;
169 virtual void destroy() = 0;
171 virtual void loadCoreAssets(
172 ::Core::PathBuffer<::std::string>
const& dataDirectory,
173 ::std::function<::std::string(::std::string
const&, ::std::string
const&)> loadFileDataCallback
176 virtual ::mce::framebuilder::AsyncLoadResult loadAsyncAssets() = 0;
178 virtual void startFrame() = 0;
180 virtual void endFrame(::mce::framebuilder::FrameBuilderContext&& frameBuilderContext) = 0;
182 virtual void discardFrame(
bool wait) = 0;
184 virtual void setTerrainAtlasTexture(::mce::ClientTexture
const& texture) = 0;
186 virtual void setDefaultActorMERSUniforms(
187 float const metalnessUniform,
188 float const emissiveUniform,
189 float const roughnessUniform,
190 float const subsurfaceUniform
193 virtual void setDefaultParticleMERSUniforms(
194 float const metalnessUniform,
195 float const emissiveUniform,
196 float const roughnessUniform,
197 float const subsurfaceUniform
200 virtual void setBiomeBlendingData(::mce::framebuilder::BiomeBlendingData
const& biomeBlendingData) = 0;
202 virtual void updateSurfaceParameters(::std::variant<::HWND__*, ::std::monostate>
const& surfaceParams) = 0;
204 virtual void updateWindowSize(uint
const width, uint
const height) = 0;
206 virtual void updateClientViewSize(::glm::vec2
const& clientViewSize) = 0;
208 virtual bool updateMsaaLevel(uchar
const level) = 0;
210 virtual void updateFrameRateLimit(::std::optional<int>
const frameRate) = 0;
212 virtual void updateVSync(::dragon::platform::VerticalSync verticalSync) = 0;
214 virtual void updateFramePacing(
bool enabled) = 0;
216 virtual bool enableDynamicTextureHandles() = 0;
218 virtual void setDebugMode(::dragon::platform::DebugModeFlags debugFlags) = 0;
220 virtual void suspend() = 0;
222 virtual void resume() = 0;
224 virtual ::dragon::tasks::DeferredResult<::dragon::rendering::SharedTextureHandle> createExternalTexture(
225 ::std::optional<::std::variant<::std::monostate, ::dragon::platform::GLTextureWrapper>> nativeTexture
228 virtual void updateExternalTexture(
229 ::dragon::tasks::DeferredResult<::dragon::rendering::SharedTextureHandle> texture,
230 ::std::optional<::std::variant<::std::monostate, ::dragon::platform::GLTextureWrapper>> nativeTexture,
231 ::std::function<
void(::dragon::rendering::SharedTextureHandle)> rendererCallbackUpdateDelegate
234 virtual ::mce::ServerResourcePointer<::dragon::ResolvedTextureResource> wrapExternalTexture(
235 ::dragon::platform::RenderAPI api,
236 ::dragon::TextureDescription
const& desc,
237 void* externalTexture
240 virtual void createRenderChunk(::dragon::RenderMetadata
const& renderMetadata) = 0;
242 virtual void destroyRenderChunk(::dragon::RenderMetadata
const& renderMetadata) = 0;
244 virtual void generateRenderChunkVertexData(
245 ::RenderChunkDirectVertexData& renderChunkDirectVertexData,
246 ::std::array<::RangeIndices, 24>
const& layerRanges,
247 ::gsl::span<uchar const>
const& chunkData,
248 uint64
const& vertexCount,
249 ::mce::VertexLayout
const& mceLayout,
250 int const* absoluteBlockPosition
253 virtual void generateRenderChunkIndexData(
254 ::RenderChunkDirectIndexData& renderChunkDirectIndexData,
255 ::std::array<::RangeIndices, 24>
const& layerRanges,
256 ::gsl::span<uchar const>
const& indexData,
257 ::dragon::mesh::IndexSize
const indexSize
260 virtual void freeRenderChunkVertexData(::RenderChunkDirectVertexData& renderChunkDirectVertexData) = 0;
262 virtual void freeRenderChunkIndexData(::RenderChunkDirectIndexData& renderChunkDirectIndexData) = 0;
264 virtual void debugPrintToScreen(::std::function<
void(
char const*)> printFunction) = 0;
266 virtual void debugDeclareSceneCamera(
267 ::mce::framebuilder::CameraDescriptionPerspective
const& cameraDescription,
268 ::mce::framebuilder::BufferClearDescription
const& bufferClearDescription
271 virtual void debugDeclareSceneCamera(
272 ::mce::framebuilder::CameraDescriptionOrthographic
const& cameraDescription,
273 ::mce::framebuilder::BufferClearDescription
const& bufferClearDescription
276 virtual ::glm::vec3 getSunDir()
const = 0;
278 virtual void setSunDir(::glm::vec3
const& sunDir) = 0;
280 virtual ::dragon::rendering::ClipSpaceDepthMode getClipSpace()
const = 0;
282 virtual ::mce::CheckedResourceService<::dragon::ResolvedVertexBufferResource>* getVertexBufferResourceService() = 0;
284 virtual ::mce::CheckedResourceService<::dragon::ResolvedIndexBufferResource>* getIndexBufferResourceService() = 0;
286 virtual ::mce::CheckedResourceService<::dragon::ResolvedShaderBufferResource>* getShaderBufferResourceService() = 0;
288 virtual ::mce::CheckedResourceService<::dragon::ResolvedMaterialResource>* getMaterialResourceService() = 0;
290 virtual void initializeTextureCache() = 0;
292 virtual void initializeTextureStreamer() = 0;
294 virtual bool isTextureStreamingEnabled()
const = 0;
296 virtual ::std::shared_ptr<
297 ::dragon::texturestreaming::TextureCache<::dragon::texturestreaming::DragonTextureCacheContext>>
298 getTextureCache() = 0;
300 virtual ::std::monostate getTextureStreamingDebugControl() = 0;
302 virtual ::dragon::materials::MaterialResourceManager* getMaterialResourceManager() = 0;
304 virtual ::mce::framebuilder::FrameLightingModelCapabilities getFrameLightingModelCapabilities()
const = 0;
306 virtual bool isRayTracingCapable()
const = 0;
308 virtual bool isRayTracingEnabled()
const = 0;
310 virtual bool isDeferredCapable()
const = 0;
312 virtual bool isDeferredEnabled()
const = 0;
314 virtual bool isVSyncEnabled_DEPRECATED()
const = 0;
316 virtual bool isFrameDiscardWhileRenderingCapable()
const = 0;
318 virtual bool isFrameDiscardWhileRenderingEnabled()
const = 0;
320 virtual ::std::shared_ptr<::dragon::rendering::RayTracingResources>
const getRayTracingResources()
const = 0;
322 virtual ::std::shared_ptr<::dragon::rendering::RayTracingResources> getRayTracingResources() = 0;
324 virtual ::std::shared_ptr<::dragon::rendering::RayTracingFeatureConfiguration>
const
325 getRayTracingFeatureConfiguration()
const = 0;
327 virtual ::std::shared_ptr<::dragon::rendering::RayTracingFeatureConfiguration>
328 getRayTracingFeatureConfiguration() = 0;
330 virtual ::std::shared_ptr<::mce::framebuilder::RenderingFeatureConfiguration>
const
331 getRenderingFeatureConfiguration()
const = 0;
333 virtual ::std::shared_ptr<::mce::framebuilder::RenderingFeatureConfiguration>
334 getRenderingFeatureConfiguration() = 0;
336 virtual void setLightingModel(::dragon::rendering::LightingModels lightingModel,
bool& modified) = 0;
338 virtual ::glm::vec<2, ushort> getRenderResolution()
const = 0;
340 virtual ::std::vector<::dragon::platform::RenderAPI> getSupportedRenderers()
const = 0;
342 virtual bool isUpscalingAvailable()
const = 0;
344 virtual void setUpscaling(
bool upscale) = 0;
346 virtual bool isUpscalingEnabled()
const = 0;
348 virtual float getUpscalingFactor()
const = 0;
350 virtual ::std::string_view
const getUpscalingInfo()
const = 0;
353 ::std::function<
void(::mce::framebuilder::bgfxbridge::EntityCreationContext
const&)>
const& insertCallback
356 virtual void queuePreFrameTask(::std::function<
void()>
const& task) = 0;
358 virtual ::LevelCullerType getLevelCullerType()
const = 0;
360 virtual ::LevelCullerType getShadowLevelCullerType()
const = 0;
362 virtual ::FrustumCullerType getFrustumCullerType()
const = 0;
364 virtual void clearRenderingResourcesCache() = 0;
366 virtual void updatePBRData(::mce::framebuilder::PBRTextureDataManager& pbrTextureDataManager) = 0;
368 virtual void updateTextureShiftData(::std::vector<::mce::TextureShiftBuffer>
const& shiftBuffers) = 0;
370 virtual bool shouldRenderPersistentUI(uint64 viewCount)
const = 0;
372 virtual bool shouldFlipTextureOrigin()
const = 0;
374 virtual uint getMaxVertexCount()
const = 0;
376 virtual void queueMaterialReload() = 0;
378 virtual void registerWindowHandle(
379 ::std::variant<::HWND__*, ::std::monostate>
const& windowHandle,
385 virtual void unregisterWindowHandle(ushort
const viewId) = 0;
387 virtual ::std::string getGraphicsCapabilitiesJsonString() = 0;
389 virtual bool hasGpuTimerSupport()
const = 0;
391 virtual ::mce::ClientResourcePointer<::dragon::ResolvedImageResource>
392 readBackTexture(::cg::ImageDescription
const& destinationImageDescription, ::std::string
const& name) = 0;
394 virtual ::mce::CheckedResourceService<::dragon::ResolvedTextureResource>* _getTextureResourceService() = 0;
396 virtual void _insert(
398 ::std::reference_wrapper<::mce::framebuilder::LightAmbientDescription const>,
399 ::std::reference_wrapper<::mce::framebuilder::LightDirectionalDescription const>,
400 ::std::reference_wrapper<::mce::framebuilder::gamecomponents::GameplayMetadata const>,
401 ::std::reference_wrapper<::mce::framebuilder::LightPointDescription const>,
402 ::std::reference_wrapper<::mce::framebuilder::ShadowProbeDescription const>,
403 ::std::reference_wrapper<::mce::framebuilder::gamecomponents::ServerGraphicsOverrideParameters const>,
404 ::std::reference_wrapper<::mce::framebuilder::VoxelVolumeDescription const>> description
407 virtual void _insert(
409 ::std::reference_wrapper<::mce::framebuilder::RenderEnvironmentalTextDescription const>,
410 ::std::reference_wrapper<::mce::framebuilder::RenderMeshFallbackDescription const>,
411 ::std::reference_wrapper<::mce::framebuilder::RenderChunkGeometryDescription const>,
412 ::std::reference_wrapper<::mce::framebuilder::RenderChunkOccludersDescription const>,
413 ::std::reference_wrapper<::mce::framebuilder::RenderCrackDescription const>,
414 ::std::reference_wrapper<::mce::framebuilder::RenderItemInHandDescription const>,
415 ::std::reference_wrapper<::mce::framebuilder::RenderSkinnedMeshDescription const>,
416 ::std::reference_wrapper<::mce::framebuilder::RenderBlockSelectionOverlayBlockEntityDescription const>,
417 ::std::reference_wrapper<::mce::framebuilder::BlockChangesDescription const>,
418 ::std::reference_wrapper<::mce::framebuilder::RenderBatchActorDescription const>> description
421 virtual void _insert(
423 ::std::reference_wrapper<::mce::framebuilder::RenderAtmosphereDescription const>,
424 ::std::reference_wrapper<::mce::framebuilder::RenderCloudsDescription const>,
425 ::std::reference_wrapper<::mce::framebuilder::RenderCubemapDescription const>,
426 ::std::reference_wrapper<::mce::framebuilder::RenderEndSkyDescription const>,
427 ::std::reference_wrapper<::mce::framebuilder::RenderLegacyCubemapDescription const>,
428 ::std::reference_wrapper<::mce::framebuilder::RenderSkyDescription const>,
429 ::std::reference_wrapper<::mce::framebuilder::RenderStarsDescription const>,
430 ::std::reference_wrapper<::mce::framebuilder::RenderCelestialBodyDescription const>,
431 ::std::reference_wrapper<::mce::framebuilder::RenderVolumetricFogDescription const>,
432 ::std::reference_wrapper<::mce::framebuilder::RenderWeatherDescription const>,
433 ::std::reference_wrapper<::mce::framebuilder::SkyAmbientSamplesDescription const>> description
436 virtual void _insert(
438 ::std::reference_wrapper<::mce::framebuilder::RenderUIGamefaceDescription const>,
439 ::std::reference_wrapper<::mce::framebuilder::RenderUIHudIconDescription const>,
440 ::std::reference_wrapper<::mce::framebuilder::RenderUIMeshDescription const>,
441 ::std::reference_wrapper<::mce::framebuilder::RenderUITextDescription const>,
442 ::std::reference_wrapper<::mce::framebuilder::RenderUIImGuiDescription const>> description
445 virtual void _insert(
447 ::std::reference_wrapper<::mce::framebuilder::RenderFlameBillboardDescription const>,
448 ::std::reference_wrapper<::mce::framebuilder::BlitFlipbookTextureDescription const>,
449 ::std::reference_wrapper<::mce::framebuilder::RenderParticleDescription const>,
450 ::std::reference_wrapper<::mce::framebuilder::RenderPlayerVisionDescription const>,
451 ::std::reference_wrapper<::mce::framebuilder::RenderShadowDescription const>,
452 ::std::reference_wrapper<::mce::framebuilder::FadeToBlackDescription const>,
453 ::std::reference_wrapper<::mce::framebuilder::RenderCameraAimAssistHighlightDescription const>,
454 ::std::reference_wrapper<::mce::framebuilder::FullscreenEffectDescription const>,
455 ::std::reference_wrapper<::mce::framebuilder::gamecomponents::EditorHighlightConfiguration const>>
459 virtual void _insert(
461 ::std::reference_wrapper<::mce::framebuilder::RenderEditorBlockVolumeBoundingBoxDescription const>,
462 ::std::reference_wrapper<::mce::framebuilder::RenderEditorGizmoHandleArrowDescription const>,
463 ::std::reference_wrapper<::mce::framebuilder::RenderEditorGizmoHandleCubeDescription const>,
464 ::std::reference_wrapper<::mce::framebuilder::RenderEditorGizmoHandlePaneDescription const>,
465 ::std::reference_wrapper<::mce::framebuilder::RenderEditorSelectionCursorDescription const>,
466 ::std::reference_wrapper<::mce::framebuilder::RenderEditorBlockVolumeOutlineDescription const>> description
469 virtual void _initiateTDR() = 0;
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 ImageDescription.h:20
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 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 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 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 ShadowProbeDescription.h:7
Definition SkyAmbientSamplesDescription.h:7
Definition VoxelVolumeDescription.h:7
Definition EntityCreationContext.h:7
Definition EditorHighlightConfiguration.h:7
Definition ServerGraphicsOverrideParameters.h:7