kwin/effects/blur/blurshader.h
Vlad Zahorodnii 1fb9f6f13a Switch to SPDX license markers
The main advantage of SPDX license identifiers over the traditional
license headers is that it's more difficult to overlook inappropriate
licenses for kwin, for example GPL 3. We also don't have to copy a
lot of boilerplate text.

In order to create this change, I ran licensedigger -r -c from the
toplevel source directory.
2020-08-07 19:57:56 +00:00

103 lines
2.5 KiB
C++

/*
* SPDX-FileCopyrightText: 2010 Fredrik Höglund <fredrik@kde.org>
* SPDX-FileCopyrightText: 2018 Alex Nemeth <alex.nemeth329@gmail.com>
*
* SPDX-License-Identifier: GPL-2.0-or-later
*/
#ifndef BLURSHADER_H
#define BLURSHADER_H
#include <kwinglutils.h>
#include <QMatrix4x4>
#include <QObject>
#include <QScopedPointer>
#include <QVector2D>
#include <QVector4D>
namespace KWin
{
class BlurShader : public QObject
{
Q_OBJECT
public:
BlurShader(QObject *parent = nullptr);
~BlurShader() override;
bool isValid() const;
enum SampleType {
DownSampleType,
UpSampleType,
CopySampleType,
NoiseSampleType
};
void bind(SampleType sampleType);
void unbind();
void setModelViewProjectionMatrix(const QMatrix4x4 &matrix);
void setOffset(float offset);
void setTargetTextureSize(const QSize &renderTextureSize);
void setNoiseTextureSize(const QSize &noiseTextureSize);
void setTexturePosition(const QPoint &texPos);
void setBlurRect(const QRect &blurRect, const QSize &screenSize);
private:
QScopedPointer<GLShader> m_shaderDownsample;
QScopedPointer<GLShader> m_shaderUpsample;
QScopedPointer<GLShader> m_shaderCopysample;
QScopedPointer<GLShader> m_shaderNoisesample;
int m_mvpMatrixLocationDownsample;
int m_offsetLocationDownsample;
int m_renderTextureSizeLocationDownsample;
int m_halfpixelLocationDownsample;
int m_mvpMatrixLocationUpsample;
int m_offsetLocationUpsample;
int m_renderTextureSizeLocationUpsample;
int m_halfpixelLocationUpsample;
int m_mvpMatrixLocationCopysample;
int m_renderTextureSizeLocationCopysample;
int m_blurRectLocationCopysample;
int m_mvpMatrixLocationNoisesample;
int m_offsetLocationNoisesample;
int m_renderTextureSizeLocationNoisesample;
int m_noiseTextureSizeLocationNoisesample;
int m_texStartPosLocationNoisesample;
int m_halfpixelLocationNoisesample;
//Caching uniform values to aviod unnecessary setUniform calls
int m_activeSampleType = -1;
float m_offsetDownsample = 0.0;
QMatrix4x4 m_matrixDownsample;
float m_offsetUpsample = 0.0;
QMatrix4x4 m_matrixUpsample;
QMatrix4x4 m_matrixCopysample;
float m_offsetNoisesample = 0.0;
QVector2D m_noiseTextureSizeNoisesample;
QMatrix4x4 m_matrixNoisesample;
bool m_valid = false;
Q_DISABLE_COPY(BlurShader);
};
inline bool BlurShader::isValid() const
{
return m_valid;
}
} // namespace KWin
#endif