44 #include <ACG/GL/acg_glew.hh>
46 #include "PostProcessorPoissonBlur.hh"
48 #include <ACG/GL/ScreenQuad.hh>
49 #include <ACG/GL/ShaderCache.hh>
50 #include <ACG/GL/GLFormatInfo.hh>
55 #include <QVBoxLayout>
56 #include <QPushButton>
59 PostProcessorPoissonBlur::PostProcessorPoissonBlur()
60 : blur_(new
ACG::PoissonBlurFilter(1.0f, 0.5f)), radius_(1.0f), minDist_(0.5f)
65 PostProcessorPoissonBlur::~PostProcessorPoissonBlur()
70 QString PostProcessorPoissonBlur::checkOpenGL()
73 return QString(
"Poisson blur plugin requires OpenGL 3.0!");
79 void PostProcessorPoissonBlur::postProcess(
ACG::GLState* _glstate,
const std::vector<const PostProcessorInput*>& _input,
const PostProcessorOutput& _output )
81 glBindFramebuffer(GL_FRAMEBUFFER, _output.fbo_);
82 glDrawBuffer(_output.drawBuffer_);
89 float scale = 1.0f / std::min(_input[0]->width, _input[0]->height);
91 blur_->execute(_input[0]->colorTex_, scale);
96 QAction * action =
new QAction(
"Gaussian Blur Options" ,
this );
98 connect(action,SIGNAL(triggered(
bool )),
this,SLOT(optionDialog(
bool )));
103 void PostProcessorPoissonBlur::optionDialog(
bool )
106 QDialog* optionsDlg =
new QDialog();
107 QVBoxLayout* layout =
new QVBoxLayout();
108 layout->setAlignment(Qt::AlignTop);
111 curColor.setRgbF(0.3f, 0.2f, 0.7f);
113 QLabel* label =
new QLabel(tr(
"Radius [0, 32]:"));
114 layout->addWidget(label);
116 QSlider* radiusSlider =
new QSlider(Qt::Horizontal);
117 radiusSlider->setRange(1, 32);
118 radiusSlider->setValue(1);
119 radiusSlider->setTracking(
true);
120 layout->addWidget(radiusSlider);
123 label =
new QLabel(tr(
"MinDistance [0.1, 10.0]:"));
124 layout->addWidget(label);
126 QSlider* minDistSlider =
new QSlider(Qt::Horizontal);
127 minDistSlider->setRange(1, 100);
128 minDistSlider->setValue(5);
129 minDistSlider->setTracking(
true);
130 layout->addWidget(minDistSlider);
133 QPushButton* btn =
new QPushButton(
"Recompute");
134 layout->addWidget(btn);
136 optionsDlg->setLayout(layout);
139 connect(btn, SIGNAL(clicked()),
this, SLOT(recompute()));
140 connect(radiusSlider, SIGNAL(sliderMoved(
int)),
this, SLOT(radiusChanged(
int)));
141 connect(minDistSlider, SIGNAL(sliderMoved(
int)),
this, SLOT(minDistChanged(
int)));
148 void PostProcessorPoissonBlur::recompute( )
155 void PostProcessorPoissonBlur::radiusChanged(
int r)
160 void PostProcessorPoissonBlur::minDistChanged(
int d)
162 minDist_ = float(d) * 0.1f;
165 #if QT_VERSION < 0x050000
Namespace providing different geometric functions concerning angles.
bool openGLVersion(const int _major, const int _minor)
QAction * optionsAction()
Return options menu.