1 #include "vogleditor_statetreeframebufferitem.h"
3 #include "vogl_fbo_state.h"
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),
10 int val = pAttachment->get_param(enumName);
14 bool vogleditor_stateTreeFramebufferBoolItem::hasChanged() const
16 if (m_pDiffBaseState == NULL)
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())
24 return (m_pState->get_param(m_enumName) != ((vogl_framebuffer_attachment)iter->second).get_param(m_enumName));
27 QString vogleditor_stateTreeFramebufferBoolItem::getDiffedValue() const
29 if (m_pDiffBaseState == NULL)
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";
37 bool bVal = ((vogl_framebuffer_attachment)iter->second).get_param(m_enumName);
38 return getValueFromBools(&bVal, 1);
41 //=============================================================================
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),
48 int val = pAttachment->get_param(enumName);
52 bool vogleditor_stateTreeFramebufferIntItem::hasChanged() const
54 if (m_pDiffBaseState == NULL)
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())
62 return (m_pState->get_param(m_enumName) != ((vogl_framebuffer_attachment)iter->second).get_param(m_enumName));
65 QString vogleditor_stateTreeFramebufferIntItem::getDiffedValue() const
67 if (m_pDiffBaseState == NULL)
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";
75 int val = ((vogl_framebuffer_attachment)iter->second).get_param(m_enumName);
76 return getValueFromInts(&val, 1);
79 //=============================================================================
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),
86 int val = pAttachment->get_param(enumName);
87 setValue(enum_to_string(val));
90 bool vogleditor_stateTreeFramebufferEnumItem::hasChanged() const
92 if (m_pDiffBaseState == NULL)
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())
100 return (m_pState->get_param(m_enumName) != ((vogl_framebuffer_attachment)iter->second).get_param(m_enumName));
103 QString vogleditor_stateTreeFramebufferEnumItem::getDiffedValue() const
105 if (m_pDiffBaseState == NULL)
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";
113 int val = ((vogl_framebuffer_attachment)iter->second).get_param(m_enumName);
114 return getValueFromEnums(&val, 1);
117 //=============================================================================
119 vogleditor_stateTreeFramebufferReadbufferItem::vogleditor_stateTreeFramebufferReadbufferItem(QString name, vogleditor_stateTreeItem* parent, const vogl_framebuffer_state* pState)
120 : vogleditor_stateTreeFramebufferDiffableItem(name, "", parent, 0, 0),
123 setValue(enum_to_string(m_pState->get_read_buffer()));
126 bool vogleditor_stateTreeFramebufferReadbufferItem::hasChanged() const
128 if (m_pDiffBaseState == NULL)
131 return (m_pState->get_read_buffer() != m_pDiffBaseState->get_read_buffer());
134 QString vogleditor_stateTreeFramebufferReadbufferItem::getDiffedValue() const
136 if (m_pDiffBaseState == NULL)
139 int val = m_pDiffBaseState->get_read_buffer();
140 return getValueFromEnums(&val, 1);
143 //=============================================================================
145 vogleditor_stateTreeFramebufferItem::vogleditor_stateTreeFramebufferItem(QString name, QString value, GLuint64 handle, vogleditor_stateTreeItem* parent, vogl_framebuffer_state* pState)
146 : vogleditor_stateTreeItem(name, value, parent),
148 m_pFramebufferState(pState)
151 vogleditor_stateTreeFramebufferReadbufferItem* pReadbufferItem = new vogleditor_stateTreeFramebufferReadbufferItem("GL_READ_BUFFER", this, m_pFramebufferState);
152 m_diffableItems.push_back(pReadbufferItem);
153 this->appendChild(pReadbufferItem);
155 const uint_vec& rDrawBuffers = m_pFramebufferState->get_draw_buffers();
156 for (uint i = 0; i < rDrawBuffers.size(); i++)
158 this->appendChild(new vogleditor_stateTreeItem(tmp.sprintf("GL_DRAW_BUFFER%d", i), enum_to_string(rDrawBuffers[i]), this));
161 // TODO: support MAX_COLOR_ATTACHMENT
162 // int max_color_attachments = 0;
163 // GL_ENTRYPOINT(glGetIntegerv)(GL_MAX_COLOR_ATTACHMENTS, &max_color_attachments);
165 const vogl_framebuffer_state::GLenum_to_attachment_map& rAttachments = m_pFramebufferState->get_attachments();
167 for (vogl_framebuffer_state::GLenum_to_attachment_map::const_iterator iter = rAttachments.begin(); iter != rAttachments.end(); iter++)
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);
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);
186 if (pAttachment->get_type() == GL_TEXTURE)
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);