44 #include <ACG/GL/acg_glew.hh>
46 #include "PostProcessorGaussBlur.hh"
48 #include <ACG/GL/ScreenQuad.hh>
49 #include <ACG/GL/ShaderCache.hh>
50 #include <ACG/GL/GLFormatInfo.hh>
56 #include <QVBoxLayout>
57 #include <ACG/QtWidgets/QtColorChooserButton.hh>
61 PostProcessorGaussBlur::PostProcessorGaussBlur()
62 : blurGauss_(32, 32, 4, 2.0f, GL_RGBA)
67 PostProcessorGaussBlur::~PostProcessorGaussBlur()
71 QString PostProcessorGaussBlur::checkOpenGL()
74 return QString(
"Gauss blur plugin requires OpenGL 3.0!");
80 void PostProcessorGaussBlur::postProcess(
ACG::GLState* _glstate,
const std::vector<const PostProcessorInput*>& _input,
const PostProcessorOutput& _output )
82 glBindFramebuffer(GL_FRAMEBUFFER, _output.fbo_);
83 glDrawBuffer(_output.drawBuffer_);
90 blurGauss_.resizeInput(_input[0]->width, _input[0]->height);
92 blurGauss_.execute(_input[0]->colorTex_, 0, 0, 0);
97 QAction * action =
new QAction(
"Gaussian Blur Options" ,
this );
99 connect(action,SIGNAL(triggered(
bool )),
this,SLOT(optionDialog(
bool )));
104 void PostProcessorGaussBlur::optionDialog(
bool )
107 QDialog* optionsDlg =
new QDialog();
108 QVBoxLayout* layout =
new QVBoxLayout();
109 layout->setAlignment(Qt::AlignTop);
112 curColor.setRgbF(0.3f, 0.2f, 0.7f);
114 QLabel* label =
new QLabel(tr(
"Radius [1, 32]:"));
115 layout->addWidget(label);
117 QSlider* radiusSlider =
new QSlider(Qt::Horizontal);
118 radiusSlider->setRange(1, 32);
119 radiusSlider->setValue(8);
120 radiusSlider->setTracking(
true);
121 layout->addWidget(radiusSlider);
124 label =
new QLabel(tr(
"Sigma [0.1, 20.0]:"));
125 layout->addWidget(label);
127 QSlider* sigmaSlider =
new QSlider(Qt::Horizontal);
128 sigmaSlider->setRange(1, 200);
129 sigmaSlider->setValue(10);
130 sigmaSlider->setTracking(
true);
131 layout->addWidget(sigmaSlider);
133 optionsDlg->setLayout(layout);
136 connect(radiusSlider, SIGNAL(sliderMoved(
int)),
this, SLOT(radiusChanged(
int)));
137 connect(sigmaSlider, SIGNAL(sliderMoved(
int)),
this, SLOT(sigmaChanged(
int)));
144 void PostProcessorGaussBlur::radiusChanged(
int _radius )
146 blurGauss_.setKernel(_radius, blurGauss_.
sigma());
149 void PostProcessorGaussBlur::sigmaChanged(
int _val )
151 float sigma = float(_val) * 0.1f;
152 blurGauss_.setKernel(blurGauss_.
radius(), sigma);
156 #if QT_VERSION < 0x050000
int radius() const
radius
bool openGLVersion(const int _major, const int _minor)
QAction * optionsAction()
Return options menu.
int sigma() const
blur sigma