1 #include "vogleditor_qshaderexplorer.h"
2 #include "ui_vogleditor_qshaderexplorer.h"
4 #include "vogl_gl_object.h"
5 #include "vogl_gl_state_snapshot.h"
6 #include "vogl_shader_state.h"
8 Q_DECLARE_METATYPE(vogl_shader_state*);
10 vogleditor_QShaderExplorer::vogleditor_QShaderExplorer(QWidget *parent) :
12 ui(new Ui::vogleditor_QShaderExplorer)
17 vogleditor_QShaderExplorer::~vogleditor_QShaderExplorer()
22 void vogleditor_QShaderExplorer::clear()
24 ui->shaderListbox->clear();
25 ui->shaderTextEdit->clear();
28 uint vogleditor_QShaderExplorer::set_shader_objects(vogl::vector<vogl_context_snapshot*> sharingContexts)
33 for (uint c = 0; c < sharingContexts.size(); c++)
35 vogl_gl_object_state_ptr_vec shaderObjects;
36 sharingContexts[c]->get_all_objects_of_category(cGLSTShader, shaderObjects);
38 shaderCount += add_shader_objects(shaderObjects);
44 uint vogleditor_QShaderExplorer::add_shader_objects(vogl_gl_object_state_ptr_vec objects)
46 m_objects.append(objects);
48 for (vogl_gl_object_state_ptr_vec::iterator iter = objects.begin(); iter != objects.end(); iter++)
50 if ((*iter)->get_type() == cGLSTShader)
52 vogl_shader_state* pState = static_cast<vogl_shader_state*>(*iter);
55 valueStr = valueStr.sprintf("Shader %" PRIu64 " - %s", pState->get_snapshot_handle(), g_gl_enums.find_gl_name(pState->get_shader_type()));
57 ui->shaderListbox->addItem(valueStr, QVariant::fromValue(pState));
61 VOGL_ASSERT(!"Unhandled object type in vogleditor_QShaderExplorer");
65 return m_objects.size();
69 bool vogleditor_QShaderExplorer::set_active_shader(unsigned long long shaderHandle)
71 bool bActivated = false;
73 for (vogl_gl_object_state_ptr_vec::iterator iter = m_objects.begin(); iter != m_objects.end(); iter++)
75 vogl_shader_state* pState = static_cast<vogl_shader_state*>(*iter);
76 if (pState->get_snapshot_handle() == shaderHandle)
78 ui->shaderListbox->setCurrentIndex(index);
88 void vogleditor_QShaderExplorer::on_shaderListbox_currentIndexChanged(int index)
90 ui->shaderTextEdit->clear();
92 int count = ui->shaderListbox->count();
93 if (index >= 0 && index < count)
95 vogl_shader_state* pObjState = ui->shaderListbox->itemData(index).value<vogl_shader_state*>();
96 if (pObjState == NULL)
98 VOGL_ASSERT(!"NULL shader object type in vogleditor_QShaderExplorer");
102 ui->shaderTextEdit->setText(pObjState->get_source().c_str());