version 1.1.0

add Renderer::GrabFormat flags
This commit is contained in:
2023-04-25 17:34:47 +03:00
parent 0151e34477
commit 011c3eeb71
6 changed files with 27 additions and 15 deletions

View File

@@ -26,7 +26,7 @@ else()
include(SHSTKQtMacros) include(SHSTKQtMacros)
set(QGLEngine_MAJOR 1) set(QGLEngine_MAJOR 1)
set(QGLEngine_MINOR 0) set(QGLEngine_MINOR 1)
set(QGLEngine_REVISION 0) set(QGLEngine_REVISION 0)
set(QGLEngine_SUFFIX "rc") set(QGLEngine_SUFFIX "rc")
set(QGLEngine_COMPANY SHS) set(QGLEngine_COMPANY SHS)

View File

@@ -152,6 +152,11 @@ void Framebuffer::queryImage(int index) {
} }
void Framebuffer::queryImageF(int index) {
queryPoints(index, rect(), GL_FLOAT);
}
uint Framebuffer::getPoint() const { uint Framebuffer::getPoint() const {
if (!pbo.isInit() || (pbo_queried == 0)) return 0; if (!pbo.isInit() || (pbo_queried == 0)) return 0;
uint ret = 0; uint ret = 0;

View File

@@ -48,6 +48,7 @@ public:
void queryPoint(int index, QPoint p); void queryPoint(int index, QPoint p);
void queryPoints(int index, QRect rect, GLenum pixel_format = GL_UNSIGNED_BYTE); void queryPoints(int index, QRect rect, GLenum pixel_format = GL_UNSIGNED_BYTE);
void queryImage(int index); void queryImage(int index);
void queryImageF(int index);
uint getPoint() const; uint getPoint() const;
QVector<uint> getPointsByte() const; QVector<uint> getPointsByte() const;
QVector<QVector4D> getPointsFloat() const; QVector<QVector4D> getPointsFloat() const;

View File

@@ -145,7 +145,7 @@ void Renderer::init(int width, int height) {
initCoeffTextures(); initCoeffTextures();
markReloadTextures(); markReloadTextures();
tex_env.init(); tex_env.init();
if (is_grabbing) fbo_out.enablePixelBuffer(); fbo_out.enablePixelBuffer();
need_init_shaders = true; need_init_shaders = true;
} }
@@ -686,11 +686,15 @@ void Renderer::renderScene() {
/// grab framebuffer /// grab framebuffer
phase.begin("grab"); phase.begin("grab");
if (is_grabbing) { if (view->grabFormats().testFlag(gfImage)) {
fbo_out.queryImage(0); fbo_out.queryImage(cur_write_plane);
last_img = fbo_out.getImage().mirrored(); 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(); phase.end();
/* /*
@@ -728,11 +732,6 @@ void Renderer::setCameraLightMode(int m) {
view->scene()->setLightsChanged(); view->scene()->setLightsChanged();
} }
void Renderer::setGrabImage(bool on) {
is_grabbing = on;
// fbo_out.enablePixelBuffer();
}
void Renderer::addFramebufferEffect(FramebufferEffectBase * e) { void Renderer::addFramebufferEffect(FramebufferEffectBase * e) {
e->r = this; e->r = this;

View File

@@ -92,6 +92,10 @@ public:
dbrBuffersCount, dbrBuffersCount,
}; };
enum GrabFormat {
gfImage = 1,
gfFloat = 2
};
void init(int width, int height); void init(int width, int height);
void resize(int width, int height); void resize(int width, int height);
@@ -99,9 +103,8 @@ public:
void renderScene(); void renderScene();
void setCameraLightMode(int m); void setCameraLightMode(int m);
int cameraLightMode() const { return camera_light_mode; } int cameraLightMode() const { return camera_light_mode; }
void setGrabImage(bool on);
bool isGrabImage() const { return is_grabbing; }
QImage getImage() const { return last_img; } QImage getImage() const { return last_img; }
QVector<QVector4D> getImageF() const { return last_img_f; }
void addFramebufferEffect(FramebufferEffectBase * e); void addFramebufferEffect(FramebufferEffectBase * e);
void clearFramebufferEffects() { fb_effects.clear(); } void clearFramebufferEffects() { fb_effects.clear(); }
QVector<FramebufferEffectBase *> framebufferEffects() const { return fb_effects; } QVector<FramebufferEffectBase *> framebufferEffects() const { return fb_effects; }
@@ -156,8 +159,8 @@ private:
QMap<int, QList<Light *>> cur_lights; QMap<int, QList<Light *>> cur_lights;
QVector<FramebufferEffectBase *> fb_effects; QVector<FramebufferEffectBase *> fb_effects;
QImage last_img; QImage last_img;
QVector<QVector4D> last_img_f;
QString obr_defines, timings; QString obr_defines, timings;
bool is_grabbing = false;
}; };
#endif // RENDERER_H #endif // RENDERER_H

View File

@@ -158,9 +158,12 @@ public:
context_menu.addActions(al); context_menu.addActions(al);
} }
void popupMenu(const QPoint & pos, QAction * at = nullptr) { context_menu.popup(pos, at); } void popupMenu(const QPoint & pos, QAction * at = nullptr) { context_menu.popup(pos, at); }
void setGrabImage(bool on) { renderer_.setGrabImage(on); } void setGrabImage(bool on) { grab_formats.setFlag(Renderer::gfImage, on); }
bool isGrabImage() const { return renderer_.isGrabImage(); } void setGrabImageF(bool on) { grab_formats.setFlag(Renderer::gfFloat, on); }
QFlags<Renderer::GrabFormat> grabFormats() const { return grab_formats; }
void setGrabFormats(QFlags<Renderer::GrabFormat> f) { grab_formats = f; }
QImage getImage() const { return renderer_.getImage(); } QImage getImage() const { return renderer_.getImage(); }
QVector<QVector4D> getImageF() const { return renderer_.getImageF(); }
void setShadowMapSize(QSize sz); void setShadowMapSize(QSize sz);
void setTextureMapSize(QSize sz); void setTextureMapSize(QSize sz);
@@ -212,6 +215,7 @@ private:
QElapsedTimer time; QElapsedTimer time;
GLint max_anisotropic, max_texture_chanels; GLint max_anisotropic, max_texture_chanels;
RenderMode render_mode; RenderMode render_mode;
QFlags<Renderer::GrabFormat> grab_formats;
QSize prev_size, shadow_map_size; QSize prev_size, shadow_map_size;
float lineWidth_, soft_shadows_quality; float lineWidth_, soft_shadows_quality;
float fps_, fps_tm, fogDensity_, fogDecay_; float fps_, fps_tm, fogDensity_, fogDecay_;