]> git.cworth.org Git - vogl/blob - src/vogleditor/vogleditor_statetreeframebufferitem.cpp
Initial vogl checkin
[vogl] / src / vogleditor / vogleditor_statetreeframebufferitem.cpp
1 #include "vogleditor_statetreeframebufferitem.h"
2
3 #include "vogl_fbo_state.h"
4
5 vogleditor_stateTreeFramebufferBoolItem::vogleditor_stateTreeFramebufferBoolItem(QString name, GLenum enumName, GLenum attachment, GLuint attachmentHandle, vogleditor_stateTreeItem* parent, const vogl_framebuffer_attachment* pAttachment)
6     : vogleditor_stateTreeFramebufferDiffableItem(name, "", parent, attachment, attachmentHandle),
7       m_enumName(enumName),
8       m_pState(pAttachment)
9 {
10     int val = pAttachment->get_param(enumName);
11     setValue(val != 0);
12 }
13
14 bool vogleditor_stateTreeFramebufferBoolItem::hasChanged() const
15 {
16     if (m_pDiffBaseState == NULL)
17         return false;
18
19     const vogl_framebuffer_state::GLenum_to_attachment_map& rAttachments = m_pDiffBaseState->get_attachments();
20     vogl_framebuffer_state::GLenum_to_attachment_map::const_iterator iter = rAttachments.find(m_attachment);
21     if (iter == rAttachments.end())
22         return true;
23
24     return (m_pState->get_param(m_enumName) != ((vogl_framebuffer_attachment)iter->second).get_param(m_enumName));
25 }
26
27 QString vogleditor_stateTreeFramebufferBoolItem::getDiffedValue() const
28 {
29     if (m_pDiffBaseState == NULL)
30         return "";
31
32     const vogl_framebuffer_state::GLenum_to_attachment_map& rAttachments = m_pDiffBaseState->get_attachments();
33     vogl_framebuffer_state::GLenum_to_attachment_map::const_iterator iter = rAttachments.find(m_attachment);
34     if (iter == rAttachments.end())
35         return "non-existent";
36
37     bool bVal = ((vogl_framebuffer_attachment)iter->second).get_param(m_enumName);
38     return getValueFromBools(&bVal, 1);
39 }
40
41 //=============================================================================
42
43 vogleditor_stateTreeFramebufferIntItem::vogleditor_stateTreeFramebufferIntItem(QString name, GLenum enumName, GLenum attachment, GLuint attachmentHandle, vogleditor_stateTreeItem* parent, const vogl_framebuffer_attachment* pAttachment)
44     : vogleditor_stateTreeFramebufferDiffableItem(name, "", parent, attachment, attachmentHandle),
45       m_enumName(enumName),
46       m_pState(pAttachment)
47 {
48     int val = pAttachment->get_param(enumName);
49     setValue(val);
50 }
51
52 bool vogleditor_stateTreeFramebufferIntItem::hasChanged() const
53 {
54     if (m_pDiffBaseState == NULL)
55         return false;
56
57     const vogl_framebuffer_state::GLenum_to_attachment_map& rAttachments = m_pDiffBaseState->get_attachments();
58     vogl_framebuffer_state::GLenum_to_attachment_map::const_iterator iter = rAttachments.find(m_attachment);
59     if (iter == rAttachments.end())
60         return true;
61
62     return (m_pState->get_param(m_enumName) != ((vogl_framebuffer_attachment)iter->second).get_param(m_enumName));
63 }
64
65 QString vogleditor_stateTreeFramebufferIntItem::getDiffedValue() const
66 {
67     if (m_pDiffBaseState == NULL)
68         return "";
69
70     const vogl_framebuffer_state::GLenum_to_attachment_map& rAttachments = m_pDiffBaseState->get_attachments();
71     vogl_framebuffer_state::GLenum_to_attachment_map::const_iterator iter = rAttachments.find(m_attachment);
72     if (iter == rAttachments.end())
73         return "non-existent";
74
75     int val = ((vogl_framebuffer_attachment)iter->second).get_param(m_enumName);
76     return getValueFromInts(&val, 1);
77 }
78
79 //=============================================================================
80
81 vogleditor_stateTreeFramebufferEnumItem::vogleditor_stateTreeFramebufferEnumItem(QString name, GLenum enumName, GLenum attachment, GLuint attachmentHandle, vogleditor_stateTreeItem* parent, const vogl_framebuffer_attachment* pAttachment)
82     : vogleditor_stateTreeFramebufferDiffableItem(name, "", parent, attachment, attachmentHandle),
83       m_enumName(enumName),
84       m_pState(pAttachment)
85 {
86     int val = pAttachment->get_param(enumName);
87     setValue(enum_to_string(val));
88 }
89
90 bool vogleditor_stateTreeFramebufferEnumItem::hasChanged() const
91 {
92     if (m_pDiffBaseState == NULL)
93         return false;
94
95     const vogl_framebuffer_state::GLenum_to_attachment_map& rAttachments = m_pDiffBaseState->get_attachments();
96     vogl_framebuffer_state::GLenum_to_attachment_map::const_iterator iter = rAttachments.find(m_attachment);
97     if (iter == rAttachments.end())
98         return true;
99
100     return (m_pState->get_param(m_enumName) != ((vogl_framebuffer_attachment)iter->second).get_param(m_enumName));
101 }
102
103 QString vogleditor_stateTreeFramebufferEnumItem::getDiffedValue() const
104 {
105     if (m_pDiffBaseState == NULL)
106         return "";
107
108     const vogl_framebuffer_state::GLenum_to_attachment_map& rAttachments = m_pDiffBaseState->get_attachments();
109     vogl_framebuffer_state::GLenum_to_attachment_map::const_iterator iter = rAttachments.find(m_attachment);
110     if (iter == rAttachments.end())
111         return "non-existent";
112
113     int val = ((vogl_framebuffer_attachment)iter->second).get_param(m_enumName);
114     return getValueFromEnums(&val, 1);
115 }
116
117 //=============================================================================
118
119 vogleditor_stateTreeFramebufferReadbufferItem::vogleditor_stateTreeFramebufferReadbufferItem(QString name, vogleditor_stateTreeItem* parent, const vogl_framebuffer_state* pState)
120     : vogleditor_stateTreeFramebufferDiffableItem(name, "", parent, 0, 0),
121       m_pState(pState)
122 {
123     setValue(enum_to_string(m_pState->get_read_buffer()));
124 }
125
126 bool vogleditor_stateTreeFramebufferReadbufferItem::hasChanged() const
127 {
128     if (m_pDiffBaseState == NULL)
129         return false;
130
131     return (m_pState->get_read_buffer() != m_pDiffBaseState->get_read_buffer());
132 }
133
134 QString vogleditor_stateTreeFramebufferReadbufferItem::getDiffedValue() const
135 {
136     if (m_pDiffBaseState == NULL)
137         return "";
138
139     int val = m_pDiffBaseState->get_read_buffer();
140     return getValueFromEnums(&val, 1);
141 }
142
143 //=============================================================================
144
145 vogleditor_stateTreeFramebufferItem::vogleditor_stateTreeFramebufferItem(QString name, QString value, GLuint64 handle, vogleditor_stateTreeItem* parent, vogl_framebuffer_state* pState)
146    : vogleditor_stateTreeItem(name, value, parent),
147      m_handle(handle),
148      m_pFramebufferState(pState)
149 {
150    QString tmp;
151    vogleditor_stateTreeFramebufferReadbufferItem* pReadbufferItem = new vogleditor_stateTreeFramebufferReadbufferItem("GL_READ_BUFFER", this, m_pFramebufferState);
152    m_diffableItems.push_back(pReadbufferItem);
153    this->appendChild(pReadbufferItem);
154
155    const uint_vec& rDrawBuffers = m_pFramebufferState->get_draw_buffers();
156    for (uint i = 0; i < rDrawBuffers.size(); i++)
157    {
158       this->appendChild(new vogleditor_stateTreeItem(tmp.sprintf("GL_DRAW_BUFFER%d", i), enum_to_string(rDrawBuffers[i]), this));
159    }
160
161    // TODO: support MAX_COLOR_ATTACHMENT
162 //                  int max_color_attachments = 0;
163 //                  GL_ENTRYPOINT(glGetIntegerv)(GL_MAX_COLOR_ATTACHMENTS, &max_color_attachments);
164
165    const vogl_framebuffer_state::GLenum_to_attachment_map& rAttachments = m_pFramebufferState->get_attachments();
166
167    for (vogl_framebuffer_state::GLenum_to_attachment_map::const_iterator iter = rAttachments.begin(); iter != rAttachments.end(); iter++)
168    {
169       GLenum attachment = iter->first;
170       const vogl_framebuffer_attachment* pAttachment = &(iter->second);
171       vogleditor_stateTreeItem* pAttachmentNode = new vogleditor_stateTreeItem(enum_to_string(attachment), int_to_string(pAttachment->get_handle()) + " (" + enum_to_string(pAttachment->get_type()) + ")", this);
172       this->appendChild(pAttachmentNode);
173
174 #define GET_BOOL(name) { vogleditor_stateTreeFramebufferBoolItem* pItem = new vogleditor_stateTreeFramebufferBoolItem(#name, name, attachment, pAttachment->get_handle(), pAttachmentNode, pAttachment); m_diffableItems.push_back(pItem); pAttachmentNode->appendChild(pItem); }
175 #define GET_INT(name) { vogleditor_stateTreeFramebufferIntItem* pItem = new vogleditor_stateTreeFramebufferIntItem(#name, name, attachment, pAttachment->get_handle(), pAttachmentNode, pAttachment); m_diffableItems.push_back(pItem); pAttachmentNode->appendChild(pItem); }
176 #define GET_ENUM(name) { vogleditor_stateTreeFramebufferEnumItem* pItem = new vogleditor_stateTreeFramebufferEnumItem(#name, name, attachment, pAttachment->get_handle(), pAttachmentNode, pAttachment); m_diffableItems.push_back(pItem); pAttachmentNode->appendChild(pItem); }
177       GET_INT(GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE);
178       GET_INT(GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE);
179       GET_INT(GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE);
180       GET_INT(GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE);
181       GET_INT(GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE);
182       GET_INT(GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE);
183       GET_ENUM(GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE);
184       GET_BOOL(GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING);
185
186       if (pAttachment->get_type() == GL_TEXTURE)
187       {
188          GET_INT(GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL);
189          GET_ENUM(GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE);
190          GET_INT(GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER);
191          GET_BOOL(GL_FRAMEBUFFER_ATTACHMENT_LAYERED);
192       }
193 #undef GET_BOOL
194 #undef GET_INT
195 #undef GET_ENUM
196    }
197 }
198
199 //#undef STR_INT