3#include "mc/_HeaderOutputPredefine.h"
6#include "mc/client/gui/oreui/interface/IRenderingBackend.h"
7#include "mc/deps/core/checked_resource_service/ClientResourcePointer.h"
8#include "mc/deps/core/utility/NonOwnerPointer.h"
9#include "mc/deps/minecraft_renderer/framebuilder/GamefaceBatchDraw.h"
10#include "mc/deps/minecraft_renderer/framebuilder/GamefacePipelineState.h"
11#include "mc/deps/minecraft_renderer/resources/ClientTexture.h"
12#include "mc/external/gameface/renoir/CBType.h"
13#include "mc/external/gameface/renoir/ConstantBufferObject.h"
14#include "mc/external/gameface/renoir/DepthStencilTextureObject.h"
15#include "mc/external/gameface/renoir/IndexBufferObject.h"
16#include "mc/external/gameface/renoir/IndexBufferType.h"
17#include "mc/external/gameface/renoir/PipelineStateObject.h"
18#include "mc/external/gameface/renoir/PixelFormat.h"
19#include "mc/external/gameface/renoir/RendererBackend.h"
20#include "mc/external/gameface/renoir/ResourcesCommandsStage.h"
21#include "mc/external/gameface/renoir/Sampler2DObject.h"
22#include "mc/external/gameface/renoir/Texture2DObject.h"
23#include "mc/external/gameface/renoir/VertexBufferObject.h"
24#include "mc/external/gameface/renoir/VertexType.h"
25#include "mc/external/render_dragon/mesh/VertexFormat.h"
26#include "mc/external/render_dragon/resources/ServerResourcePointer.h"
27#include "mc/external/render_dragon/resources/TextureDescription.h"
28#include "mc/platform/brstd/function_ref.h"
57namespace renoir {
struct float2; }
83 ::mce::ClientResourcePointer<::dragon::ResolvedTextureResource>,
84 ::mce::ClientTexture>>
86 ::ll::TypedStorage<8, 64, ::dragon::TextureDescription> mDesc;
115 ::ll::TypedStorage<8, 184, ::dragon::mesh::VertexFormat> dragonFormat;
116 ::ll::TypedStorage<8, 24, ::mce::ServerResourcePointer<::dragon::ResolvedVertexBufferResource>>
124 using BufferConvert = void (*)(::std::vector<uchar>
const&, ::std::vector<uchar>&, uint64);
132 ::gsl::not_null<void (*)(::std::vector<uchar>
const&, ::std::vector<uchar>&, uint64)>>
134 ::ll::TypedStorage<8, 24, ::std::vector<uchar>> mDragonInstanceBuffer;
135 ::ll::TypedStorage<1, 1, uchar> mGamefaceStride;
139 using DragonStorage = ::std::variant<
140 ::OreUI::RenderDragonRenderingBackend::VertexBuffer::DragonVertexBuffer,
141 ::OreUI::RenderDragonRenderingBackend::VertexBuffer::DragonInstanceData>;
146 ::ll::TypedStorage<4, 4, uint> count;
147 ::ll::TypedStorage<8, 24, ::std::vector<uchar>> data;
152 ::OreUI::RenderDragonRenderingBackend::VertexBuffer::DragonVertexBuffer,
153 ::OreUI::RenderDragonRenderingBackend::VertexBuffer::DragonInstanceData>>
160 MCAPI ~VertexBuffer();
176 ::ll::TypedStorage<4, 4, uint> count;
177 ::ll::TypedStorage<1, 1, uchar> mStride;
178 ::ll::TypedStorage<8, 24, ::std::vector<uchar>> data;
179 ::ll::TypedStorage<8, 24, ::mce::ServerResourcePointer<::dragon::ResolvedIndexBufferResource>>
186 MCAPI ~IndexBuffer();
200 ::ll::TypedStorage<4, 4, ::renoir::CBType> type;
201 ::ll::TypedStorage<4, 2048, ::glm::vec4[128]> data;
202 ::ll::TypedStorage<8, 8, uint64> size;
206 using PipelineStateData = ::mce::framebuilder::GamefacePipelineState;
208 using BatchDraw = ::mce::framebuilder::GamefaceBatchDraw;
213 ::ll::TypedStorage<8, 8, ::OreUI::FrameDebugData&> mFrameDebugData;
214 ::ll::TypedStorage<8, 8, ::OreUI::TemporaryTextureHolder&> mTemporaryTextureHolder;
218 ::std::unordered_map<::renoir::PipelineStateObject, ::mce::framebuilder::GamefacePipelineState>>
223 ::std::unordered_map<::renoir::VertexBufferObject, ::OreUI::RenderDragonRenderingBackend::VertexBuffer>>
225 ::ll::TypedStorage<4, 8, ::std::array<::renoir::VertexBufferObject, 2>> mCurrentVertexBuffers;
226 ::ll::TypedStorage<4, 4, int> mNumVertexBuffersActive;
230 ::std::unordered_map<::renoir::IndexBufferObject, ::OreUI::RenderDragonRenderingBackend::IndexBuffer>>
232 ::ll::TypedStorage<4, 4, ::renoir::IndexBufferObject> mCurrentIndexBuffer;
236 ::std::unordered_map<::renoir::ConstantBufferObject, ::OreUI::RenderDragonRenderingBackend::ConstantBuffer>>
241 ::std::unordered_map<::renoir::Texture2DObject, ::OreUI::RenderDragonRenderingBackend::TextureData>>
246 ::std::unordered_map<::renoir::DepthStencilTextureObject, ::OreUI::RenderDragonRenderingBackend::TextureData>>
248 ::ll::TypedStorage<8, 64, ::std::unordered_map<::renoir::Sampler2DObject, ::mce::SamplerStateDescription>>
250 ::ll::TypedStorage<4, 20, ::std::array<::renoir::Texture2DObject, 5>> mRequestedTextures;
251 ::ll::TypedStorage<4, 20, ::std::array<::renoir::Sampler2DObject, 5>> mRequestedSamplers;
252 ::ll::TypedStorage<8, 144, ::mce::framebuilder::GamefacePipelineState> mCurrentPipelineState;
253 ::ll::TypedStorage<8, 464, ::mce::framebuilder::GamefaceBatchDraw::GamefaceMesh> mMesh;
254 ::ll::TypedStorage<8, 24, ::mce::framebuilder::GamefaceBatchDraw> mBatch;
259 RenderDragonRenderingBackend& operator=(RenderDragonRenderingBackend
const&);
260 RenderDragonRenderingBackend(RenderDragonRenderingBackend
const&);
261 RenderDragonRenderingBackend();
266 virtual void initializeStaticResources(::Bedrock::NonOwnerPointer<::mce::ShaderGroup>
const&) ;
268 virtual void onAppPreSuspended() ;
270 virtual void BeginCommands() ;
272 virtual void FillCaps(::renoir::RendererCaps& outCaps) ;
274 virtual void WrapUserRenderTarget(
276 ::renoir::Texture2D
const& description,
277 ::renoir::Texture2DObject
object,
279 ::renoir::DepthStencilTexture
const& dsDescription,
280 ::renoir::DepthStencilTextureObject dsObject
283 virtual void WrapUserTexture(
285 ::renoir::Texture2D
const& description,
286 ::renoir::Texture2DObject
object
290 CreatePipelineState(::renoir::PipelineState
const& state, ::renoir::PipelineStateObject
object) ;
292 virtual void DestroyPipelineState(::renoir::PipelineStateObject
object) ;
295 CreateVertexBuffer(::renoir::VertexType type, uint count, ::renoir::VertexBufferObject
object,
bool) ;
297 virtual void DestroyVertexBuffer(::renoir::VertexBufferObject
object) ;
299 virtual void* MapVertexBuffer(::renoir::VertexBufferObject
object) ;
301 virtual void UnmapVertexBuffer(::renoir::VertexBufferObject
object, uint count) ;
303 virtual bool CreateIndexBuffer(
304 ::renoir::IndexBufferType format,
306 ::renoir::IndexBufferObject
object,
310 virtual void DestroyIndexBuffer(::renoir::IndexBufferObject
object) ;
312 virtual void* MapIndexBuffer(::renoir::IndexBufferObject
object) ;
314 virtual void UnmapIndexBuffer(::renoir::IndexBufferObject
object, uint elemCount) ;
317 CreateConstantBuffer(::renoir::CBType type, ::renoir::ConstantBufferObject
object, uint size) ;
319 virtual void DestroyConstantBuffer(::renoir::ConstantBufferObject
object) ;
321 virtual bool CreateTexture(
322 ::renoir::Texture2DObject
object,
323 ::renoir::Texture2D
const& description,
328 virtual void DestroyTexture(::renoir::Texture2DObject
object) ;
330 virtual void UpdateTexture(
331 ::renoir::Texture2DObject
object,
332 ::renoir::Texture2D
const& description,
333 ::renoir::UpdateBox* boxes,
334 void const** newBytes,
339 virtual bool CreateDepthStencilTexture(
340 ::renoir::DepthStencilTextureObject
object,
341 ::renoir::DepthStencilTexture
const& description
344 virtual void DestroyDepthStencilTexture(::renoir::DepthStencilTextureObject
object) ;
346 virtual void CopyTextureToTexture(
347 ::renoir::Texture2DObject,
348 ::renoir::Texture2DObject,
353 virtual bool CreateSampler2D(::renoir::Sampler2DObject
object, ::renoir::Sampler2D
const& description) ;
355 virtual void DestroySampler2D(::renoir::Sampler2DObject
object) ;
357 virtual bool ReadTexture(::renoir::TextureObject, ::renoir::UpdateBox
const&,
void*) ;
359 virtual void ExecuteRendering(
360 ::renoir::RendererBackend::BackendCommandsBuffer
const* buffers,
362 ::renoir::RendererBackend::ConstantBufferUpdateData
const* cboUpdates,
366 virtual void ExecuteResourceCommands(
367 ::renoir::RendererBackend::BackendResourceCommandsBuffer
const* buffers,
369 ::renoir::ResourcesCommandsStage
372 virtual void EndCommands() ;
374 virtual ~RenderDragonRenderingBackend() ;
380 MCAPI RenderDragonRenderingBackend(
381 ::OreUI::FrameDebugData& frameDebugData,
382 ::OreUI::TemporaryTextureHolder& temporaryTextureHolder
385 MCAPI
void _drawIndexedInstanced(uint indexCount, uint indexOffset, uint instanceCount, uint instanceOffset);
389 MCAPI
void _setMultipleVertexBuffer(
390 ::renoir::SetMultipleVertexBuffersCmd
const& cmd,
391 ::renoir::VertexBufferObject
const* objs
395 _setPSConstantBuffers(::renoir::SetPSConstantBuffersCmd
const* cmd, ::renoir::ConstantBufferObject
const* data);
397 MCAPI
void _setPSSamplers(::renoir::SetPSSamplersCmd
const& cmd, ::renoir::Sampler2DObject
const* samplers);
399 MCAPI
void _setPSTextures(::renoir::SetPSTexturesCmd
const& cmd, ::renoir::Texture2DObject
const* textures);
401 MCAPI
void _setPerFrameConstantBuffers(
402 ::renoir::RendererBackend::ConstantBufferUpdateData
const* cboUpdates,
406 MCAPI
void _setPipelineState(::renoir::SetPipelineStateCmd
const& cmd);
408 MCAPI
void _setRenderTarget(::renoir::SetRenderTargetCmd
const& cmd);
410 MCAPI
void _setScissorRect(::renoir::SetScissorRectCmd
const& cmd);
413 _setVSConstantBuffers(::renoir::SetVSConstantBuffersCmd
const* cmd, ::renoir::ConstantBufferObject
const* data);
415 MCAPI
void _setViewport(::renoir::SetViewportCmd
const& cmd);
421 MCAPI
static void _updateTextureRegions(
422 ::renoir::Texture2D
const& description,
423 ::renoir::UpdateBox
const* boxes,
424 void const** newBytes,
426 ::brstd::function_ref<
427 ::OreUI::RenderUtils::TextureData(::renoir::PixelFormat, ::gsl::span<uchar const>)
const,
428 ::OreUI::RenderUtils::TextureData(::renoir::PixelFormat, ::gsl::span<uchar const>)> convertTextureData,
429 ::brstd::function_ref<
void(uint, uint, ::cg::ImageBuffer&&)> update
436 MCAPI
void* $ctor(::OreUI::FrameDebugData& frameDebugData, ::OreUI::TemporaryTextureHolder& temporaryTextureHolder);
448 MCFOLD
void $initializeStaticResources(::Bedrock::NonOwnerPointer<::mce::ShaderGroup>
const&);
450 MCFOLD
void $onAppPreSuspended();
452 MCFOLD
void $BeginCommands();
454 MCAPI
void $FillCaps(::renoir::RendererCaps& outCaps);
456 MCAPI
void $WrapUserRenderTarget(
458 ::renoir::Texture2D
const& description,
459 ::renoir::Texture2DObject
object,
461 ::renoir::DepthStencilTexture
const& dsDescription,
462 ::renoir::DepthStencilTextureObject dsObject
466 $WrapUserTexture(
void* userObject, ::renoir::Texture2D
const& description, ::renoir::Texture2DObject
object);
468 MCAPI
bool $CreatePipelineState(::renoir::PipelineState
const& state, ::renoir::PipelineStateObject
object);
470 MCAPI
void $DestroyPipelineState(::renoir::PipelineStateObject
object);
472 MCAPI
bool $CreateVertexBuffer(::renoir::VertexType type, uint count, ::renoir::VertexBufferObject
object,
bool);
474 MCAPI
void $DestroyVertexBuffer(::renoir::VertexBufferObject
object);
476 MCAPI
void* $MapVertexBuffer(::renoir::VertexBufferObject
object);
478 MCAPI
void $UnmapVertexBuffer(::renoir::VertexBufferObject
object, uint count);
481 $CreateIndexBuffer(::renoir::IndexBufferType format, uint count, ::renoir::IndexBufferObject
object,
bool);
483 MCAPI
void $DestroyIndexBuffer(::renoir::IndexBufferObject
object);
485 MCAPI
void* $MapIndexBuffer(::renoir::IndexBufferObject
object);
487 MCAPI
void $UnmapIndexBuffer(::renoir::IndexBufferObject
object, uint elemCount);
489 MCAPI
bool $CreateConstantBuffer(::renoir::CBType type, ::renoir::ConstantBufferObject
object, uint size);
491 MCAPI
void $DestroyConstantBuffer(::renoir::ConstantBufferObject
object);
493 MCAPI
bool $CreateTexture(
494 ::renoir::Texture2DObject
object,
495 ::renoir::Texture2D
const& description,
500 MCAPI
void $DestroyTexture(::renoir::Texture2DObject
object);
502 MCAPI
void $UpdateTexture(
503 ::renoir::Texture2DObject
object,
504 ::renoir::Texture2D
const& description,
505 ::renoir::UpdateBox* boxes,
506 void const** newBytes,
511 MCAPI
bool $CreateDepthStencilTexture(
512 ::renoir::DepthStencilTextureObject
object,
513 ::renoir::DepthStencilTexture
const& description
516 MCAPI
void $DestroyDepthStencilTexture(::renoir::DepthStencilTextureObject
object);
518 MCFOLD
void $CopyTextureToTexture(
519 ::renoir::Texture2DObject,
520 ::renoir::Texture2DObject,
525 MCAPI
bool $CreateSampler2D(::renoir::Sampler2DObject
object, ::renoir::Sampler2D
const& description);
527 MCAPI
void $DestroySampler2D(::renoir::Sampler2DObject
object);
529 MCFOLD
bool $ReadTexture(::renoir::TextureObject, ::renoir::UpdateBox
const&,
void*);
531 MCAPI
void $ExecuteRendering(
532 ::renoir::RendererBackend::BackendCommandsBuffer
const* buffers,
534 ::renoir::RendererBackend::ConstantBufferUpdateData
const* cboUpdates,
538 MCAPI
void $ExecuteResourceCommands(
539 ::renoir::RendererBackend::BackendResourceCommandsBuffer
const* buffers,
541 ::renoir::ResourcesCommandsStage
544 MCAPI
void $EndCommands();
Definition RenderDragonRenderingBackend.h:7
static MCAPI void ** $vftable()
Definition TemporaryTextureHolder.h:7
Definition ImageBuffer.h:16
Definition ResolvedTextureResource.h:7
Definition ShaderGroup.h:7
Definition FrameDebugData.h:7
Definition RenderDragonRenderingBackend.h:39
Definition RenderDragonRenderingBackend.h:35
Definition RenderDragonRenderingBackend.h:37
Definition RenderDragonRenderingBackend.h:19
Definition RenderDragonRenderingBackend.h:32
Definition RenderDragonRenderingBackend.h:30
Definition RenderDragonRenderingBackend.h:21
Definition TextureData.h:7
Definition ResolvedIndexBufferResource.h:7
Definition ResolvedVertexBufferResource.h:7
Definition SamplerStateDescription.h:7
Definition DepthStencilTexture.h:7
Definition PipelineState.h:7
Definition RendererCaps.h:7
Definition SetMultipleVertexBuffersCmd.h:7
Definition SetPSConstantBuffersCmd.h:7
Definition SetPSSamplersCmd.h:7
Definition SetPSTexturesCmd.h:7
Definition SetPipelineStateCmd.h:7
Definition SetRenderTargetCmd.h:7
Definition SetScissorRectCmd.h:7
Definition SetVSConstantBuffersCmd.h:7
Definition SetViewportCmd.h:7
Definition TextureObject.h:7