Eine aufbereitete Darstellung der Quelle

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

Benutzer

Quelle  gskgpuconvertbuiltin.glsl   Sprache: unbekannt

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

#ifdef GSK_PREAMBLE
textures = 1;
var_name = "gsk_gpu_convert_builtin";
struct_name = "GskGpuConvertBuiltin";

graphene_rect_t bounds;
graphene_rect_t tex_rect;
float opacity;

variation: GdkBuiltinColorStateId color_space;
variation: gboolean premultiply;
variation: gboolean reverse;
#endif /* GSK_PREAMBLE */

#include "gskgpuconvertbuiltininstance.glsl"

PASS(0) vec2 _pos;
PASS_FLAT(1) Rect _bounds;
PASS(2) vec2 _tex_coord;
PASS_FLAT(3) float _opacity;

#ifdef GSK_VERTEX_SHADER

void
run (out vec2 pos)
{
  Rect b = rect_from_gsk (in_bounds);

  pos = rect_get_position (b);

  _pos = pos;
  _bounds = b;
  _tex_coord = rect_get_coord (rect_from_gsk (in_tex_rect), pos);
  _opacity = in_opacity;
}

#endif


#ifdef GSK_FRAGMENT_SHADER

/* Note that these matrices are transposed from the C version */

const mat3 srgb_to_lms = mat3(
  0.41222147080.21190349820.0883024619,
  0.53633253630.68069954510.2817188376,
  0.05144599290.10739695660.6299787005
);

const mat3 lms_to_oklab = mat3(
  0.2104542553,  1.9779984951,  0.0259040371,
  0.7936177850, -2.4285922050,  0.7827717662,
 -0.0040720468,  0.4505937099, -0.8086757660
);

const mat3 oklab_to_lms = mat3(
  1.0,           1.0,           1.0,
  0.3963377774, -0.1055613458, -0.0894841775,
  0.2158037573, -0.0638541728, -1.2914855480
);

const mat3 lms_to_srgb = mat3(
  4.0767416621, -1.2684380046, -0.0041960863,
 -3.3077115913,  2.6097574011, -0.7034186147,
  0.2309699292, -0.3413193965,  1.7076147010
);

vec3
oklab_to_srgb_linear (vec3 color)
{
  vec3 lms = oklab_to_lms * color;

  lms = vec3 (pow (lms.r, 3.0),
              pow (lms.g, 3.0),
              pow (lms.b, 3.0));

  return lms_to_srgb * lms;
}

vec3
srgb_linear_to_oklab (vec3 color)
{
  vec3 lms = srgb_to_lms * color;

  lms = vec3 (pow (lms.r, 1.0/3.0),
              pow (lms.g, 1.0/3.0),
              pow (lms.b, 1.0/3.0));

  return lms_to_oklab * lms;
}

#define M_PI 3.14159265358979323846
#define RAD_TO_DEG(x) ((x)*180.0/M_PI)
#define DEG_TO_RAD(x) ((x)*M_PI/180.0)

float
normalize_hue (float h)
{
  while (h < 0.0)
    h += 360.0;
  while (h > 360.0)
    h -= 360.0;
  return h;
}

vec3
oklch_to_oklab (vec3 color)
{
  color.z = normalize_hue (color.z);

  return vec3 (color.x,
               color.y * cos (DEG_TO_RAD (color.z)),
               color.y * sin (DEG_TO_RAD (color.z)));
}

vec3
oklab_to_oklch (vec3 color)
{
  return vec3 (color.x,
               length (color.yz),
               RAD_TO_DEG (atan (color.z, color.y)));
}

vec3
oklch_to_srgb_linear (vec3 color)
{
  return oklab_to_srgb_linear (oklch_to_oklab (color));
}

vec3
srgb_linear_to_oklch (vec3 color)
{
  return oklab_to_oklch (srgb_linear_to_oklab (color));
}

vec4
convert_color_from_builtin (vec4 color)
{
  color = color_unpremultiply (color);

  switch (VARIATION_COLOR_SPACE)
    {
    case GDK_BUILTIN_COLOR_STATE_ID_OKLAB:
      return vec4 (oklab_to_srgb_linear (color.rgb), color.a);

    case GDK_BUILTIN_COLOR_STATE_ID_OKLCH:
      return vec4 (oklch_to_srgb_linear (color.rgb), color.a);

    default:
      return vec4(0.01.00.81.0);
    }
}

vec4
convert_color_to_builtin (vec4 color)
{
  switch (VARIATION_COLOR_SPACE)
    {
    case GDK_BUILTIN_COLOR_STATE_ID_OKLAB:
      return vec4 (srgb_linear_to_oklab (color.rgb), color.a);

    case GDK_BUILTIN_COLOR_STATE_ID_OKLCH:
      return vec4 (srgb_linear_to_oklch (color.rgb), color.a);

    default:
      return vec4(0.01.00.81.0);
    }
}

void
run (out vec4 color,
     out vec2 position)
{
  vec4 pixel = gsk_texture0 (_tex_coord);

  if (VARIATION_REVERSE)
    {
      pixel = alt_color_from_output (pixel);
      pixel = convert_color_to_builtin (pixel);
    }
  else
    {
      pixel = convert_color_from_builtin (pixel);
      pixel = output_color_from_alt (pixel);
    }

  float alpha = rect_coverage (_bounds, _pos) * _opacity;

  color = output_color_alpha (pixel, alpha);

  if (VARIATION_PREMULTIPLY)
    color_premultiply (color);

  position = _pos;
}

#endif

[Dauer der Verarbeitung: 0.17 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