#pragma once #include #include #include namespace mln { namespace gfx { class RenderPassDescriptor; class RenderPass; class Renderable; class UploadPass; class CommandEncoder { protected: explicit CommandEncoder() = default; friend class DebugGroup; virtual void pushDebugGroup(const char* name) = 0; virtual void popDebugGroup() = 0; public: virtual ~CommandEncoder() = default; CommandEncoder(const CommandEncoder&) = delete; CommandEncoder& operator=(const CommandEncoder&) = delete; DebugGroup createDebugGroup(const char* name) { return {*this, name}; } // NOLINTNEXTLINE(bugprone-suspicious-stringview-data-usage) DebugGroup createDebugGroup(std::string_view name) { return createDebugGroup(name.data()); } virtual std::unique_ptr createUploadPass(const char* name, Renderable&) = 0; virtual std::unique_ptr createRenderPass(const char* name, const RenderPassDescriptor&) = 0; virtual void present(Renderable&) = 0; }; } // namespace gfx } // namespace mln