From 011c3eeb71b306f284ee8059655228b2ec3656cf Mon Sep 17 00:00:00 2001 From: peri4 Date: Tue, 25 Apr 2023 17:34:47 +0300 Subject: [PATCH] version 1.1.0 add Renderer::GrabFormat flags --- CMakeLists.txt | 2 +- src/core/core/glframebuffer.cpp | 5 +++++ src/core/core/glframebuffer.h | 1 + src/core/render/renderer.cpp | 17 ++++++++--------- src/core/render/renderer.h | 9 ++++++--- src/core/view/qglview.h | 8 ++++++-- 6 files changed, 27 insertions(+), 15 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8cc2529..5e3c6fa 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -26,7 +26,7 @@ else() include(SHSTKQtMacros) set(QGLEngine_MAJOR 1) - set(QGLEngine_MINOR 0) + set(QGLEngine_MINOR 1) set(QGLEngine_REVISION 0) set(QGLEngine_SUFFIX "rc") set(QGLEngine_COMPANY SHS) diff --git a/src/core/core/glframebuffer.cpp b/src/core/core/glframebuffer.cpp index 4824d9e..8574f42 100644 --- a/src/core/core/glframebuffer.cpp +++ b/src/core/core/glframebuffer.cpp @@ -152,6 +152,11 @@ void Framebuffer::queryImage(int index) { } +void Framebuffer::queryImageF(int index) { + queryPoints(index, rect(), GL_FLOAT); +} + + uint Framebuffer::getPoint() const { if (!pbo.isInit() || (pbo_queried == 0)) return 0; uint ret = 0; diff --git a/src/core/core/glframebuffer.h b/src/core/core/glframebuffer.h index 424f728..3f77c5b 100644 --- a/src/core/core/glframebuffer.h +++ b/src/core/core/glframebuffer.h @@ -48,6 +48,7 @@ public: void queryPoint(int index, QPoint p); void queryPoints(int index, QRect rect, GLenum pixel_format = GL_UNSIGNED_BYTE); void queryImage(int index); + void queryImageF(int index); uint getPoint() const; QVector getPointsByte() const; QVector getPointsFloat() const; diff --git a/src/core/render/renderer.cpp b/src/core/render/renderer.cpp index c2cf7fb..1fed053 100644 --- a/src/core/render/renderer.cpp +++ b/src/core/render/renderer.cpp @@ -145,7 +145,7 @@ void Renderer::init(int width, int height) { initCoeffTextures(); markReloadTextures(); tex_env.init(); - if (is_grabbing) fbo_out.enablePixelBuffer(); + fbo_out.enablePixelBuffer(); need_init_shaders = true; } @@ -686,11 +686,15 @@ void Renderer::renderScene() { /// grab framebuffer phase.begin("grab"); - if (is_grabbing) { - fbo_out.queryImage(0); + if (view->grabFormats().testFlag(gfImage)) { + fbo_out.queryImage(cur_write_plane); last_img = fbo_out.getImage().mirrored(); - // qDebug() << last_img.size(); } + if (view->grabFormats().testFlag(gfFloat)) { + fbo_out.queryImageF(obrLighting); + last_img_f = fbo_out.getPointsFloat(); + } + // qDebug() << last_img.size(); phase.end(); /* @@ -728,11 +732,6 @@ void Renderer::setCameraLightMode(int m) { view->scene()->setLightsChanged(); } -void Renderer::setGrabImage(bool on) { - is_grabbing = on; - // fbo_out.enablePixelBuffer(); -} - void Renderer::addFramebufferEffect(FramebufferEffectBase * e) { e->r = this; diff --git a/src/core/render/renderer.h b/src/core/render/renderer.h index 47d0858..9986dbc 100644 --- a/src/core/render/renderer.h +++ b/src/core/render/renderer.h @@ -92,6 +92,10 @@ public: dbrBuffersCount, }; + enum GrabFormat { + gfImage = 1, + gfFloat = 2 + }; void init(int width, int height); void resize(int width, int height); @@ -99,9 +103,8 @@ public: void renderScene(); void setCameraLightMode(int m); int cameraLightMode() const { return camera_light_mode; } - void setGrabImage(bool on); - bool isGrabImage() const { return is_grabbing; } QImage getImage() const { return last_img; } + QVector getImageF() const { return last_img_f; } void addFramebufferEffect(FramebufferEffectBase * e); void clearFramebufferEffects() { fb_effects.clear(); } QVector framebufferEffects() const { return fb_effects; } @@ -156,8 +159,8 @@ private: QMap> cur_lights; QVector fb_effects; QImage last_img; + QVector last_img_f; QString obr_defines, timings; - bool is_grabbing = false; }; #endif // RENDERER_H diff --git a/src/core/view/qglview.h b/src/core/view/qglview.h index e9763d3..ae64020 100644 --- a/src/core/view/qglview.h +++ b/src/core/view/qglview.h @@ -158,9 +158,12 @@ public: context_menu.addActions(al); } void popupMenu(const QPoint & pos, QAction * at = nullptr) { context_menu.popup(pos, at); } - void setGrabImage(bool on) { renderer_.setGrabImage(on); } - bool isGrabImage() const { return renderer_.isGrabImage(); } + void setGrabImage(bool on) { grab_formats.setFlag(Renderer::gfImage, on); } + void setGrabImageF(bool on) { grab_formats.setFlag(Renderer::gfFloat, on); } + QFlags grabFormats() const { return grab_formats; } + void setGrabFormats(QFlags f) { grab_formats = f; } QImage getImage() const { return renderer_.getImage(); } + QVector getImageF() const { return renderer_.getImageF(); } void setShadowMapSize(QSize sz); void setTextureMapSize(QSize sz); @@ -212,6 +215,7 @@ private: QElapsedTimer time; GLint max_anisotropic, max_texture_chanels; RenderMode render_mode; + QFlags grab_formats; QSize prev_size, shadow_map_size; float lineWidth_, soft_shadows_quality; float fps_, fps_tm, fogDensity_, fogDecay_;