]> git.cworth.org Git - vogl/blob - src/vogleditor/vogleditor_statetreeframebufferitem.h
Initial vogl checkin
[vogl] / src / vogleditor / vogleditor_statetreeframebufferitem.h
1 #ifndef VOGLEDITOR_STATETREEFRAMEBUFFERITEM_H
2 #define VOGLEDITOR_STATETREEFRAMEBUFFERITEM_H
3
4 #include "vogleditor_statetreeitem.h"
5
6 class vogl_framebuffer_state;
7 class vogl_framebuffer_attachment;
8
9 class vogleditor_stateTreeFramebufferDiffableItem : public vogleditor_stateTreeItem
10 {
11 public:
12     vogleditor_stateTreeFramebufferDiffableItem(QString name, QString value, vogleditor_stateTreeItem* parent, GLenum attachment, GLuint attachmentHandle)
13         : vogleditor_stateTreeItem(name, value, parent),
14           m_attachment(attachment),
15           m_attachmentHandle(attachmentHandle),
16           m_pDiffBaseState(NULL)
17     {
18     }
19
20     void set_diff_base_state(const vogl_framebuffer_state* pBaseState)
21     {
22         m_pDiffBaseState = pBaseState;
23     }
24
25     GLenum get_attachment() const { return m_attachment; }
26     GLuint get_attachment_handle() const { return m_attachmentHandle; }
27
28     virtual bool hasChanged() const = 0;
29 protected:
30     GLenum m_attachment;
31     GLuint m_attachmentHandle;
32     const vogl_framebuffer_state* m_pDiffBaseState;
33 };
34
35 class vogleditor_stateTreeFramebufferBoolItem : public vogleditor_stateTreeFramebufferDiffableItem
36 {
37 public:
38     vogleditor_stateTreeFramebufferBoolItem(QString name, GLenum enumName, GLenum attachment, GLuint attachmentHandle, vogleditor_stateTreeItem* parent, const vogl_framebuffer_attachment* pAttachment);
39     virtual ~vogleditor_stateTreeFramebufferBoolItem() { m_pState = NULL; }
40
41     virtual bool hasChanged() const;
42
43     virtual QString getDiffedValue() const;
44
45  private:
46     GLenum m_enumName;
47     const vogl_framebuffer_attachment* m_pState;
48 };
49
50 class vogleditor_stateTreeFramebufferIntItem : public vogleditor_stateTreeFramebufferDiffableItem
51 {
52 public:
53     vogleditor_stateTreeFramebufferIntItem(QString name, GLenum enumName, GLenum attachment, GLuint attachmentHandle, vogleditor_stateTreeItem* parent, const vogl_framebuffer_attachment* pAttachment);
54     virtual ~vogleditor_stateTreeFramebufferIntItem() { m_pState = NULL; }
55
56     virtual bool hasChanged() const;
57
58     virtual QString getDiffedValue() const;
59
60 private:
61     GLenum m_enumName;
62     const vogl_framebuffer_attachment* m_pState;
63 };
64
65
66 class vogleditor_stateTreeFramebufferEnumItem : public vogleditor_stateTreeFramebufferDiffableItem
67 {
68 public:
69     vogleditor_stateTreeFramebufferEnumItem(QString name, GLenum enumName, GLenum attachment, GLuint attachmentHandle, vogleditor_stateTreeItem* parent, const vogl_framebuffer_attachment* pAttachment);
70     virtual ~vogleditor_stateTreeFramebufferEnumItem() { m_pState = NULL; }
71
72     virtual bool hasChanged() const;
73
74     virtual QString getDiffedValue() const;
75
76 private:
77     GLenum m_enumName;
78     const vogl_framebuffer_attachment* m_pState;
79 };
80
81 class vogleditor_stateTreeFramebufferReadbufferItem : public vogleditor_stateTreeFramebufferDiffableItem
82 {
83 public:
84     vogleditor_stateTreeFramebufferReadbufferItem(QString name, vogleditor_stateTreeItem* parent, const vogl_framebuffer_state* pState);
85     virtual ~vogleditor_stateTreeFramebufferReadbufferItem() { m_pState = NULL; }
86
87     virtual bool hasChanged() const;
88
89     virtual QString getDiffedValue() const;
90
91 private:
92     const vogl_framebuffer_state* m_pState;
93 };
94
95 class vogleditor_stateTreeFramebufferItem : public vogleditor_stateTreeItem
96 {
97 public:
98    vogleditor_stateTreeFramebufferItem(QString name, QString value, GLuint64 handle, vogleditor_stateTreeItem* parent, vogl_framebuffer_state* pState);
99    virtual ~vogleditor_stateTreeFramebufferItem() { m_pFramebufferState = NULL; }
100    virtual state_tree_type getStateType() const { return vogleditor_stateTreeItem::cFRAMEBUFFER; }
101
102    vogl_framebuffer_state* get_framebuffer_state() const { return m_pFramebufferState; }
103
104    void set_diff_base_state(const vogl_framebuffer_state* pBaseState)
105    {
106        m_pDiffBaseState = pBaseState;
107
108        for (vogleditor_stateTreeFramebufferDiffableItem** iter = m_diffableItems.begin(); iter != m_diffableItems.end(); iter++)
109        {
110            (*iter)->set_diff_base_state(pBaseState);
111        }
112    }
113
114    GLuint64 get_handle() const { return m_handle; }
115 private:
116    GLuint64 m_handle;
117    vogl_framebuffer_state* m_pFramebufferState;
118    const vogl_framebuffer_state* m_pDiffBaseState;
119    vogl::vector<vogleditor_stateTreeFramebufferDiffableItem*> m_diffableItems;
120 };
121
122 #endif // VOGLEDITOR_STATETREEFRAMEBUFFERITEM_H