diff --git a/effects/blur/CMakeLists.txt b/effects/blur/CMakeLists.txt deleted file mode 100644 index 2dd7dc6756..0000000000 --- a/effects/blur/CMakeLists.txt +++ /dev/null @@ -1,20 +0,0 @@ -####################################### -# Effect - -# Source files -set( kwin4_effect_builtins_sources ${kwin4_effect_builtins_sources} - blur/blur.cpp - ) - -# .desktop files -install( FILES - blur/blur.desktop - DESTINATION ${SERVICES_INSTALL_DIR}/kwin ) - -# Data files -install( FILES - blur/data/blur.frag - blur/data/blur.vert - blur/data/blur-render.frag - blur/data/blur-render.vert - DESTINATION ${DATA_INSTALL_DIR}/kwin ) diff --git a/effects/blur/blur.cpp b/effects/blur/blur.cpp deleted file mode 100644 index 254e622717..0000000000 --- a/effects/blur/blur.cpp +++ /dev/null @@ -1,388 +0,0 @@ -/******************************************************************** - KWin - the KDE window manager - This file is part of the KDE project. - -Copyright (C) 2007 Rivo Laks - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*********************************************************************/ - -#include "blur.h" - -#include - -#include - -#include - - -namespace KWin -{ - -KWIN_EFFECT( blur, BlurEffect ) -KWIN_EFFECT_SUPPORTED( blur, BlurEffect::supported() ) - - -BlurEffect::BlurEffect() : Effect() - { - mSceneTexture = 0; - mTmpTexture = 0; - mBlurTexture = 0; - mSceneTarget = 0; - mTmpTarget = 0; - mBlurTarget = 0; - mBlurShader = 0; - mWindowShader = 0; - - mBlurRadius = 4; - mValid = loadData(); - if( !mValid ) - { - kWarning(1212) << "Loading failed"; - } - effects->addRepaintFull(); - } - -BlurEffect::~BlurEffect() - { - effects->addRepaintFull(); - delete mSceneTexture; - delete mTmpTexture; - delete mBlurTexture; - delete mSceneTarget; - delete mTmpTarget; - delete mBlurTarget; - delete mBlurShader; - delete mWindowShader; - } - - -bool BlurEffect::loadData() - { - // Create texture and render target - int texw = displayWidth(); - int texh = displayHeight(); - if( !GLTexture::NPOTTextureSupported() ) - { - kWarning( 1212 ) << "NPOT textures not supported, wasting some memory" ; - texw = nearestPowerOfTwo(texw); - texh = nearestPowerOfTwo(texh); - } - mSceneTexture = new GLTexture(texw, texh); - mSceneTexture->setFilter(GL_LINEAR); - mTmpTexture = new GLTexture(texw, texh); - mTmpTexture->setFilter(GL_LINEAR); - mBlurTexture = new GLTexture(texw, texh); - - mSceneTarget = new GLRenderTarget(mSceneTexture); - if( !mSceneTarget->valid() ) - return false; - mTmpTarget = new GLRenderTarget(mTmpTexture); - if( !mTmpTarget->valid() ) - return false; - mBlurTarget = new GLRenderTarget(mBlurTexture); - if( !mBlurTarget->valid() ) - return false; - - mBlurShader = loadShader("blur"); - if( !mBlurShader ) - return false; - mWindowShader = loadShader("blur-render"); - if( !mWindowShader ) - return false; - - mBlurShader->bind(); - mBlurShader->setUniform("inputTex", 0); - mBlurShader->setUniform("textureWidth", (float)texw); - mBlurShader->setUniform("textureHeight", (float)texh); - mBlurShader->unbind(); - - mWindowShader->bind(); - mWindowShader->setUniform("windowTex", 0); - mWindowShader->setUniform("backgroundTex", 4); - mWindowShader->setUniform("blurTextureWidth", (float)texw); - mWindowShader->setUniform("blurTextureHeight", (float)texh); - mWindowShader->unbind(); - - return true; - } - -GLShader* BlurEffect::loadShader(const QString& name) -{ - QString fragmentshader = KGlobal::dirs()->findResource("data", "kwin/" + name + ".frag"); - QString vertexshader = KGlobal::dirs()->findResource("data", "kwin/" + name + ".vert"); - if(fragmentshader.isEmpty() || vertexshader.isEmpty()) - { - kError(1212) << "Couldn't locate shader files for '" << name << "'" << endl; - return false; - } - GLShader* shader = new GLShader(vertexshader, fragmentshader); - if(!shader->isValid()) - { - kError(1212) << "Shader '" << name << "' failed to load!" << endl; - delete shader; - return 0; - } - return shader; -} - -bool BlurEffect::supported() - { - return GLRenderTarget::supported() && - GLShader::fragmentShaderSupported() && - (effects->compositingType() == OpenGLCompositing); - } - -QRegion BlurEffect::expandedRegion( const QRegion& region ) const - { - QRegion expandedregion; - foreach( const QRect& r, region.rects() ) - expandedregion += r.adjusted( -mBlurRadius, -mBlurRadius, mBlurRadius, mBlurRadius ); - return expandedregion; - } - -void BlurEffect::prePaintScreen( ScreenPrePaintData& data, int time ) - { - mTransparentWindows = 0; - mScreenDirty = QRegion(); - mBlurDirty = QRegion(); - mBlurMask = QRegion(); - - effects->prePaintScreen(data, time); - } - -void BlurEffect::prePaintWindow( EffectWindow* w, WindowPrePaintData& data, int time ) - { - // Expand the painted area - mBlurMask |= expandedRegion( data.paint ); - data.paint |= expandedRegion( mBlurMask ); - effects->prePaintWindow( w, data, time ); - - if( w->isPaintingEnabled() && ( data.mask & PAINT_WINDOW_TRANSLUCENT )) - mTransparentWindows++; - data.setTranslucent(); - } - -void BlurEffect::paintScreen( int mask, QRegion region, ScreenPaintData& data ) - { - // TODO: prePaintWindow() gets called _after_ paintScreen(), so we have no - // way of knowing here whether there will be any translucent windows or - // not. If we'd know that there's no translucent windows then we could - // render straight onto screen, saving some time. - // HACK disable blur when there is a fullscreen effects. Needed for e.g. cube to work - if( mValid && !effects->activeFullScreenEffect() /*&& mTransparentWindows*/ ) - { - // rendering everything onto render target - effects->pushRenderTarget(mSceneTarget); - effects->paintScreen( mask, region, data ); - effects->popRenderTarget(); - - // Copy changed areas back onto screen - mScreenDirty &= mBlurMask; - if( !mScreenDirty.isEmpty() ) - { - if( mask & PAINT_SCREEN_TRANSFORMED ) - { - // We don't want any transformations when working with our own - // textures, so load an identity matrix - glMatrixMode( GL_MODELVIEW ); - glPushMatrix(); - glLoadIdentity(); - } - - GLTexture* tex = mSceneTexture; - int pixels = 0; - tex->bind(); - tex->enableUnnormalizedTexCoords(); - foreach( QRect r, mScreenDirty.rects() ) // krazy:exclude=foreach - { - r.adjust(0, -1, 0, -1); - int rx2 = r.x() + r.width(); - int ry2 = r.y() + r.height(); - glBegin(GL_QUADS); - glTexCoord2f( r.x(), ry2 ); glVertex2f( r.x(), ry2 ); - glTexCoord2f( rx2 , ry2 ); glVertex2f( rx2 , ry2 ); - glTexCoord2f( rx2 , r.y() ); glVertex2f( rx2 , r.y() ); - glTexCoord2f( r.x(), r.y() ); glVertex2f( r.x(), r.y() ); - glEnd(); - pixels += r.width()*r.height(); - } - tex->disableUnnormalizedTexCoords(); - tex->unbind(); - - if( mask & PAINT_SCREEN_TRANSFORMED ) - { - // Restore the original matrix - glPopMatrix(); - } -// kDebug(1212) << "Copied" << mScreenDirty.rects().count() << "rects, pixels:" << pixels; - } - - } - else - { - effects->paintScreen( mask, region, data ); - } - } - -void BlurEffect::drawWindow( EffectWindow* w, int mask, QRegion region, WindowPaintData& data ) - { - // HACK disable blur when there is a fullscreen effects. Needed for e.g. cube to work - if( mValid && !effects->activeFullScreenEffect() /*&& mTransparentWindows*/ ) - { - if( mask & PAINT_WINDOW_TRANSLUCENT && - ((data.opacity != 1.0 || data.contents_opacity != 1.0 || data.decoration_opacity != 1.0 ) || - w->hasAlpha())) - { - - double blurAmount = data.opacity; - if( blurAmount >= 1.0 ) - { - blurAmount = data.contents_opacity; - if( blurAmount >= 1.0 ) - { - blurAmount = data.decoration_opacity; - if( blurAmount >= 1.0 ) - blurAmount = 1.0; - } - } - // Round to nearest 0.05 - blurAmount = double( qRound( blurAmount * 20.0 )) / 20.0; - - // Make sure the blur texture is up to date - if( mask & PAINT_SCREEN_TRANSFORMED ) - { - // We don't want any transformations when working with our own - // textures, so load an identity matrix - glPushMatrix(); - glLoadIdentity(); - } - // If we're having transformations, we don't know the window's - // transformed position on the screen and thus have to update the - // entire screen - if( mask & ( PAINT_WINDOW_TRANSFORMED | PAINT_SCREEN_TRANSFORMED | PAINT_SCREEN_WITH_TRANSFORMED_WINDOWS ) ) - updateBlurTexture( QRegion(0, 0, displayWidth(), displayHeight()) , blurAmount ); - else - updateBlurTexture( mBlurDirty , blurAmount ); - mBlurDirty = QRegion(); - if( mask & PAINT_SCREEN_TRANSFORMED ) - // Restore the original matrix - glPopMatrix(); - - // Set custom shader to render the window with - mWindowShader->bind(); - data.shader = mWindowShader; - // Put the blur texture to tex unit 4 - glActiveTexture(GL_TEXTURE4); - mBlurTexture->bind(); - glActiveTexture(GL_TEXTURE0); - - // Paint - effects->drawWindow( w, mask, region, data ); - - // Disable blur texture and shader - glActiveTexture(GL_TEXTURE4); - mBlurTexture->unbind(); - glActiveTexture(GL_TEXTURE0); - mWindowShader->unbind(); - } - else - { - // Opaque window - // Paint to the rendertarget (which is already being used) - effects->drawWindow( w, mask, region, data ); - } - // Mark the window's region as dirty - mScreenDirty += region; - mBlurDirty += region & mBlurMask; - } - else - // If there are no translucent windows then paint as usual - effects->drawWindow( w, mask, region, data ); - } - -void BlurEffect::updateBlurTexture(const QRegion& region, double blurAmount ) - { - QRect bounding = region.boundingRect(); - QVector rects = region.rects(); - int totalarea = 0; - foreach( const QRect &r, rects ) - totalarea += r.width() * r.height(); - if( (int)(totalarea * 1.33 + 100 ) < bounding.width() * bounding.height() ) - { - // Use small rects - updateBlurTexture(rects, blurAmount); - } - else - { - // Bounding rect is probably cheaper - QVector tmp( 1, bounding ); - updateBlurTexture( tmp , blurAmount ); - } - } - -void BlurEffect::updateBlurTexture(const QVector& rects, double blurAmount ) - { - // Blur - // First pass (vertical) - mBlurShader->bind(); - effects->pushRenderTarget(mTmpTarget); - mBlurShader->setAttribute("xBlur", 0.0f); - mBlurShader->setAttribute("yBlur", float(blurAmount) ); - - mSceneTexture->bind(); - - foreach( const QRect &r, rects ) - { - // We change x coordinates here because horizontal blur pass (which - // comes after this one) also uses pixels that are horizontally edging - // the blurred area. Thus we need to make sure that those pixels are - // also updated. - glBegin(GL_QUADS); - glVertex2f( r.x()-mBlurRadius , r.y() + r.height() ); - glVertex2f( r.x() + r.width()+mBlurRadius, r.y() + r.height() ); - glVertex2f( r.x() + r.width()+mBlurRadius, r.y() ); - glVertex2f( r.x()-mBlurRadius , r.y() ); - glEnd(); - } - - - mSceneTexture->unbind(); - effects->popRenderTarget(); - - // Second pass (horizontal) - effects->pushRenderTarget(mBlurTarget); - mBlurShader->setAttribute("xBlur", float(blurAmount) ); - mBlurShader->setAttribute("yBlur", 0.0f); - - mTmpTexture->bind(); - - foreach( const QRect &r, rects ) - { - glBegin(GL_QUADS); - glVertex2f( r.x() , r.y() + r.height() ); - glVertex2f( r.x() + r.width(), r.y() + r.height() ); - glVertex2f( r.x() + r.width(), r.y() ); - glVertex2f( r.x() , r.y() ); - glEnd(); - } - - - mTmpTexture->unbind(); - effects->popRenderTarget(); - mBlurShader->unbind(); - } - -} // namespace - diff --git a/effects/blur/blur.desktop b/effects/blur/blur.desktop deleted file mode 100644 index 14ab09df53..0000000000 --- a/effects/blur/blur.desktop +++ /dev/null @@ -1,159 +0,0 @@ -[Desktop Entry] -Name=Blur -Name[af]=Blur -Name[ar]=غشاوة -Name[be]=Blur -Name[bg]=Замъгляване -Name[bn]=ব্লার -Name[bn_IN]=Blur (ব্লার) -Name[ca]=Difuminat -Name[ca@valencia]=Difuminat -Name[cs]=Rozostření -Name[csb]=Rozmazóné -Name[da]=Slør -Name[de]=Verwischen -Name[el]=Θόλωμα -Name[en_GB]=Blur -Name[eo]=Malklarigi -Name[es]=Desenfocar -Name[et]=Hägu -Name[eu]=Lausotu -Name[fa]=محو -Name[fi]=Blur -Name[fr]=Flou -Name[fy]=Ferfagje -Name[ga]=Blur -Name[gl]=Desenfocar -Name[gu]=ઝાંખું -Name[he]=טשטש -Name[hi]=धुंधला करें -Name[hne]=धुंधला करव -Name[hr]=Mrlja -Name[hsb]=Młowojty -Name[hu]=Elmosódás -Name[id]=Samar -Name[is]=Móða -Name[it]=Sfocatura -Name[ja]=ぼかし -Name[kk]=Бұлдыр -Name[km]=ព្រិល​ -Name[kn]=ಮಾಸಲುಗೊಳಿಸು (ಬ್ಲರ್) -Name[ko]=흐리게 -Name[ku]=Blur -Name[lt]=Suliejimas -Name[lv]=Aizmiglot -Name[mai]=धुंधला करू -Name[mk]=Заматување -Name[ml]=മങ്ങിയതാക്കുക -Name[mr]=पुसट -Name[nb]=Slør -Name[nds]=Verwischen -Name[ne]=धब्बा -Name[nl]=Vervagen -Name[nn]=Uklar -Name[pa]=ਧੁੰਦਲਾ -Name[pl]=Rozmycie -Name[pt]=BlueFish -Name[pt_BR]=Borrar -Name[ro]=Estompare -Name[ru]=Размытие -Name[se]=Seagas -Name[si]=අපැහැදිලි කිරීම -Name[sk]=Rozmazanie -Name[sl]=Zameglitev -Name[sr]=Замућење -Name[sr@ijekavian]=Замућење -Name[sr@ijekavianlatin]=Zamućenje -Name[sr@latin]=Zamućenje -Name[sv]=Oskärpa -Name[ta]=மங்கலாக -Name[te]=బ్లర్ -Name[tg]=Шуста -Name[th]=ทำให้ไม่ชัดเจน -Name[tr]=Bulanıklaştırma -Name[uk]=Розмивання -Name[vi]=Che mờ -Name[wa]=Flou -Name[x-test]=xxBlurxx -Name[zh_CN]=模糊 -Name[zh_TW]=模糊 -Icon=preferences-system-windows-effect-blur -Comment=Blurs the background behind semi-transparent windows -Comment[ar]=تغشي الخلفية التي خلف النوافذ شبه الشفافة. -Comment[bg]=Замъгляване на фона на полупрозрачни прозорци -Comment[ca]=Difumina el fons de darrere de les finestres semitransparents -Comment[ca@valencia]=Difumina el fons de darrere de les finestres semitransparents -Comment[cs]=Rozostří pozadí poloprůhledných oken -Comment[csb]=Rozmazëje spòdla półprzezérnych òknów -Comment[da]=Slører baggrunden bag halvgennemsigtige vinduer -Comment[de]=Verwischt den Hintergrund halbtransparenter Fenster. -Comment[el]=Θόλωμα του φόντου πίσω από ημιδιαφανή παράθυρα -Comment[en_GB]=Blurs the background behind semi-transparent windows -Comment[eo]=Malklarigas la fonon de duon-travideblaj fenestroj -Comment[es]=Desenfoca el fondo de una ventana semi-transparente -Comment[et]=Poolläbipaistvate akende tausta hägustamine -Comment[eu]=Lausto atzekoaldea leiho erdigardenen atzean -Comment[fi]=Sumentaa puoliksi läpinäkyvien ikkunoiden taustan -Comment[fr]=Rend flou l'arrière-plan sous les fenêtres semi-transparentes -Comment[fy]=Ferfaget de eftergrûn fan healtrochsichtige finsters -Comment[ga]=Geamhaigh an cúlra taobh thiar d'fhuinneoga leath-thrédhearcacha -Comment[gl]=Desenfoca o fondo tras das fiestras semitransparentes -Comment[gu]=પાશ્વભાગને અર્ધ-પારદર્શક વિન્ડોઝમાં ઝાંખું કરે છે -Comment[he]=טישטוש הרקע של חלונות שקופים למחצה -Comment[hi]=अर्ध-पारदर्शी विंडो के पीछे पृष्ठभूमि को धुंधला करता है -Comment[hne]=अल्पपारदर्सी विंडो के पिछोत अंगना ल धुंधला करथे -Comment[hr]=Zamrlja pozadinu iza poluprozirnih prozora -Comment[hsb]=Stwori młowojty pozadk za połpřewidnymi woknami. -Comment[hu]=Elmosódottá teszi a félig áttetsző ablakok hátterét -Comment[id]=Samarkan latar belakang di belakang jendela semi-transparan -Comment[is]=Móðar bakgrunn aftan við hálfgegnsæa glugga -Comment[it]=Sfoca lo sfondo dietro le finestre semitrasparenti -Comment[ja]=半透明のウィンドウの背後をぼかします -Comment[kk]=Шала мөлдір терезелердің аясын бұлдырлатады -Comment[km]=ធ្វើ​ឲ្យ​ផ្ទៃ​ខាងក្រោយ​ព្រិលៗ​ខាង​ក្រោយ​បង្អួច​ថ្លា​ពាក់កណ្ដាល -Comment[kn]=ಅರೆ-ಪಾರದರ್ಶಕ ಕಿಟಕಿಗಳ ಹಿನ್ನೆಲೆಯನ್ನು ಮಾಸಲುಗೊಳಿಸುತ್ತದೆ -Comment[ko]=반투명 창의 뒷배경을 흐리게 합니다 -Comment[lt]=Sulieja pusiau permatomų langų foną -Comment[lv]=Aizmiglo fonu aiz puscaurspīdīgiem logiem -Comment[mk]=Ја заматува подлогата зад полупроѕирни прозорци -Comment[ml]=പാതിസുതാര്യ ജാലകങ്ങളുടെ പിന്നാമ്പുറം മങ്ങിയതാക്കുന്നു. -Comment[mr]=अर्ध-पारदर्शी चौकटची पार्श्वभूमी फुसट करतो -Comment[nb]=Slører bakgrunnen til delvis gjennomsiktige vinduer -Comment[nds]=Verwischt den Achtergrund achter halfdörsichtig Finstern -Comment[nl]=Vervaagt de achtergrond van halftransparante vensters -Comment[nn]=Gjer bakgrunnen til halvgjennomsiktige vindauge uklar -Comment[pa]=ਬਲੌਰੀ (ਅਰਧ-ਪਾਰਦਰਸ਼ੀ) (ਬਲਰ) ਵਿੰਡੋਜ਼ ਲਈ ਧੁੰਦਲੀ ਬੈਕਗਰਾਊਂਡ -Comment[pl]=Rozmywa tło za półprzezroczystymi oknami -Comment[pt]=Borra o fundo por trás das janelas semi-transparentes -Comment[pt_BR]=Borra o plano de fundo por trás das janelas semi-transparentes -Comment[ro]=Estompează fundalul în spatele ferestrelor semitransparente -Comment[ru]=Показывать размытый фон под полупрозрачным окном -Comment[si]=අර්ධ පාරදෘශ්‍ය කවුළු පසුපසින් පසුබිම අපැහැදිලි කරන්න -Comment[sk]=Rozmaže pozadie za polopriehľadnými oknami -Comment[sl]=Zamegli ozadje za na pol prozornmi okni -Comment[sr]=Замућује позадину иза полупровидних прозора -Comment[sr@ijekavian]=Замућује позадину иза полупровидних прозора -Comment[sr@ijekavianlatin]=Zamućuje pozadinu iza poluprovidnih prozora -Comment[sr@latin]=Zamućuje pozadinu iza poluprovidnih prozora -Comment[sv]=Gör bakgrunden bakom halvgenomskinliga fönster suddig -Comment[ta]=Blurs the background behind semi-transparent windows -Comment[th]=ทำให้พื้นหลังของหน้าต่างแบบกึ่งโปร่งใสดูไม่ชัดเจน -Comment[tr]=Yarı şeffaf pencerelerin arkaplanını bulanıklaştırır -Comment[uk]=Розмивання тла напівпрозорих вікон -Comment[wa]=Rind flou l' fond pa drî les purneas dmey transparints -Comment[x-test]=xxBlurs the background behind semi-transparent windowsxx -Comment[zh_CN]=模糊半透明窗口的背景 -Comment[zh_TW]=將半透明視窗後的背景弄模糊 - -Type=Service -X-KDE-ServiceTypes=KWin/Effect -X-KDE-PluginInfo-Author=Rivo Laks -X-KDE-PluginInfo-Email=rivolaks@hot.ee -X-KDE-PluginInfo-Name=kwin4_effect_blur -X-KDE-PluginInfo-Version=0.2.0 -X-KDE-PluginInfo-Category=Appearance -X-KDE-PluginInfo-Depends= -X-KDE-PluginInfo-License=GPL -X-KDE-PluginInfo-EnabledByDefault=false -X-KDE-Library=kwin4_effect_builtins -X-KDE-Ordering=85 diff --git a/effects/blur/blur.h b/effects/blur/blur.h deleted file mode 100644 index e18c8b62c5..0000000000 --- a/effects/blur/blur.h +++ /dev/null @@ -1,86 +0,0 @@ -/******************************************************************** - KWin - the KDE window manager - This file is part of the KDE project. - -Copyright (C) 2007 Rivo Laks - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*********************************************************************/ - -#ifndef KWIN_BLUR_H -#define KWIN_BLUR_H - -// Include with base class for effects. -#include - -#include - -template< class T > class QVector; - - -namespace KWin -{ - -class GLRenderTarget; -class GLTexture; -class GLShader; - -/** - * Blurs the background of translucent windows - **/ -class BlurEffect : public Effect - { - public: - BlurEffect(); - ~BlurEffect(); - - virtual void prePaintScreen( ScreenPrePaintData& data, int time ); - virtual void paintScreen( int mask, QRegion region, ScreenPaintData& data ); - - virtual void prePaintWindow( EffectWindow* w, WindowPrePaintData& data, int time ); - virtual void drawWindow( EffectWindow* w, int mask, QRegion region, WindowPaintData& data ); - - static bool supported(); - - protected: - bool loadData(); - GLShader* loadShader(const QString& name); - void updateBlurTexture(const QVector& rects, double blurAmount ); - void updateBlurTexture(const QRegion& region , double blurAmount ); - - QRegion expandedRegion( const QRegion& r ) const; - - private: - GLTexture* mSceneTexture; - GLTexture* mTmpTexture; - GLTexture* mBlurTexture; - GLRenderTarget* mSceneTarget; - GLRenderTarget* mTmpTarget; - GLRenderTarget* mBlurTarget; - GLShader* mBlurShader; - GLShader* mWindowShader; - bool mValid; - int mBlurRadius; - - int mTransparentWindows; - - QRegion mBlurDirty; - QRegion mScreenDirty; - - QRegion mBlurMask; - }; - -} // namespace - -#endif diff --git a/effects/blur/data/blur-render.frag b/effects/blur/data/blur-render.frag deleted file mode 100644 index bf73f00ae7..0000000000 --- a/effects/blur/data/blur-render.frag +++ /dev/null @@ -1,40 +0,0 @@ -uniform sampler2D windowTex; -uniform sampler2D backgroundTex; -uniform float blurTextureWidth; -uniform float blurTextureHeight; -uniform float opacity; -uniform float saturation; -uniform float brightness; - - -// Converts pixel coordinates to texture coordinates -vec2 pix2tex(vec2 pix) -{ - return vec2(pix.x / blurTextureWidth, pix.y / blurTextureHeight); -} - -// Returns color of the window at given texture coordinate, taking into -// account brightness and saturation, but not opacity -vec4 windowColor(vec2 texcoord) -{ - vec4 color = texture2D(windowTex, texcoord); - // Apply saturation - float grayscale = dot(vec3(0.30, 0.59, 0.11), color.rgb); - color.rgb = mix(vec3(grayscale), color.rgb, saturation); - // Apply brightness - color.rgb = color.rgb * brightness; - // and return - return color; -} - -void main() -{ - vec2 blurtexcoord = pix2tex(gl_FragCoord.xy); - - vec4 winColor = windowColor(gl_TexCoord[0].xy); - vec3 tex = mix(texture2D(backgroundTex, blurtexcoord).rgb, - winColor.rgb, winColor.a * opacity); - - gl_FragColor = vec4(tex, pow(winColor.a, 0.2)); -} - diff --git a/effects/blur/data/blur-render.vert b/effects/blur/data/blur-render.vert deleted file mode 100644 index cbe3c17bd6..0000000000 --- a/effects/blur/data/blur-render.vert +++ /dev/null @@ -1,5 +0,0 @@ -void main() -{ - gl_TexCoord[0] = gl_MultiTexCoord0 * gl_TextureMatrix[0]; - gl_Position = ftransform(); -} diff --git a/effects/blur/data/blur.frag b/effects/blur/data/blur.frag deleted file mode 100644 index 72e867a4df..0000000000 --- a/effects/blur/data/blur.frag +++ /dev/null @@ -1,39 +0,0 @@ -uniform sampler2D inputTex; - -varying vec2 samplePos1; -varying vec2 samplePos2; -varying vec2 samplePos3; -varying vec2 samplePos4; -varying vec2 samplePos5; - - -// If defined, use five samples (blur radius = 5), otherwise 3 samples (radius = 3) -#define FIVE_SAMPLES - - -vec3 blurTex(vec2 pos, float strength) -{ - return texture2D(inputTex, pos).rgb * strength; -} - -void main() -{ - // Do the gaussian blur - // This blur actually has a radius of 4, but we take advantage of gpu's - // linear texture filtering, so e.g. 1.5 actually gives us both texels - // 1 and 2 -#ifdef FIVE_SAMPLES - vec3 tex = blurTex(samplePos1, 0.30); - tex += blurTex(samplePos2, 0.25); - tex += blurTex(samplePos3, 0.25); - tex += blurTex(samplePos4, 0.1); - tex += blurTex(samplePos5, 0.1); -#else - vec3 tex = blurTex(samplePos1, 0.40); - tex += blurTex(samplePos2, 0.30); - tex += blurTex(samplePos3, 0.30); -#endif - - gl_FragColor = vec4(tex, 1.0); -} - diff --git a/effects/blur/data/blur.vert b/effects/blur/data/blur.vert deleted file mode 100644 index 4eb1e0d0ed..0000000000 --- a/effects/blur/data/blur.vert +++ /dev/null @@ -1,28 +0,0 @@ -varying vec2 samplePos1; -varying vec2 samplePos2; -varying vec2 samplePos3; -varying vec2 samplePos4; -varying vec2 samplePos5; - -uniform float textureWidth; -uniform float textureHeight; -attribute float xBlur; -attribute float yBlur; - - -vec2 mkSamplePos(vec2 origin, float offset) -{ - vec2 foo = origin + vec2(xBlur, yBlur) * offset; - return vec2(foo.x / textureWidth, 1.0 - foo.y / textureHeight); -} - -void main() -{ - samplePos1 = mkSamplePos(gl_Vertex.xy, 0.0); - samplePos2 = mkSamplePos(gl_Vertex.xy, -1.5); - samplePos3 = mkSamplePos(gl_Vertex.xy, 1.5); - samplePos4 = mkSamplePos(gl_Vertex.xy, 3.5); - samplePos5 = mkSamplePos(gl_Vertex.xy, -3.5); - - gl_Position = ftransform(); -}