// 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 namespace Nz { class AbstractBuffer; class RenderPipeline; class ShaderBinding; class NAZARA_GRAPHICS_API SubmeshRenderer : public ElementRenderer { public: SubmeshRenderer() = default; ~SubmeshRenderer() = default; std::unique_ptr InstanciateData() override; void Prepare(const ViewerInstance& viewerInstance, ElementRendererData& rendererData, RenderFrame& currentFrame, const RenderStates& renderStates, const Pointer* elements, std::size_t elementCount) override; void Render(const ViewerInstance& viewerInstance, ElementRendererData& rendererData, CommandBufferBuilder& commandBuffer, const Pointer* elements, std::size_t elementCount) override; void Reset(ElementRendererData& rendererData, RenderFrame& currentFrame) override; private: std::vector m_bindingCache; }; struct SubmeshRendererData : public ElementRendererData { struct DrawCall { const AbstractBuffer* indexBuffer; const AbstractBuffer* vertexBuffer; const RenderPipeline* renderPipeline; const ShaderBinding* shaderBinding; std::size_t indexCount; Recti scissorBox; }; std::vector drawCalls; std::vector shaderBindings; }; } #include #endif // NAZARA_GRAPHICS_SUBMESHRENDERER_HPP