// Copyright (C) 2023 Jérôme "Lynix" Leclercq (lynix680@gmail.com) // This file is part of the "Nazara Engine - OpenGL renderer" // For conditions of distribution and use, see copyright notice in Config.hpp #pragma once #ifndef NAZARA_OPENGLRENDERER_OPENGLFBOFRAMEBUFFER_HPP #define NAZARA_OPENGLRENDERER_OPENGLFBOFRAMEBUFFER_HPP #include #include #include #include #include #include #include namespace Nz { class OpenGLDevice; class RenderPass; class Texture; class NAZARA_OPENGLRENDERER_API OpenGLFboFramebuffer final : public OpenGLFramebuffer { public: OpenGLFboFramebuffer(OpenGLDevice& device, std::vector> attachments); OpenGLFboFramebuffer(const OpenGLFboFramebuffer&) = delete; OpenGLFboFramebuffer(OpenGLFboFramebuffer&&) = delete; ~OpenGLFboFramebuffer() = default; void Activate() const override; inline Vector2ui GetAttachmentSize(std::size_t i) const; std::size_t GetColorBufferCount() const override; const Vector2ui& GetSize() const override; void UpdateDebugName(std::string_view name) override; OpenGLFboFramebuffer& operator=(const OpenGLFboFramebuffer&) = delete; OpenGLFboFramebuffer& operator=(OpenGLFboFramebuffer&&) = delete; private: GL::Framebuffer& CreateFramebuffer(const GL::Context& context) const; struct ContextFramebuffer { GL::Framebuffer framebuffer; NazaraSlot(GL::Context, OnContextDestruction, onContextDestruction); }; std::size_t m_colorAttachmentCount; std::string m_debugName; std::vector> m_attachments; mutable std::unordered_map m_framebuffers; OpenGLDevice& m_device; Vector2ui m_size; }; } #include #endif // NAZARA_OPENGLRENDERER_OPENGLFBOFRAMEBUFFER_HPP