Make imgui and qtgui compile on older qt as well, opengl 3.2 required

This commit is contained in:
Miodrag Milanovic 2018-10-21 10:11:20 +02:00
parent 40722c098d
commit f796716b83
4 changed files with 20 additions and 9 deletions

View File

@ -39,6 +39,8 @@ QByteArray g_currentClipboardText;
void ImGuiRenderer::initialize(WindowWrapper *window) { void ImGuiRenderer::initialize(WindowWrapper *window) {
m_window.reset(window); m_window.reset(window);
initializeOpenGLFunctions(); initializeOpenGLFunctions();
g_fun = new QOpenGLFunctions_3_3_Core();
g_fun->initializeOpenGLFunctions();
ImGui::CreateContext(); ImGui::CreateContext();
@ -59,6 +61,7 @@ void ImGuiRenderer::initialize(WindowWrapper *window) {
g_currentClipboardText = QGuiApplication::clipboard()->text().toUtf8(); g_currentClipboardText = QGuiApplication::clipboard()->text().toUtf8();
return (const char *)g_currentClipboardText.data(); return (const char *)g_currentClipboardText.data();
}; };
io.IniFilename = nullptr;
window->installEventFilter(this); window->installEventFilter(this);
} }
@ -114,7 +117,7 @@ void ImGuiRenderer::renderDrawList(ImDrawData *draw_data)
glUseProgram(g_ShaderHandle); glUseProgram(g_ShaderHandle);
glUniform1i(g_AttribLocationTex, 0); glUniform1i(g_AttribLocationTex, 0);
glUniformMatrix4fv(g_AttribLocationProjMtx, 1, GL_FALSE, &ortho_projection[0][0]); glUniformMatrix4fv(g_AttribLocationProjMtx, 1, GL_FALSE, &ortho_projection[0][0]);
glBindVertexArray(g_VaoHandle); g_fun->glBindVertexArray(g_VaoHandle);
for (int n = 0; n < draw_data->CmdListsCount; n++) for (int n = 0; n < draw_data->CmdListsCount; n++)
{ {
@ -148,7 +151,7 @@ void ImGuiRenderer::renderDrawList(ImDrawData *draw_data)
glUseProgram(last_program); glUseProgram(last_program);
glBindTexture(GL_TEXTURE_2D, last_texture); glBindTexture(GL_TEXTURE_2D, last_texture);
glActiveTexture(last_active_texture); glActiveTexture(last_active_texture);
glBindVertexArray(last_vertex_array); g_fun->glBindVertexArray(last_vertex_array);
glBindBuffer(GL_ARRAY_BUFFER, last_array_buffer); glBindBuffer(GL_ARRAY_BUFFER, last_array_buffer);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, last_element_array_buffer); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, last_element_array_buffer);
glBlendEquationSeparate(last_blend_equation_rgb, last_blend_equation_alpha); glBlendEquationSeparate(last_blend_equation_rgb, last_blend_equation_alpha);
@ -241,8 +244,8 @@ bool ImGuiRenderer::createDeviceObjects()
glGenBuffers(1, &g_VboHandle); glGenBuffers(1, &g_VboHandle);
glGenBuffers(1, &g_ElementsHandle); glGenBuffers(1, &g_ElementsHandle);
glGenVertexArrays(1, &g_VaoHandle); g_fun->glGenVertexArrays(1, &g_VaoHandle);
glBindVertexArray(g_VaoHandle); g_fun->glBindVertexArray(g_VaoHandle);
glBindBuffer(GL_ARRAY_BUFFER, g_VboHandle); glBindBuffer(GL_ARRAY_BUFFER, g_VboHandle);
glEnableVertexAttribArray(g_AttribLocationPosition); glEnableVertexAttribArray(g_AttribLocationPosition);
glEnableVertexAttribArray(g_AttribLocationUV); glEnableVertexAttribArray(g_AttribLocationUV);
@ -259,7 +262,7 @@ bool ImGuiRenderer::createDeviceObjects()
// Restore modified GL state // Restore modified GL state
glBindTexture(GL_TEXTURE_2D, last_texture); glBindTexture(GL_TEXTURE_2D, last_texture);
glBindBuffer(GL_ARRAY_BUFFER, last_array_buffer); glBindBuffer(GL_ARRAY_BUFFER, last_array_buffer);
glBindVertexArray(last_vertex_array); g_fun->glBindVertexArray(last_vertex_array);
return true; return true;
} }

View File

@ -1,6 +1,7 @@
#pragma once #pragma once
#include <QOpenGLExtraFunctions> #include <QOpenGLFunctions>
#include <QOpenGLFunctions_3_3_Core>
#include <QObject> #include <QObject>
#include <QPoint> #include <QPoint>
#include <imgui.h> #include <imgui.h>
@ -22,7 +23,7 @@ public:
virtual QPoint mapFromGlobal(const QPoint &p) const = 0; virtual QPoint mapFromGlobal(const QPoint &p) const = 0;
}; };
class ImGuiRenderer : public QObject, QOpenGLExtraFunctions { class ImGuiRenderer : public QObject, QOpenGLFunctions {
Q_OBJECT Q_OBJECT
public: public:
void initialize(WindowWrapper *window); void initialize(WindowWrapper *window);
@ -53,6 +54,7 @@ private:
int g_AttribLocationTex = 0, g_AttribLocationProjMtx = 0; int g_AttribLocationTex = 0, g_AttribLocationProjMtx = 0;
int g_AttribLocationPosition = 0, g_AttribLocationUV = 0, g_AttribLocationColor = 0; int g_AttribLocationPosition = 0, g_AttribLocationUV = 0, g_AttribLocationColor = 0;
unsigned int g_VboHandle = 0, g_VaoHandle = 0, g_ElementsHandle = 0; unsigned int g_VboHandle = 0, g_VaoHandle = 0, g_ElementsHandle = 0;
QOpenGLFunctions_3_3_Core *g_fun = nullptr;
}; };
} }

View File

@ -21,7 +21,7 @@ public:
return w->size(); return w->size();
} }
qreal devicePixelRatio() const override { qreal devicePixelRatio() const override {
return w->devicePixelRatioF(); return w->devicePixelRatio();
} }
bool isActive() const override { bool isActive() const override {
return w->isActiveWindow(); return w->isActiveWindow();

View File

@ -12,6 +12,12 @@ if (BUILD_PYTHON)
../3rdparty/python-console/modified/pyredirector.cc ../3rdparty/python-console/modified/pyredirector.cc
../3rdparty/python-console/modified/pyinterpreter.cc ../3rdparty/python-console/modified/pyinterpreter.cc
../3rdparty/imgui/imgui_widgets.cpp
../3rdparty/imgui/imgui_draw.cpp
../3rdparty/imgui/imgui.cpp
../3rdparty/imgui/imgui_demo.cpp
../3rdparty/qtimgui/ImGuiRenderer.cpp
../3rdparty/qtimgui/QtImGui.cpp
) )
endif() endif()
@ -27,7 +33,7 @@ set(GUI_LIBRARY_FILES_${ufamily} Qt5::Widgets Qt5::OpenGL ${OPENGL_LIBRARIES} Qt
add_library(gui_${family} STATIC ${GUI_SOURCE_FILES} ${PYTHON_CONSOLE_SRC} ${GUI_RESOURCE_FILES}) add_library(gui_${family} STATIC ${GUI_SOURCE_FILES} ${PYTHON_CONSOLE_SRC} ${GUI_RESOURCE_FILES})
include(${family}/family.cmake) include(${family}/family.cmake)
target_include_directories(gui_${family} PRIVATE ../${family} ${family} ../3rdparty/QtPropertyBrowser/src) target_include_directories(gui_${family} PRIVATE ../${family} ${family} ../3rdparty/QtPropertyBrowser/src ../3rdparty/imgui ../3rdparty/qtimgui/)
if (BUILD_PYTHON) if (BUILD_PYTHON)
target_include_directories(gui_${family} PRIVATE ../3rdparty/python-console ../3rdparty/python-console/modified) target_include_directories(gui_${family} PRIVATE ../3rdparty/python-console ../3rdparty/python-console/modified)
endif() endif()