From 168ac5065d07bf058ea567b7a1f2c7ed2b1f3d47 Mon Sep 17 00:00:00 2001 From: Bruno Herbelin Date: Tue, 3 May 2022 23:30:21 +0200 Subject: [PATCH] Performance improvement: disable render when No ImageFilter selected --- ImageFilter.cpp | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/ImageFilter.cpp b/ImageFilter.cpp index 088ee14..3f5e602 100644 --- a/ImageFilter.cpp +++ b/ImageFilter.cpp @@ -89,7 +89,7 @@ std::list< ImageFilter > ImageFilter::presets = { ImageFilter("Sharp Edge", "shaders/filters/sharpenedge.glsl", "", { { "Strength", 0.5} }), ImageFilter("Freichen", "shaders/filters/freichen.glsl", "", { { "Factor", 0.5} }), ImageFilter("Sobel", "shaders/filters/sobel.glsl", "", { { "Factor", 0.5} }), - ImageFilter("Pixelate", "shaders/filters/pixelate.glsl", "", { { "Size", 0.5}, { "Edge", 0.5} }), + ImageFilter("Pixelate", "shaders/filters/pixelate.glsl", "", { { "Size", 0.5}, { "Sharpen", 0.5} }), ImageFilter("Chromakey","shaders/filters/chromakey.glsl", "", { { "Red", 0.05}, { "Green", 0.63}, { "Blue", 0.14}, { "Tolerance", 0.54} }), ImageFilter("Fisheye", "shaders/filters/fisheye.glsl", "", { { "Factor", 0.5} }), }; @@ -284,7 +284,7 @@ void ImageFilteringShader::copy(ImageFilteringShader const& S) } -ImageFilterRenderer::ImageFilterRenderer(glm::vec3 resolution): enabled_(true) +ImageFilterRenderer::ImageFilterRenderer(glm::vec3 resolution): enabled_(false) { shaders_.first = new ImageFilteringShader; surfaces_.first = new Surface(shaders_.first); @@ -327,13 +327,16 @@ void ImageFilterRenderer::draw() { if ( enabled_ ) { - // render filtered surface into frame buffer + // FIRST PASS + // render input surface into frame buffer buffers_.first->begin(); surfaces_.first->draw(glm::identity(), buffers_.first->projection()); buffers_.first->end(); + // SECOND PASS if ( buffers_.second && surfaces_.second ) { - // render filtered surface into frame buffer + // render filtered surface from first pass into frame buffer + surfaces_.second->setTextureIndex( buffers_.first->texture() ); buffers_.second->begin(); surfaces_.second->draw(glm::identity(), buffers_.second->projection()); buffers_.second->end(); @@ -351,6 +354,9 @@ void ImageFilterRenderer::setFilter(const ImageFilter &f, std::promise codes = filter_.code(); @@ -378,7 +384,6 @@ void ImageFilterRenderer::setFilter(const ImageFilter &f, std::promisesetTextureIndex( buffers_.first->texture() ); buffers_.second = new FrameBuffer( buffers_.first->resolution(), true ); }