Eine aufbereitete Darstellung der Quelle

 
     
 
 
Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 

Benutzer

Quelle  gskgpublur.glsl   Sprache: unbekannt

 
Spracherkennung für: .glsl vermutete Sprache: Unknown {[0] [0] [0]} [Methode: Schwerpunktbildung, einfache Gewichte, sechs Dimensionen]

#ifdef GSK_PREAMBLE
textures = 1;

graphene_rect_t rect;
GdkColor blur_color;
graphene_rect_t tex_rect;
graphene_size_t blur_direction;
float opacity;

variation: gboolean colorize;
#endif /* GSK_PREAMBLE */

#include "gskgpublurinstance.glsl"

/* blur radius (aka in_blur_direction) 0 is NOT supported and MUST be caught before */

PASS(0) vec2 _pos;
PASS_FLAT(1) Rect _rect;
PASS_FLAT(2) vec4 _blur_color;
PASS(3) vec2 _tex_coord;
PASS_FLAT(4) vec2 _tex_blur_step;
PASS_FLAT(5) uint _samples_per_side;
PASS_FLAT(7) vec3 _initial_gaussian;
PASS_FLAT(8) float _opacity;


#ifdef GSK_VERTEX_SHADER

void
run (out vec2 pos)
{
  Rect r = rect_from_gsk (in_rect);
  
  pos = rect_get_position (r);

  _pos = pos;
  _rect = r;
  _blur_color = output_color_from_alt (in_blur_color);
  Rect tex_rect = rect_from_gsk (in_tex_rect);
  _tex_coord = rect_get_coord (tex_rect, pos);

  float blur_radius = length (GSK_GLOBAL_SCALE * in_blur_direction);
  _tex_blur_step = GSK_GLOBAL_SCALE * in_blur_direction / blur_radius / rect_size (tex_rect);
  _samples_per_side = uint (floor (blur_radius));
  float sigma = blur_radius / 2.0;
  _initial_gaussian.x = 1.0 / (sqrt (2.0 * PI) * sigma);
  _initial_gaussian.y = exp (-0.5 / (sigma * sigma));
  _initial_gaussian.z = _initial_gaussian.y * _initial_gaussian.y;
  _opacity = in_opacity;
}

#endif


#ifdef GSK_FRAGMENT_SHADER

// Partially from http://callumhay.blogspot.com/2010/09/gaussian-blur-shader-glsl.html
void
run (out vec4 color,
     out vec2 position)
{
  vec3 incremental_gaussian = _initial_gaussian;
  vec4 sum = texture (GSK_TEXTURE0, _tex_coord) * incremental_gaussian.x;
  float coefficient_sum = incremental_gaussian.x;
  incremental_gaussian.xy *= incremental_gaussian.yz;
  vec2 p = _tex_blur_step;

  for (uint i = 0u; i < _samples_per_side; i++)
    {
      sum += texture (GSK_TEXTURE0, _tex_coord - p) * incremental_gaussian.x;
      sum += texture (GSK_TEXTURE0, _tex_coord + p) * incremental_gaussian.x;

      coefficient_sum += 2.0 * incremental_gaussian.x;
      incremental_gaussian.xy *= incremental_gaussian.yz;

      p += _tex_blur_step;
    }

  if (VARIATION_COLORIZE)
    color = output_color_alpha (_blur_color, _opacity * sum.a / coefficient_sum);
  else
    color = output_color_alpha (sum / coefficient_sum, _opacity);
  position = _pos;
}

#endif

[Dauer der Verarbeitung: 0.13 Sekunden, vorverarbeitet 2026-07-02]

                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Quellcodebibliothek
     Eigene Quellcodes
     Fremde Quellcodes
     Suchen

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik