version 1.1.0
add Renderer::GrabFormat flags
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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<uint> getPointsByte() const;
|
||||
QVector<QVector4D> getPointsFloat() const;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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<QVector4D> getImageF() const { return last_img_f; }
|
||||
void addFramebufferEffect(FramebufferEffectBase * e);
|
||||
void clearFramebufferEffects() { fb_effects.clear(); }
|
||||
QVector<FramebufferEffectBase *> framebufferEffects() const { return fb_effects; }
|
||||
@@ -156,8 +159,8 @@ private:
|
||||
QMap<int, QList<Light *>> cur_lights;
|
||||
QVector<FramebufferEffectBase *> fb_effects;
|
||||
QImage last_img;
|
||||
QVector<QVector4D> last_img_f;
|
||||
QString obr_defines, timings;
|
||||
bool is_grabbing = false;
|
||||
};
|
||||
|
||||
#endif // RENDERER_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<Renderer::GrabFormat> grabFormats() const { return grab_formats; }
|
||||
void setGrabFormats(QFlags<Renderer::GrabFormat> f) { grab_formats = f; }
|
||||
QImage getImage() const { return renderer_.getImage(); }
|
||||
QVector<QVector4D> 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<Renderer::GrabFormat> grab_formats;
|
||||
QSize prev_size, shadow_map_size;
|
||||
float lineWidth_, soft_shadows_quality;
|
||||
float fps_, fps_tm, fogDensity_, fogDecay_;
|
||||
|
||||
Reference in New Issue
Block a user