mirror of
https://github.com/brl/mutter.git
synced 2024-11-23 00:20:42 -05:00
[test-cogl-vertex-buffer] Use clutter_color_from_hls instead of hsl_to_rgb
There is no need for a custom hsl to rgb converter since Clutter implements this logic; originally it wasn't quite as optimal, but that has now been fixed.
This commit is contained in:
parent
bb93a98762
commit
b5a35a0f0b
@ -41,8 +41,6 @@
|
|||||||
#define HSL_OFFSET 0.5 /* the hue that we map an amplitude of 0 too */
|
#define HSL_OFFSET 0.5 /* the hue that we map an amplitude of 0 too */
|
||||||
#define HSL_SCALE 0.25
|
#define HSL_SCALE 0.25
|
||||||
|
|
||||||
#define USE_CLUTTER_COLOR 1
|
|
||||||
|
|
||||||
typedef struct _TestState
|
typedef struct _TestState
|
||||||
{
|
{
|
||||||
ClutterActor *dummy;
|
ClutterActor *dummy;
|
||||||
@ -54,62 +52,6 @@ typedef struct _TestState
|
|||||||
ClutterTimeline *timeline;
|
ClutterTimeline *timeline;
|
||||||
} TestState;
|
} TestState;
|
||||||
|
|
||||||
#ifndef USE_CLUTTER_COLOR
|
|
||||||
/* This algorithm is adapted from the book:
|
|
||||||
* Fundamentals of Interactive Computer Graphics by Foley and van Dam
|
|
||||||
*/
|
|
||||||
static void
|
|
||||||
hsl_to_rgb (float h, float s, float l,
|
|
||||||
GLubyte *r, GLubyte *g, GLubyte *b)
|
|
||||||
|
|
||||||
{
|
|
||||||
float tmp1, tmp2;
|
|
||||||
float tmp3[3];
|
|
||||||
float clr[3];
|
|
||||||
int i;
|
|
||||||
|
|
||||||
if (l == 0)
|
|
||||||
{
|
|
||||||
*r = *g = *b = 0;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (s == 0)
|
|
||||||
{
|
|
||||||
*r = *g = *b = l;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
tmp2 = ((l <= 0.5) ? l * (1.0 + s) : l + s - (l * s));
|
|
||||||
tmp1 = 2.0 * l - tmp2;
|
|
||||||
|
|
||||||
tmp3[0] = h + 1.0 / 3.0;
|
|
||||||
tmp3[1] = h;
|
|
||||||
tmp3[2] = h - 1.0 / 3.0;
|
|
||||||
|
|
||||||
for (i = 0; i < 3; i++)
|
|
||||||
{
|
|
||||||
if (tmp3[i] < 0)
|
|
||||||
tmp3[i] += 1.0;
|
|
||||||
if (tmp3[i] > 1)
|
|
||||||
tmp3[i] -= 1.0;
|
|
||||||
|
|
||||||
if (6.0 * tmp3[i] < 1.0)
|
|
||||||
clr[i] = tmp1 + (tmp2 - tmp1) * tmp3[i] * 6.0;
|
|
||||||
else if (2.0 * tmp3[i] < 1.0)
|
|
||||||
clr[i] = tmp2;
|
|
||||||
else if (3.0 * tmp3[i] < 2.0)
|
|
||||||
clr[i] = (tmp1 + (tmp2 - tmp1) * ((2.0 / 3.0) - tmp3[i]) * 6.0);
|
|
||||||
else
|
|
||||||
clr[i] = tmp1;
|
|
||||||
}
|
|
||||||
|
|
||||||
*r = clr[0] * 255.0;
|
|
||||||
*g = clr[1] * 255.0;
|
|
||||||
*b = clr[2] * 255.0;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
frame_cb (ClutterTimeline *timeline,
|
frame_cb (ClutterTimeline *timeline,
|
||||||
gint frame_num,
|
gint frame_num,
|
||||||
@ -156,11 +98,9 @@ frame_cb (ClutterTimeline *timeline,
|
|||||||
s = 0.5;
|
s = 0.5;
|
||||||
l = 0.25 + (period_progress_sin + 1.0) / 4.0;
|
l = 0.25 + (period_progress_sin + 1.0) / 4.0;
|
||||||
color = &state->quad_mesh_colors[4 * vert_index];
|
color = &state->quad_mesh_colors[4 * vert_index];
|
||||||
#ifdef USE_CLUTTER_COLOR
|
/* A bit of a sneaky cast, but it seems safe to assume the ClutterColor
|
||||||
|
* typedef is set in stone... */
|
||||||
clutter_color_from_hls ((ClutterColor *)color, h * 360.0, l, s);
|
clutter_color_from_hls ((ClutterColor *)color, h * 360.0, l, s);
|
||||||
#else
|
|
||||||
hsl_to_rgb (h, s, l, &color[0], &color[1], &color[2]);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
cogl_vertex_buffer_add (state->buffer,
|
cogl_vertex_buffer_add (state->buffer,
|
||||||
|
Loading…
Reference in New Issue
Block a user