#ifndef GX_GLL_GL_FRAMEBUFFER_H
#define GX_GLL_GL_FRAMEBUFFER_H

#include "gx/gll/GL.h"
#include "gx/gll/GLObject.h"
#include <cstdint>

#define MAX_ATTACHMENT 6

class GLDevice;
class GLMipmap;

class GLFramebuffer : public GLObject {
    public:
        // Static functions
        static GLFramebuffer* Create(bool);

        // Member variables
        int32_t m_Width = 0;
        int32_t m_Height = 0;
        uint32_t m_FramebufferID = 0;
        GLDevice* m_Device;
        GLMipmap* m_Attachments[6] = {};
        uint32_t m_NumAttach = 0;

        // Virtual member functions
        virtual void ReleaseObject();

        // Member functions
        GLFramebuffer(bool);
        void Attach(GLMipmap*, GLenum, int32_t);
        void Detach(GLenum);
        GLMipmap* GetAttachment(GLEnum);
        int32_t GetSampleCount(void);
        bool IsValid();
};

#endif
