diff options
Diffstat (limited to 'src/plugins/renderers/opengl/debug/imguirenderer.cpp')
-rw-r--r-- | src/plugins/renderers/opengl/debug/imguirenderer.cpp | 125 |
1 files changed, 73 insertions, 52 deletions
diff --git a/src/plugins/renderers/opengl/debug/imguirenderer.cpp b/src/plugins/renderers/opengl/debug/imguirenderer.cpp index 4a53117a0..e2ea3d203 100644 --- a/src/plugins/renderers/opengl/debug/imguirenderer.cpp +++ b/src/plugins/renderers/opengl/debug/imguirenderer.cpp @@ -29,16 +29,10 @@ #define GL_VERTEX_ARRAY_BINDING 0x85B5 #endif -#ifdef _MSC_VER -#pragma warning (disable: 4996) // 'This function or variable may be unsafe': strcpy, strdup, sprintf, vsnprintf, sscanf, fopen -#endif - QT_BEGIN_NAMESPACE -using namespace Qt3DRender; -using namespace Render; -using namespace Render::Debug; -using namespace Render::OpenGL; +namespace Qt3DRR = Qt3DRender::Render; +namespace Qt3DRRD = Qt3DRR::Debug; namespace { @@ -70,42 +64,69 @@ namespace { int vertexToPrimitiveCount(Qt3DRender::QGeometryRenderer::PrimitiveType primitiveType, int numVertices) { int nPrimitives = 0; switch (primitiveType) { - case QGeometryRenderer::Points: - case QGeometryRenderer::LineLoop: nPrimitives += numVertices; break; - case QGeometryRenderer::Triangles: nPrimitives += numVertices / 3; break; - case QGeometryRenderer::Lines: nPrimitives += numVertices / 2; break; - case QGeometryRenderer::TriangleFan: - case QGeometryRenderer::TriangleStrip: - case QGeometryRenderer::LineStrip: nPrimitives += numVertices - 1; break; - case QGeometryRenderer::TrianglesAdjacency: nPrimitives += numVertices / 6; break; - case QGeometryRenderer::TriangleStripAdjacency: - case QGeometryRenderer::LineStripAdjacency: nPrimitives += numVertices / 2 - 1; break; - case QGeometryRenderer::LinesAdjacency: nPrimitives += numVertices / 4; break; - case QGeometryRenderer::Patches: nPrimitives += 1; + case Qt3DRender::QGeometryRenderer::Points: + case Qt3DRender::QGeometryRenderer::LineLoop: + nPrimitives += numVertices; + break; + case Qt3DRender::QGeometryRenderer::Triangles: + nPrimitives += numVertices / 3; + break; + case Qt3DRender::QGeometryRenderer::Lines: + nPrimitives += numVertices / 2; + break; + case Qt3DRender::QGeometryRenderer::TriangleFan: + case Qt3DRender::QGeometryRenderer::TriangleStrip: + case Qt3DRender::QGeometryRenderer::LineStrip: + nPrimitives += numVertices - 1; + break; + case Qt3DRender::QGeometryRenderer::TrianglesAdjacency: + nPrimitives += numVertices / 6; + break; + case Qt3DRender::QGeometryRenderer::TriangleStripAdjacency: + case Qt3DRender::QGeometryRenderer::LineStripAdjacency: + nPrimitives += numVertices / 2 - 1; + break; + case Qt3DRender::QGeometryRenderer::LinesAdjacency: + nPrimitives += numVertices / 4; + break; + case Qt3DRender::QGeometryRenderer::Patches: + nPrimitives += 1; } return nPrimitives; } const char *primitiveTypeName(Qt3DRender::QGeometryRenderer::PrimitiveType primitiveType) { switch (primitiveType) { - case QGeometryRenderer::Points: return "Points"; - case QGeometryRenderer::LineLoop: return "LineLoop"; - case QGeometryRenderer::Triangles: return "Triangles"; - case QGeometryRenderer::TrianglesAdjacency: return "TriangleAdjacency"; - case QGeometryRenderer::TriangleFan: return "TriangleFan"; - case QGeometryRenderer::TriangleStrip: return "TriangleStrip"; - case QGeometryRenderer::TriangleStripAdjacency: return "TriangleStringAdjacency"; - case QGeometryRenderer::LineStrip: return "LineStrip"; - case QGeometryRenderer::LineStripAdjacency: return "LineStripAdjacency"; - case QGeometryRenderer::Lines: return "Lines"; - case QGeometryRenderer::LinesAdjacency: return "LinesAdjacency"; - case QGeometryRenderer::Patches: return "Patches"; + case Qt3DRender::QGeometryRenderer::Points: + return "Points"; + case Qt3DRender::QGeometryRenderer::LineLoop: + return "LineLoop"; + case Qt3DRender::QGeometryRenderer::Triangles: + return "Triangles"; + case Qt3DRender::QGeometryRenderer::TrianglesAdjacency: + return "TriangleAdjacency"; + case Qt3DRender::QGeometryRenderer::TriangleFan: + return "TriangleFan"; + case Qt3DRender::QGeometryRenderer::TriangleStrip: + return "TriangleStrip"; + case Qt3DRender::QGeometryRenderer::TriangleStripAdjacency: + return "TriangleStringAdjacency"; + case Qt3DRender::QGeometryRenderer::LineStrip: + return "LineStrip"; + case Qt3DRender::QGeometryRenderer::LineStripAdjacency: + return "LineStripAdjacency"; + case Qt3DRender::QGeometryRenderer::Lines: + return "Lines"; + case Qt3DRender::QGeometryRenderer::LinesAdjacency: + return "LinesAdjacency"; + case Qt3DRender::QGeometryRenderer::Patches: + return "Patches"; } return ""; } } -ImGuiRenderer::ImGuiRenderer(Qt3DRender::Render::OpenGL::Renderer *renderer) +Qt3DRRD::ImGuiRenderer::ImGuiRenderer(Qt3DRR::OpenGL::Renderer *renderer) : m_renderer(renderer) { ImGui::CreateContext(); @@ -132,9 +153,9 @@ ImGuiRenderer::ImGuiRenderer(Qt3DRender::Render::OpenGL::Renderer *renderer) m_jobsRange.first = m_jobsRange.second = 0.f; } -ImGuiRenderer::~ImGuiRenderer() = default; +Qt3DRRD::ImGuiRenderer::~ImGuiRenderer() = default; -void ImGuiRenderer::renderDebugOverlay(const std::vector<RenderView *> &renderViews, const RenderView *renderView, int jobsInLastFrame) +void Qt3DRRD::ImGuiRenderer::renderDebugOverlay(const std::vector<Qt3DRR::OpenGL::RenderView *> &renderViews, const Qt3DRR::OpenGL::RenderView *renderView, int jobsInLastFrame) { if (!newFrame(renderView)) return; @@ -162,7 +183,7 @@ void ImGuiRenderer::renderDebugOverlay(const std::vector<RenderView *> &renderVi { ImGui::Begin("Qt3D Profiling"); char caption[50]; - sprintf(caption, "Avg %.3f ms/frame (%.1f FPS)", static_cast<double>(1000.0f / ImGui::GetIO().Framerate), static_cast<double>(ImGui::GetIO().Framerate)); + snprintf(caption, sizeof(caption), "Avg %.3f ms/frame (%.1f FPS)", static_cast<double>(1000.0f / ImGui::GetIO().Framerate), static_cast<double>(ImGui::GetIO().Framerate)); ImGui::PlotLines("FPS", m_fpsLog, logIndex + 1, 0, caption, m_fpsRange.first, m_fpsRange.second, ImVec2(0, 80)); ImGui::PlotHistogram("Jobs", m_jobsLog, logIndex + 1, 0, nullptr, m_jobsRange.first, m_jobsRange.second, ImVec2(0, 80)); @@ -172,10 +193,10 @@ void ImGuiRenderer::renderDebugOverlay(const std::vector<RenderView *> &renderVi QSet<HGeometryRenderer> inUseGeometries; QSet<Qt3DCore::QNodeId> inUseTextures; for (int j=0; j<renderViewsCount; j++) { - RenderView *rv = renderViews.at(j); + Qt3DRR::OpenGL::RenderView *rv = renderViews.at(j); nCommands += rv->commandCount(); - rv->forEachCommand([&] (const RenderCommand &command) { - if (command.m_type != RenderCommand::Draw) + rv->forEachCommand([&](const Qt3DRR::OpenGL::RenderCommand &command) { + if (command.m_type != Qt3DRR::OpenGL::RenderCommand::Draw) return; nVertices += command.m_primitiveCount; nPrimitives += vertexToPrimitiveCount(command.m_primitiveType, command.m_primitiveCount); @@ -280,24 +301,24 @@ void ImGuiRenderer::renderDebugOverlay(const std::vector<RenderView *> &renderVi renderDrawList(ImGui::GetDrawData()); } -void ImGuiRenderer::setCapabilities(const QString &capabilities) +void Qt3DRRD::ImGuiRenderer::setCapabilities(const QString &capabilities) { m_capabilities = capabilities.toLatin1(); } -void ImGuiRenderer::showGLInfo() +void Qt3DRRD::ImGuiRenderer::showGLInfo() { ImGui::Begin("Open GL Details", &m_showGLInfoWindow); ImGui::Text("%s", m_capabilities.data()); ImGui::End(); } -void ImGuiRenderer::showRenderDetails(const std::vector<RenderView *> &renderViews) +void Qt3DRRD::ImGuiRenderer::showRenderDetails(const std::vector<Qt3DRR::OpenGL::RenderView *> &renderViews) { ImGui::Begin("Render Views", &m_showRenderDetailsWindow); int i = 1; - for (const RenderView *view: renderViews) { + for (const Qt3DRR::OpenGL::RenderView *view : renderViews) { QString label(QLatin1String("View ") + QString::number(i++)); if (ImGui::TreeNode(label.toLatin1().data())) { ImGui::Text("Viewport: (%.1f, %.1f, %.1f, %.1f)", view->viewport().x(), view->viewport().y(), @@ -311,7 +332,7 @@ void ImGuiRenderer::showRenderDetails(const std::vector<RenderView *> &renderVie ImGui::Text("Clear Stencil Value: %d", view->clearStencilValue()); int j = 1; - view->forEachCommand([&] (const RenderCommand &command) { + view->forEachCommand([&](const Qt3DRR::OpenGL::RenderCommand &command) { GeometryRenderer *rGeometryRenderer = m_renderer->nodeManagers()->data<GeometryRenderer, GeometryRendererManager>(command.m_geometryRenderer); QString label = QString(QLatin1String("Command %1 {%2}")).arg(QString::number(j++), QString::number(rGeometryRenderer->peerId().id())); if (ImGui::TreeNode(label.toLatin1().data())) { @@ -334,7 +355,7 @@ void ImGuiRenderer::showRenderDetails(const std::vector<RenderView *> &renderVie ImGui::End(); } -void ImGuiRenderer::renderDrawList(ImDrawData *draw_data) +void Qt3DRRD::ImGuiRenderer::renderDrawList(ImDrawData *draw_data) { // Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates != framebuffer coordinates) ImGuiIO& io = ImGui::GetIO(); @@ -431,7 +452,7 @@ void ImGuiRenderer::renderDrawList(ImDrawData *draw_data) m_funcs->glScissor(last_scissor_box[0], last_scissor_box[1], static_cast<GLsizei>(last_scissor_box[2]), static_cast<GLsizei>(last_scissor_box[3])); } -bool ImGuiRenderer::createFontsTexture() +bool Qt3DRRD::ImGuiRenderer::createFontsTexture() { // Build texture atlas ImGuiIO& io = ImGui::GetIO(); @@ -457,7 +478,7 @@ bool ImGuiRenderer::createFontsTexture() return true; } -bool ImGuiRenderer::createDeviceObjects() +bool Qt3DRRD::ImGuiRenderer::createDeviceObjects() { auto *glContext = m_renderer->submissionContext()->openGLContext(); if (glContext->format().majorVersion() < 3) { @@ -575,7 +596,7 @@ bool ImGuiRenderer::createDeviceObjects() return true; } -bool ImGuiRenderer::newFrame(const RenderView *renderView) +bool Qt3DRRD::ImGuiRenderer::newFrame(const Qt3DRR::OpenGL::RenderView *renderView) { if (!m_funcs) m_funcs = m_renderer->submissionContext()->openGLContext()->extraFunctions(); @@ -611,7 +632,7 @@ bool ImGuiRenderer::newFrame(const RenderView *renderView) return true; } -void ImGuiRenderer::onMouseChange(QMouseEvent *event) +void Qt3DRRD::ImGuiRenderer::onMouseChange(QMouseEvent *event) { ImGuiIO& io = ImGui::GetIO(); io.MousePos = ImVec2(event->pos().x(), event->pos().y()); @@ -620,14 +641,14 @@ void ImGuiRenderer::onMouseChange(QMouseEvent *event) m_mousePressed[2] = event->buttons() & Qt::MiddleButton; } -void ImGuiRenderer::onWheel(QWheelEvent *event) +void Qt3DRRD::ImGuiRenderer::onWheel(QWheelEvent *event) { // 5 lines per unit m_mouseWheelH += event->pixelDelta().x() / (ImGui::GetTextLineHeight()); m_mouseWheel += event->pixelDelta().y() / (5.f * ImGui::GetTextLineHeight()); } -void ImGuiRenderer::onKeyPressRelease(QKeyEvent *event) +void Qt3DRRD::ImGuiRenderer::onKeyPressRelease(QKeyEvent *event) { ImGuiIO& io = ImGui::GetIO(); if (keyMap.contains(event->key())) @@ -652,7 +673,7 @@ void ImGuiRenderer::onKeyPressRelease(QKeyEvent *event) #endif } -void ImGuiRenderer::processEvent(QEvent *event) +void Qt3DRRD::ImGuiRenderer::processEvent(QEvent *event) { switch (event->type()) { case QEvent::MouseMove: |