// Copyright (C) 2022 Jérôme "Lynix" Leclercq (lynix680@gmail.com) // This file is part of the "Nazara Engine - Graphics module" // For conditions of distribution and use, see copyright notice in Config.hpp #pragma once #ifndef NAZARA_GRAPHICS_SUBMESHRENDERER_HPP #define NAZARA_GRAPHICS_SUBMESHRENDERER_HPP #include #include #include #include #include namespace Nz { class RenderPipeline; class ShaderBinding; class NAZARA_GRAPHICS_API SubmeshRenderer final : public ElementRenderer { public: SubmeshRenderer() = default; ~SubmeshRenderer() = default; RenderElementPool& GetPool() override; std::unique_ptr InstanciateData() override; void Prepare(const ViewerInstance& viewerInstance, ElementRendererData& rendererData, RenderFrame& currentFrame, std::size_t elementCount, const Pointer* elements, const RenderStates* renderStates) override; void Render(const ViewerInstance& viewerInstance, ElementRendererData& rendererData, CommandBufferBuilder& commandBuffer, std::size_t elementCount, const Pointer* elements) override; void Reset(ElementRendererData& rendererData, RenderFrame& currentFrame) override; private: std::vector m_bindingCache; std::vector m_textureBindingCache; RenderElementPool m_submeshPool; }; struct SubmeshRendererData : public ElementRendererData { struct DrawCall { const RenderBuffer* indexBuffer; const RenderBuffer* vertexBuffer; const RenderPipeline* renderPipeline; const ShaderBinding* shaderBinding; std::size_t firstIndex; std::size_t indexCount; IndexType indexType; Recti scissorBox; }; struct DrawCallIndices { std::size_t start; std::size_t count; }; std::unordered_map drawCallPerElement; std::vector drawCalls; std::vector shaderBindings; }; } #include #endif // NAZARA_GRAPHICS_SUBMESHRENDERER_HPP