From 6a4cdd6e4935e90267845badb7b1049f7eafaf0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=98yvind=20Kol=C3=A5s?= Date: Tue, 29 Apr 2008 15:41:34 +0000 Subject: [PATCH] * clutter/cogl/cogl.h.in: renaming of API's in cogl to make the primitives and path API a bit smaller and more resembling cairo. * clutter/cogl/gl/cogl-primitives.c: * clutter/cogl/gles/cogl-primitives.c: * clutter/cogl/gles/cogl.c: * clutter/clutter-actor.c: * clutter/clutter-rectangle.c: * tests/test-cogl-offscreen.c: * tests/test-cogl-primitives.c: * tests/test-cogl-tex-convert.c: * tests/test-cogl-tex-foreign.c: * tests/test-cogl-tex-getset.c: * tests/test-cogl-tex-tile.c: updated according to changes in cogl. --- cogl.h.in | 236 ++++++++----------------------- gl/cogl-primitives.c | 185 ++++++++++-------------- gles/cogl-primitives.c | 312 +++++++++++++++-------------------------- gles/cogl.c | 2 +- 4 files changed, 242 insertions(+), 493 deletions(-) diff --git a/cogl.h.in b/cogl.h.in index 0893a58fc..baf1ab399 100644 --- a/cogl.h.in +++ b/cogl.h.in @@ -892,9 +892,9 @@ void cogl_texture_rectangle (CoglHandle handle, * to CGL_NEAREST. */ void cogl_texture_polygon (CoglHandle handle, - guint n_vertices, - CoglTextureVertex *vertices, - gboolean use_color); + guint n_vertices, + CoglTextureVertex *vertices, + gboolean use_color); /* Primitives API */ @@ -933,7 +933,7 @@ void cogl_color (const ClutterColor *color); /** - * cogl_fast_fill_rectangle: + * cogl_rectangle: * @x: X coordinate of the top-left corner * @y: Y coordinate of the top-left corner * @width: Width of the rectangle @@ -942,13 +942,13 @@ void cogl_color (const ClutterColor *color); * Fills a rectangle at the given coordinates with the current * drawing color in a highly optimizied fashion. **/ -void cogl_fast_fill_rectangle (gint x, +void cogl_rectangle (gint x, gint y, guint width, guint height); /** - * cogl_fast_fill_rectanglex: + * cogl_rectanglex: * @x: X coordinate of the top-left corner * @y: Y coordinate of the top-left corner * @width: Width of the rectangle @@ -956,13 +956,13 @@ void cogl_fast_fill_rectangle (gint x, * * A fixed-point version of cogl_fast_fill_rectangle. **/ -void cogl_fast_fill_rectanglex (ClutterFixed x, - ClutterFixed y, - ClutterFixed width, - ClutterFixed height); - +void cogl_rectanglex (ClutterFixed x, + ClutterFixed y, + ClutterFixed width, + ClutterFixed height); +#if 0 /** - * cogl_fast_fill_trapezoid: + * cogl_trapezoid: * @y1: Y coordinate of the top two vertices. * @x11: X coordinate of the top-left vertex. * @x21: X coordinate of the top-right vertex. @@ -973,15 +973,15 @@ void cogl_fast_fill_rectanglex (ClutterFixed x, * Fills a trapezoid at the given coordinates with the current * drawing color in a highly optimized fashion. **/ -void cogl_fast_fill_trapezoid (gint y1, - gint x11, - gint x21, - gint y2, - gint x12, - gint x22); +void cogl_trapezoid (gint y1, + gint x11, + gint x21, + gint y2, + gint x12, + gint x22); /** - * cogl_fast_fill_trapezoidx: + * cogl_trapezoidx: * @y1: Y coordinate of the top two vertices. * @x11: X coordinate of the top-left vertex. * @x21: X coordinate of the top-right vertex. @@ -989,30 +989,31 @@ void cogl_fast_fill_trapezoid (gint y1, * @x12: X coordinate of the bottom-left vertex. * @x22: X coordinate of the bottom-right vertex. * - * A fixed-point version of cogl_fast_fill_trapezoid. + * A fixed-point version of cogl_trapezoid. **/ -void cogl_fast_fill_trapezoidx (ClutterFixed y1, - ClutterFixed x11, - ClutterFixed x21, - ClutterFixed y2, - ClutterFixed x12, - ClutterFixed x22); +void cogl_trapezoidx (ClutterFixed y1, + ClutterFixed x11, + ClutterFixed x21, + ClutterFixed y2, + ClutterFixed x12, + ClutterFixed x22); +#endif /** - * cogl_fill: + * cogl_path_fill: * * Fills the constructed shape using the current drawing color. **/ -void cogl_fill (void); +void cogl_path_fill (void); /** - * cogl_stroke: + * cogl_path_stroke: * * Strokes the constructed shape using the current drawing color * and a width of 1 pixel (regardless of the current transformation * matrix). **/ -void cogl_stroke (void); +void cogl_path_stroke (void); /** @@ -1023,12 +1024,12 @@ void cogl_stroke (void); * Clears the previously constructed shape and begins a new path * contour by moving the pen to the given coordinates. **/ -void cogl_path_move_to (ClutterFixed x, - ClutterFixed y); +void cogl_path_move_to (ClutterFixed x, + ClutterFixed y); /** - * cogl_path_move_to_rel: + * cogl_path_rel_move_to: * @x: X offset from the current pen location to move the pen to. * @y: Y offset from the current pen location to move the pen to. * @@ -1036,8 +1037,8 @@ void cogl_path_move_to (ClutterFixed x, * contour by moving the pen to the given coordinates relative * to the current pen location. **/ -void cogl_path_move_to_rel (ClutterFixed x, - ClutterFixed y); +void cogl_path_rel_move_to (ClutterFixed x, + ClutterFixed y); /** * cogl_path_line_to: @@ -1047,57 +1048,19 @@ void cogl_path_move_to_rel (ClutterFixed x, * Adds a straight line segment to the current path that ends at the * given coordinates. **/ -void cogl_path_line_to (ClutterFixed x, - ClutterFixed y); +void cogl_path_line_to (ClutterFixed x, + ClutterFixed y); /** - * cogl_path_line_to_rel: + * cogl_path_rel_line_to: * @x: X offset from the current pen location of the end line vertex * @y: Y offset from the current pen location of the end line vertex * * Adds a straight line segment to the current path that ends at the * given coordinates relative to the current pen location. **/ -void cogl_path_line_to_rel (ClutterFixed x, - ClutterFixed y); - -/** - * cogl_path_h_line_to: - * @x: X coordinate of the end line vertex - * - * Adds a straight horizontal line segment to the current path that - * ends at the given X coordinate and current pen Y coordinate. - **/ -void cogl_path_h_line_to (ClutterFixed x); - -/** - * cogl_path_v_line_to: - * @y: Y coordinate of the end line vertex - * - * Adds a stright vertical line segment to the current path that ends - * at the current pen X coordinate and the given Y coordinate. - **/ -void cogl_path_v_line_to (ClutterFixed y); - -/** - * cogl_path_h_line_to_rel: - * @x: X offset from the current pen location of the end line vertex - * - * Adds a straight horizontal line segment to the current path that - * ends at the given X coordinate relative to the current pen location - * and current pen Y coordinate. - **/ -void cogl_path_h_line_to_rel (ClutterFixed x); - -/** - * cogl_path_v_line_to_rel: - * @y: Y offset from the current pen location of the end line vertex - * - * Adds a stright vertical line segment to the current path that ends - * at the current pen X coordinate and the given Y coordinate relative - * to the current pen location. - **/ -void cogl_path_v_line_to_rel (ClutterFixed y); +void cogl_path_rel_line_to (ClutterFixed x, + ClutterFixed y); /** @@ -1108,7 +1071,6 @@ void cogl_path_v_line_to_rel (ClutterFixed y); * @radius_y: Y radious of the elliptical arc * @angle_1: Angle in the unit-circle at which the arc begin * @angle_2: Angle in the unit-circle at which the arc ends - * @angle_step: Angle increment resolution for subdivision * * Adds an elliptical arc segment to the current path. A straight line * segment will link the current pen location with the first vertex @@ -1119,69 +1081,12 @@ void cogl_path_arc (ClutterFixed center_x, ClutterFixed radius_x, ClutterFixed radius_y, ClutterAngle angle_1, - ClutterAngle angle_2, - ClutterAngle angle_step); + ClutterAngle angle_2); -/** - * cogl_path_arc_rel: - * @center_x: X offset from the current pen location of the elliptical - * arc center - * @center_y: Y offset from the current pen location of the elliptical - * arc center - * @radius_x: X radius of the elliptical arc - * @radius_y: Y radious of the elliptical arc - * @angle_1: Angle in the unit-circle at which the arc begin - * @angle_2: Angle in the unit-circle at which the arc ends - * @angle_step: Angle increment resolution for subdivision - * - * Adds an elliptical arc segment to the current path. A straight line - * segment will link the current pen location with the first vertex - * of the arc. - **/ -void cogl_path_arc_rel (ClutterFixed center_x, - ClutterFixed center_y, - ClutterFixed radius_x, - ClutterFixed radius_y, - ClutterAngle angle_1, - ClutterAngle angle_2, - ClutterAngle angle_step); - -/** - * cogl_path_bezier2_to: - * @x1: X coordinate of the second bezier control point - * @y1: Y coordinate of the second bezier control point - * @x2: X coordinate of the third bezier control point - * @y2: Y coordinate of the third bezier control point - * - * Adds a quadratic bezier curve segment to the current path with the given - * second and third control points and using current pen location as the - * first control point. - **/ -void cogl_path_bezier2_to (ClutterFixed x1, - ClutterFixed y1, - ClutterFixed x2, - ClutterFixed y2); /** - * cogl_path_bezier2_to_rel: - * @x1: X coordinate of the second bezier control point - * @y1: Y coordinate of the second bezier control point - * @x2: X coordinate of the third bezier control point - * @y2: Y coordinate of the third bezier control point - * - * Adds a quadratic bezier curve segment to the current path with the given - * second and third control points and using current pen location as the - * first control point. The given coordinates are relative to the current - * pen location. - **/ -void cogl_path_bezier2_to_rel (ClutterFixed x1, - ClutterFixed y1, - ClutterFixed x2, - ClutterFixed y2); - -/** - * cogl_path_bezier3_to: + * cogl_path_curve_to: * @x1: X coordinate of the second bezier control point * @y1: Y coordinate of the second bezier control point * @x2: X coordinate of the third bezier control point @@ -1193,7 +1098,7 @@ void cogl_path_bezier2_to_rel (ClutterFixed x1, * second, third and fourth control points and using current pen location * as the first control point. **/ -void cogl_path_bezier3_to (ClutterFixed x1, +void cogl_path_curve_to (ClutterFixed x1, ClutterFixed y1, ClutterFixed x2, ClutterFixed y2, @@ -1201,7 +1106,7 @@ void cogl_path_bezier3_to (ClutterFixed x1, ClutterFixed y3); /** - * cogl_path_bezier3_to_rel: + * cogl_path_rel_curve_to: * @x1: X coordinate of the second bezier control point * @y1: Y coordinate of the second bezier control point * @x2: X coordinate of the third bezier control point @@ -1214,7 +1119,7 @@ void cogl_path_bezier3_to (ClutterFixed x1, * as the first control point. The given coordinates are relative to the * current pen location. */ -void cogl_path_bezier3_to_rel (ClutterFixed x1, +void cogl_path_rel_curve_to (ClutterFixed x1, ClutterFixed y1, ClutterFixed x2, ClutterFixed y2, @@ -1230,7 +1135,7 @@ void cogl_path_bezier3_to_rel (ClutterFixed x1, void cogl_path_close (void); /** - * cogl_line: + * cogl_path_line: * @x1: X coordinate of the start line vertex * @y1: Y coordinate of the start line vertex * @x2: X coordinate of the end line vertex @@ -1239,13 +1144,13 @@ void cogl_path_close (void); * Clears the previously constructed shape and constructs a straight * line shape start and ending at the given coordinates. **/ -void cogl_line (ClutterFixed x1, +void cogl_path_line (ClutterFixed x1, ClutterFixed y1, ClutterFixed x2, ClutterFixed y2); /** - * cogl_polyline: + * cogl_path_polyline: * @coords: A pointer to the first element of an array of fixed-point * values that specify the vertex coordinates. * @num_points: The total number of vertices. @@ -1261,12 +1166,12 @@ void cogl_line (ClutterFixed x1, * fashion for the rest of the vertices. (num_points - 1) segments will * be constructed. **/ -void cogl_polyline (ClutterFixed *coords, +void cogl_path_polyline (ClutterFixed *coords, gint num_points); /** - * cogl_polygon: + * cogl_path_polygon: * @coords: A pointer to the first element of an array of fixed-point * values that specify the vertex coordinates. * @num_points: The total number of vertices. @@ -1279,12 +1184,12 @@ void cogl_polyline (ClutterFixed *coords, * represents the Y coordinate of the first vertex, continuing in the same * fashion for the rest of the vertices. **/ -void cogl_polygon (ClutterFixed *coords, +void cogl_path_polygon (ClutterFixed *coords, gint num_points); /** - * cogl_rectangle: + * cogl_path_rectangle: * @x: X coordinate of the top-left corner. * @y: Y coordinate of the top-left corner. * @width: Rectangle width. @@ -1293,35 +1198,13 @@ void cogl_polygon (ClutterFixed *coords, * Clears the previously constructed shape and constructs a rectangular * shape at the given coordinates. **/ -void cogl_rectangle (ClutterFixed x, +void cogl_path_rectangle (ClutterFixed x, ClutterFixed y, ClutterFixed width, ClutterFixed height); /** - * cogl_arc: - * @center_x: X coordinate of the elliptical arc center - * @center_y: Y coordinate of the elliptical arc center - * @radius_x: X radius of the elliptical arc - * @radius_y: Y radious of the elliptical arc - * @angle_1: Angle in the unit-circle at which the arc begin - * @angle_2: Angle in the unit-circle at which the arc ends - * @angle_step: Angle increment resolution for subdivision - * - * Clears the previously constructed shape and constructs and elliptical arc - * shape. - **/ -void cogl_arc (ClutterFixed center_x, - ClutterFixed center_y, - ClutterFixed radius_x, - ClutterFixed radius_y, - ClutterAngle angle_1, - ClutterAngle angle_2, - ClutterAngle angle_step); - - -/** - * cogl_ellipse: + * cogl_path_ellipse: * @center_x: X coordinate of the ellipse center * @center_y: Y coordinate of the ellipse center * @radius_x: X radius of the ellipse @@ -1331,15 +1214,14 @@ void cogl_arc (ClutterFixed center_x, * Clears the previously constructed shape and constructs an ellipse * shape. **/ -void cogl_ellipse (ClutterFixed center_x, +void cogl_path_ellipse (ClutterFixed center_x, ClutterFixed center_y, ClutterFixed radius_x, ClutterFixed radius_y, ClutterAngle angle_step); - /** - * cogl_round_rectangle: + * cogl_path_round_rectangle: * @x: X coordinate of the top-left corner * @y: Y coordinate of the top-left corner * @width: Width of the rectangle @@ -1351,7 +1233,7 @@ void cogl_ellipse (ClutterFixed center_x, * Clears the previously constructed shape and constructs a rectangular * shape with rounded corners. **/ -void cogl_round_rectangle (ClutterFixed x, +void cogl_path_round_rectangle (ClutterFixed x, ClutterFixed y, ClutterFixed width, ClutterFixed height, @@ -1539,7 +1421,7 @@ void cogl_offscreen_unref (CoglHandle handle); * */ void cogl_offscreen_blit (CoglHandle src_buffer, - CoglHandle dst_buffer); + CoglHandle dst_buffer); /** * cogl_offscreen_blit_region: diff --git a/gl/cogl-primitives.c b/gl/cogl-primitives.c index 3528c2b5d..364eea89e 100644 --- a/gl/cogl-primitives.c +++ b/gl/cogl-primitives.c @@ -37,10 +37,10 @@ #define _COGL_MAX_BEZ_RECURSE_DEPTH 16 void -cogl_fast_fill_rectangle (gint x, - gint y, - guint width, - guint height) +cogl_rectangle (gint x, + gint y, + guint width, + guint height) { _COGL_GET_CONTEXT (ctx, NO_RETVAL); @@ -52,10 +52,10 @@ cogl_fast_fill_rectangle (gint x, void -cogl_fast_fill_rectanglex (ClutterFixed x, - ClutterFixed y, - ClutterFixed width, - ClutterFixed height) +cogl_rectanglex (ClutterFixed x, + ClutterFixed y, + ClutterFixed width, + ClutterFixed height) { _COGL_GET_CONTEXT (ctx, NO_RETVAL); @@ -68,13 +68,14 @@ cogl_fast_fill_rectanglex (ClutterFixed x, CLUTTER_FIXED_TO_FLOAT (y + height)) ); } +#if 0 void -cogl_fast_fill_trapezoid (gint y1, - gint x11, - gint x21, - gint y2, - gint x12, - gint x22) +cogl_trapezoid (gint y1, + gint x11, + gint x21, + gint y2, + gint x12, + gint x22) { _COGL_GET_CONTEXT (ctx, NO_RETVAL); @@ -90,12 +91,12 @@ cogl_fast_fill_trapezoid (gint y1, } void -cogl_fast_fill_trapezoidx (ClutterFixed y1, - ClutterFixed x11, - ClutterFixed x21, - ClutterFixed y2, - ClutterFixed x12, - ClutterFixed x22) +cogl_trapezoidx (ClutterFixed y1, + ClutterFixed x11, + ClutterFixed x21, + ClutterFixed y2, + ClutterFixed x12, + ClutterFixed x22) { _COGL_GET_CONTEXT (ctx, NO_RETVAL); @@ -114,6 +115,7 @@ cogl_fast_fill_trapezoidx (ClutterFixed y1, CLUTTER_FIXED_TO_FLOAT (y2)) ); GE( glEnd () ); } +#endif static void _cogl_path_clear_nodes () @@ -197,8 +199,7 @@ _cogl_path_fill_nodes () GE( glColorMask (GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE) ); cogl_enable (COGL_ENABLE_VERTEX_ARRAY - | (ctx->color_alpha < 255 - ? COGL_ENABLE_BLEND : 0)); + | (ctx->color_alpha < 255 ? COGL_ENABLE_BLEND : 0)); GE( glVertexPointer (2, GL_FLOAT, 0, ctx->path_nodes) ); GE( glDrawArrays (GL_TRIANGLE_FAN, 0, ctx->path_nodes_size) ); @@ -212,7 +213,7 @@ _cogl_path_fill_nodes () bounds_w = CLUTTER_FIXED_CEIL (ctx->path_nodes_max.x - ctx->path_nodes_min.x); bounds_h = CLUTTER_FIXED_CEIL (ctx->path_nodes_max.y - ctx->path_nodes_min.y); - cogl_fast_fill_rectangle (bounds_x, bounds_y, bounds_w, bounds_h); + cogl_rectangle (bounds_x, bounds_y, bounds_w, bounds_h); GE( glDisable (GL_STENCIL_TEST) ); } @@ -242,7 +243,7 @@ cogl_stroke () void cogl_path_move_to (ClutterFixed x, - ClutterFixed y) + ClutterFixed y) { _COGL_GET_CONTEXT (ctx, NO_RETVAL); @@ -258,18 +259,18 @@ cogl_path_move_to (ClutterFixed x, } void -cogl_path_move_to_rel (ClutterFixed x, - ClutterFixed y) +cogl_path_rel_move_to (ClutterFixed x, + ClutterFixed y) { _COGL_GET_CONTEXT (ctx, NO_RETVAL); cogl_path_move_to (ctx->path_pen.x + x, - ctx->path_pen.y + y); + ctx->path_pen.y + y); } void cogl_path_line_to (ClutterFixed x, - ClutterFixed y) + ClutterFixed y) { _COGL_GET_CONTEXT (ctx, NO_RETVAL); @@ -280,52 +281,15 @@ cogl_path_line_to (ClutterFixed x, } void -cogl_path_line_to_rel (ClutterFixed x, - ClutterFixed y) +cogl_path_rel_line_to (ClutterFixed x, + ClutterFixed y) { _COGL_GET_CONTEXT (ctx, NO_RETVAL); cogl_path_line_to (ctx->path_pen.x + x, - ctx->path_pen.y + y); + ctx->path_pen.y + y); } -void -cogl_path_h_line_to (ClutterFixed x) -{ - _COGL_GET_CONTEXT (ctx, NO_RETVAL); - - cogl_path_line_to (x, - ctx->path_pen.y); -} - -void -cogl_path_v_line_to (ClutterFixed y) -{ - _COGL_GET_CONTEXT (ctx, NO_RETVAL); - - cogl_path_line_to (ctx->path_pen.x, - y); -} - -void -cogl_path_h_line_to_rel (ClutterFixed x) -{ - _COGL_GET_CONTEXT (ctx, NO_RETVAL); - - cogl_path_line_to (ctx->path_pen.x + x, - ctx->path_pen.y); -} - -void -cogl_path_v_line_to_rel (ClutterFixed y) -{ - _COGL_GET_CONTEXT (ctx, NO_RETVAL); - - cogl_path_line_to (ctx->path_pen.x, - ctx->path_pen.y + y); -} - - void cogl_path_close () { @@ -367,10 +331,10 @@ cogl_polygon (ClutterFixed *coords, } void -cogl_rectangle (ClutterFixed x, - ClutterFixed y, - ClutterFixed width, - ClutterFixed height) +cogl_path_rectangle (ClutterFixed x, + ClutterFixed y, + ClutterFixed width, + ClutterFixed height) { cogl_path_move_to (x, y); cogl_path_line_to (x + width, y); @@ -430,13 +394,13 @@ _cogl_arc (ClutterFixed center_x, void cogl_path_arc (ClutterFixed center_x, - ClutterFixed center_y, - ClutterFixed radius_x, - ClutterFixed radius_y, - ClutterAngle angle_1, - ClutterAngle angle_2, - ClutterAngle angle_step) + ClutterFixed center_y, + ClutterFixed radius_x, + ClutterFixed radius_y, + ClutterAngle angle_1, + ClutterAngle angle_2) { + ClutterAngle angle_step = 10; _cogl_arc (center_x, center_y, radius_x, radius_y, angle_1, angle_2, @@ -462,16 +426,15 @@ cogl_path_arc_rel (ClutterFixed center_x, angle_step, 0 /* no move */); } - void cogl_arc (ClutterFixed center_x, ClutterFixed center_y, ClutterFixed radius_x, ClutterFixed radius_y, ClutterAngle angle_1, - ClutterAngle angle_2, - ClutterAngle angle_step) + ClutterAngle angle_2) { + ClutterAngle angle_step = 10; _cogl_arc (center_x, center_y, radius_x, radius_y, angle_1, angle_2, @@ -482,9 +445,9 @@ void cogl_ellipse (ClutterFixed center_x, ClutterFixed center_y, ClutterFixed radius_x, - ClutterFixed radius_y, - ClutterAngle angle_step) + ClutterFixed radius_y) { + ClutterAngle angle_step = 10; /* FIXME: if shows to be slow might be optimized * by mirroring just a quarter of it */ @@ -505,6 +468,7 @@ cogl_round_rectangle (ClutterFixed x, ClutterFixed radius, ClutterAngle arc_step) { + _COGL_GET_CONTEXT (ctx, NO_RETVAL); ClutterFixed inner_width = width - (radius << 1); ClutterFixed inner_height = height - (radius << 1); @@ -515,21 +479,25 @@ cogl_round_rectangle (ClutterFixed x, CLUTTER_ANGLE_FROM_DEG (270), arc_step); - cogl_path_h_line_to_rel (inner_width); + cogl_path_line_to (ctx->path_pen.x + inner_width, + ctx->path_pen.y); cogl_path_arc_rel (0, radius, radius, radius, CLUTTER_ANGLE_FROM_DEG (-90), CLUTTER_ANGLE_FROM_DEG (0), arc_step); - cogl_path_v_line_to_rel (inner_height); + cogl_path_line_to (ctx->path_pen.x, + ctx->path_pen.y + inner_height); + cogl_path_arc_rel (-radius, 0, radius, radius, CLUTTER_ANGLE_FROM_DEG (0), CLUTTER_ANGLE_FROM_DEG (90), arc_step); - cogl_path_h_line_to_rel (-inner_width); + cogl_path_line_to (ctx->path_pen.x - inner_width, + ctx->path_pen.y); cogl_path_arc_rel (0, -radius, radius, radius, CLUTTER_ANGLE_FROM_DEG (90), @@ -539,6 +507,7 @@ cogl_round_rectangle (ClutterFixed x, cogl_path_close (); } +#if 0 static void _cogl_path_bezier2_sub (CoglBezQuad *quad) { @@ -604,6 +573,7 @@ _cogl_path_bezier2_sub (CoglBezQuad *quad) qright->p3 = q->p3; } } +#endif static void _cogl_path_bezier3_sub (CoglBezCubic *cubic) @@ -696,6 +666,7 @@ _cogl_path_bezier3_sub (CoglBezCubic *cubic) } } +#if 0 void cogl_path_bezier2_to (ClutterFixed x1, ClutterFixed y1, @@ -720,15 +691,15 @@ cogl_path_bezier2_to (ClutterFixed x1, _cogl_path_add_node (quad.p3.x, quad.p3.y); ctx->path_pen = quad.p3; } - +#endif void -cogl_path_bezier3_to (ClutterFixed x1, - ClutterFixed y1, - ClutterFixed x2, - ClutterFixed y2, - ClutterFixed x3, - ClutterFixed y3) +cogl_path_curve_to (ClutterFixed x1, + ClutterFixed y1, + ClutterFixed x2, + ClutterFixed y2, + ClutterFixed x3, + ClutterFixed y3) { _COGL_GET_CONTEXT (ctx, NO_RETVAL); @@ -752,21 +723,7 @@ cogl_path_bezier3_to (ClutterFixed x1, } void -cogl_path_bezier2_to_rel (ClutterFixed x1, - ClutterFixed y1, - ClutterFixed x2, - ClutterFixed y2) -{ - _COGL_GET_CONTEXT (ctx, NO_RETVAL); - - cogl_path_bezier2_to (ctx->path_pen.x + x1, - ctx->path_pen.y + y2, - ctx->path_pen.x + x2, - ctx->path_pen.y + y2); -} - -void -cogl_path_bezier3_to_rel (ClutterFixed x1, +cogl_rel_curve_to (ClutterFixed x1, ClutterFixed y1, ClutterFixed x2, ClutterFixed y2, @@ -775,10 +732,10 @@ cogl_path_bezier3_to_rel (ClutterFixed x1, { _COGL_GET_CONTEXT (ctx, NO_RETVAL); - cogl_path_bezier3_to (ctx->path_pen.x + x1, - ctx->path_pen.y + y2, - ctx->path_pen.x + x2, - ctx->path_pen.y + y2, - ctx->path_pen.x + x3, - ctx->path_pen.y + y3); + cogl_path_curve_to (ctx->path_pen.x + x1, + ctx->path_pen.y + y2, + ctx->path_pen.x + x2, + ctx->path_pen.y + y2, + ctx->path_pen.x + x3, + ctx->path_pen.y + y3); } diff --git a/gles/cogl-primitives.c b/gles/cogl-primitives.c index 006833743..ed25e3c45 100644 --- a/gles/cogl-primitives.c +++ b/gles/cogl-primitives.c @@ -37,10 +37,10 @@ #define _COGL_MAX_BEZ_RECURSE_DEPTH 16 void -cogl_fast_fill_rectangle (gint x, - gint y, - guint width, - guint height) +cogl_rectangle (gint x, + gint y, + guint width, + guint height) { _COGL_GET_CONTEXT (ctx, NO_RETVAL); @@ -54,20 +54,19 @@ cogl_fast_fill_rectangle (gint x, (GLshort) x, (GLshort) (y + height), (GLshort) (x + width), (GLshort) (y + height) }; - + cogl_enable (COGL_ENABLE_VERTEX_ARRAY - | (ctx->color_alpha < 255 - ? COGL_ENABLE_BLEND : 0)); - - GE( glVertexPointer (2, GL_SHORT, 0, rect_verts) ); - GE( glDrawArrays (GL_TRIANGLE_STRIP, 0, 4) ); + | (ctx->color_alpha < 255 ? COGL_ENABLE_BLEND : 0)); + GE ( glVertexPointer (2, GL_SHORT, 0, rect_verts ) ); + GE ( glDrawArrays (GL_TRIANGLE_STRIP, 0, 4) ); } + void -cogl_fast_fill_rectanglex (ClutterFixed x, - ClutterFixed y, - ClutterFixed width, - ClutterFixed height) +cogl_rectanglex (ClutterFixed x, + ClutterFixed y, + ClutterFixed width, + ClutterFixed height) { _COGL_GET_CONTEXT (ctx, NO_RETVAL); @@ -77,64 +76,64 @@ cogl_fast_fill_rectanglex (ClutterFixed x, x, y + height, x + width, y + height }; - + cogl_enable (COGL_ENABLE_VERTEX_ARRAY | (ctx->color_alpha < 255 ? COGL_ENABLE_BLEND : 0)); GE( glVertexPointer (2, GL_FIXED, 0, rect_verts) ); GE( glDrawArrays (GL_TRIANGLE_STRIP, 0, 4) ); + } +#if 0 void -cogl_fast_fill_trapezoid (gint y1, - gint x11, - gint x21, - gint y2, - gint x12, - gint x22) +cogl_trapezoid (gint y1, + gint x11, + gint x21, + gint y2, + gint x12, + gint x22) { _COGL_GET_CONTEXT (ctx, NO_RETVAL); - GLshort trap_verts[8] = { - (GLshort) x11, (GLshort) y1, - (GLshort) x21, (GLshort) y1, - (GLshort) x12, (GLshort) y2, - (GLshort) x22, (GLshort) y2 - }; + cogl_enable (ctx->color_alpha < 255 + ? COGL_ENABLE_BLEND : 0); - cogl_enable (COGL_ENABLE_VERTEX_ARRAY - | (ctx->color_alpha < 255 - ? COGL_ENABLE_BLEND : 0)); - - GE( glVertexPointer (2, GL_SHORT, 0, trap_verts) ); - GE( glDrawArrays (GL_TRIANGLE_STRIP, 0, 4) ); + GE( glBegin (GL_QUADS) ); + GE( glVertex2i (x11, y1) ); + GE( glVertex2i (x21, y1) ); + GE( glVertex2i (x22, y2) ); + GE( glVertex2i (x12, y2) ); + GE( glEnd () ); } void -cogl_fast_fill_trapezoidx (ClutterFixed y1, - ClutterFixed x11, - ClutterFixed x21, - ClutterFixed y2, - ClutterFixed x12, - ClutterFixed x22) +cogl_trapezoidx (ClutterFixed y1, + ClutterFixed x11, + ClutterFixed x21, + ClutterFixed y2, + ClutterFixed x12, + ClutterFixed x22) { _COGL_GET_CONTEXT (ctx, NO_RETVAL); - GLfixed trap_verts[8] = { - x11, y1, - x21, y1, - x12, y2, - x22, y2 - }; + cogl_enable (ctx->color_alpha < 255 + ? COGL_ENABLE_BLEND : 0); - cogl_enable (COGL_ENABLE_VERTEX_ARRAY - | (ctx->color_alpha < 255 - ? COGL_ENABLE_BLEND : 0)); + GE( glBegin (GL_QUADS) ); - GE( glVertexPointer (2, GL_FIXED, 0, trap_verts) ); - GE( glDrawArrays (GL_TRIANGLE_STRIP, 0, 4) ); + GE( glVertex2f (CLUTTER_FIXED_TO_FLOAT (x11), + CLUTTER_FIXED_TO_FLOAT (y1)) ); + GE( glVertex2f (CLUTTER_FIXED_TO_FLOAT (x21), + CLUTTER_FIXED_TO_FLOAT (y1)) ); + GE( glVertex2f (CLUTTER_FIXED_TO_FLOAT (x22), + CLUTTER_FIXED_TO_FLOAT (y2)) ); + GE( glVertex2f (CLUTTER_FIXED_TO_FLOAT (x12), + CLUTTER_FIXED_TO_FLOAT (y2)) ); + GE( glEnd () ); } +#endif static void _cogl_path_clear_nodes () @@ -142,7 +141,7 @@ _cogl_path_clear_nodes () _COGL_GET_CONTEXT (ctx, NO_RETVAL); if (ctx->path_nodes) - g_free (ctx->path_nodes); + g_free(ctx->path_nodes); ctx->path_nodes = (CoglFixedVec2*) g_malloc (2 * sizeof(CoglFixedVec2)); ctx->path_nodes_size = 0; @@ -169,8 +168,8 @@ _cogl_path_add_node (ClutterFixed x, ctx->path_nodes_cap *= 2; } - ctx->path_nodes [ctx->path_nodes_size] .x = x; - ctx->path_nodes [ctx->path_nodes_size] .y = y; + ctx->path_nodes [ctx->path_nodes_size] .x = CLUTTER_FIXED_TO_FLOAT (x); + ctx->path_nodes [ctx->path_nodes_size] .y = CLUTTER_FIXED_TO_FLOAT (y); ctx->path_nodes_size++; if (ctx->path_nodes_size == 1) @@ -196,7 +195,7 @@ _cogl_path_stroke_nodes () | (ctx->color_alpha < 255 ? COGL_ENABLE_BLEND : 0)); - GE( glVertexPointer (2, GL_FIXED, 0, ctx->path_nodes) ); + GE( glVertexPointer (2, GL_FLOAT, 0, ctx->path_nodes) ); GE( glDrawArrays (GL_LINE_STRIP, 0, ctx->path_nodes_size) ); } @@ -211,17 +210,16 @@ _cogl_path_fill_nodes () guint bounds_h; GE( glClear (GL_STENCIL_BUFFER_BIT) ); - + GE( glEnable (GL_STENCIL_TEST) ); GE( glStencilFunc (GL_ALWAYS, 0x0, 0x0) ); GE( glStencilOp (GL_INVERT, GL_INVERT, GL_INVERT) ); GE( glColorMask (GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE) ); cogl_enable (COGL_ENABLE_VERTEX_ARRAY - | (ctx->color_alpha < 255 - ? COGL_ENABLE_BLEND : 0)); + | (ctx->color_alpha < 255 ? COGL_ENABLE_BLEND : 0)); - GE( glVertexPointer (2, GL_FIXED, 0, ctx->path_nodes) ); + GE( glVertexPointer (2, GL_FLOAT, 0, ctx->path_nodes) ); GE( glDrawArrays (GL_TRIANGLE_FAN, 0, ctx->path_nodes_size) ); GE( glStencilFunc (GL_EQUAL, 0x1, 0x1) ); @@ -233,7 +231,7 @@ _cogl_path_fill_nodes () bounds_w = CLUTTER_FIXED_CEIL (ctx->path_nodes_max.x - ctx->path_nodes_min.x); bounds_h = CLUTTER_FIXED_CEIL (ctx->path_nodes_max.y - ctx->path_nodes_min.y); - cogl_fast_fill_rectangle (bounds_x, bounds_y, bounds_w, bounds_h); + cogl_rectangle (bounds_x, bounds_y, bounds_w, bounds_h); GE( glDisable (GL_STENCIL_TEST) ); } @@ -247,6 +245,7 @@ cogl_fill () return; _cogl_path_fill_nodes(); + } void @@ -262,8 +261,8 @@ cogl_stroke () void cogl_path_move_to (ClutterFixed x, - ClutterFixed y) -{ + ClutterFixed y) +{ _COGL_GET_CONTEXT (ctx, NO_RETVAL); /* FIXME: handle multiple contours maybe? */ @@ -278,18 +277,18 @@ cogl_path_move_to (ClutterFixed x, } void -cogl_path_move_to_rel (ClutterFixed x, - ClutterFixed y) +cogl_path_rel_move_to (ClutterFixed x, + ClutterFixed y) { _COGL_GET_CONTEXT (ctx, NO_RETVAL); cogl_path_move_to (ctx->path_pen.x + x, - ctx->path_pen.y + y); + ctx->path_pen.y + y); } void cogl_path_line_to (ClutterFixed x, - ClutterFixed y) + ClutterFixed y) { _COGL_GET_CONTEXT (ctx, NO_RETVAL); @@ -300,49 +299,13 @@ cogl_path_line_to (ClutterFixed x, } void -cogl_path_line_to_rel (ClutterFixed x, - ClutterFixed y) +cogl_path_rel_line_to (ClutterFixed x, + ClutterFixed y) { _COGL_GET_CONTEXT (ctx, NO_RETVAL); cogl_path_line_to (ctx->path_pen.x + x, - ctx->path_pen.y + y); -} - -void -cogl_path_h_line_to (ClutterFixed x) -{ - _COGL_GET_CONTEXT (ctx, NO_RETVAL); - - cogl_path_line_to (x, - ctx->path_pen.y); -} - -void -cogl_path_v_line_to (ClutterFixed y) -{ - _COGL_GET_CONTEXT (ctx, NO_RETVAL); - - cogl_path_line_to (ctx->path_pen.x, - y); -} - -void -cogl_path_h_line_to_rel (ClutterFixed x) -{ - _COGL_GET_CONTEXT (ctx, NO_RETVAL); - - cogl_path_line_to (ctx->path_pen.x + x, - ctx->path_pen.y); -} - -void -cogl_path_v_line_to_rel (ClutterFixed y) -{ - _COGL_GET_CONTEXT (ctx, NO_RETVAL); - - cogl_path_line_to (ctx->path_pen.x, - ctx->path_pen.y + y); + ctx->path_pen.y + y); } void @@ -354,6 +317,7 @@ cogl_path_close () ctx->path_pen = ctx->path_start; } + void cogl_line (ClutterFixed x1, ClutterFixed y1, @@ -370,10 +334,10 @@ cogl_polyline (ClutterFixed *coords, { gint c = 0; - cogl_path_move_to(coords[0], coords[1]); + cogl_path_move_to (coords[0], coords[1]); for (c = 1; c < num_points; ++c) - cogl_path_line_to(coords[2*c], coords[2*c+1]); + cogl_path_line_to (coords[2*c], coords[2*c+1]); } void @@ -385,10 +349,10 @@ cogl_polygon (ClutterFixed *coords, } void -cogl_rectangle (ClutterFixed x, - ClutterFixed y, - ClutterFixed width, - ClutterFixed height) +cogl_path_rectangle (ClutterFixed x, + ClutterFixed y, + ClutterFixed width, + ClutterFixed height) { cogl_path_move_to (x, y); cogl_path_line_to (x + width, y); @@ -448,19 +412,20 @@ _cogl_arc (ClutterFixed center_x, void cogl_path_arc (ClutterFixed center_x, - ClutterFixed center_y, - ClutterFixed radius_x, - ClutterFixed radius_y, - ClutterAngle angle_1, - ClutterAngle angle_2, - ClutterAngle angle_step) -{ + ClutterFixed center_y, + ClutterFixed radius_x, + ClutterFixed radius_y, + ClutterAngle angle_1, + ClutterAngle angle_2) +{ + ClutterAngle angle_step = 10; _cogl_arc (center_x, center_y, radius_x, radius_y, angle_1, angle_2, angle_step, 0 /* no move */); } + void cogl_path_arc_rel (ClutterFixed center_x, ClutterFixed center_y, @@ -485,9 +450,9 @@ cogl_arc (ClutterFixed center_x, ClutterFixed radius_x, ClutterFixed radius_y, ClutterAngle angle_1, - ClutterAngle angle_2, - ClutterAngle angle_step) + ClutterAngle angle_2) { + ClutterAngle angle_step = 10; _cogl_arc (center_x, center_y, radius_x, radius_y, angle_1, angle_2, @@ -498,9 +463,9 @@ void cogl_ellipse (ClutterFixed center_x, ClutterFixed center_y, ClutterFixed radius_x, - ClutterFixed radius_y, - ClutterAngle angle_step) + ClutterFixed radius_y) { + ClutterAngle angle_step = 10; /* FIXME: if shows to be slow might be optimized * by mirroring just a quarter of it */ @@ -521,6 +486,7 @@ cogl_round_rectangle (ClutterFixed x, ClutterFixed radius, ClutterAngle arc_step) { + _COGL_GET_CONTEXT (ctx, NO_RETVAL); ClutterFixed inner_width = width - (radius << 1); ClutterFixed inner_height = height - (radius << 1); @@ -531,21 +497,25 @@ cogl_round_rectangle (ClutterFixed x, CLUTTER_ANGLE_FROM_DEG (270), arc_step); - cogl_path_h_line_to_rel (inner_width); + cogl_path_line_to (ctx->path_pen.x + inner_width, + ctx->path_pen.y); cogl_path_arc_rel (0, radius, radius, radius, CLUTTER_ANGLE_FROM_DEG (-90), CLUTTER_ANGLE_FROM_DEG (0), arc_step); - cogl_path_v_line_to_rel (inner_height); + cogl_path_line_to (ctx->path_pen.x, + ctx->path_pen.y + inner_height); + cogl_path_arc_rel (-radius, 0, radius, radius, CLUTTER_ANGLE_FROM_DEG (0), CLUTTER_ANGLE_FROM_DEG (90), arc_step); - cogl_path_h_line_to_rel (-inner_width); + cogl_path_line_to (ctx->path_pen.x - inner_width, + ctx->path_pen.y); cogl_path_arc_rel (0, -radius, radius, radius, CLUTTER_ANGLE_FROM_DEG (90), @@ -555,6 +525,7 @@ cogl_round_rectangle (ClutterFixed x, cogl_path_close (); } +#if 0 static void _cogl_path_bezier2_sub (CoglBezQuad *quad) { @@ -620,6 +591,7 @@ _cogl_path_bezier2_sub (CoglBezQuad *quad) qright->p3 = q->p3; } } +#endif static void _cogl_path_bezier3_sub (CoglBezCubic *cubic) @@ -712,17 +684,7 @@ _cogl_path_bezier3_sub (CoglBezCubic *cubic) } } -/** - * cogl_path_bezier2_to: - * @x1: X coordinate of the second bezier control point - * @y1: Y coordinate of the second bezier control point - * @x2: X coordinate of the third bezier control point - * @y2: Y coordinate of the third bezier control point - * - * Adds a quadratic bezier curve segment to the current path with the given - * second and third control points and using current pen location as the - * first control point. - **/ +#if 0 void cogl_path_bezier2_to (ClutterFixed x1, ClutterFixed y1, @@ -747,27 +709,15 @@ cogl_path_bezier2_to (ClutterFixed x1, _cogl_path_add_node (quad.p3.x, quad.p3.y); ctx->path_pen = quad.p3; } +#endif -/** - * cogl_path_bezier3_to: - * @x1: X coordinate of the second bezier control point - * @y1: Y coordinate of the second bezier control point - * @x2: X coordinate of the third bezier control point - * @y2: Y coordinate of the third bezier control point - * @x3: X coordinate of the fourth bezier control point - * @y3: Y coordinate of the fourth bezier control point - * - * Adds a cubic bezier curve segment to the current path with the given - * second, third and fourth control points and using current pen location - * as the first control point. - **/ void -cogl_path_bezier3_to (ClutterFixed x1, - ClutterFixed y1, - ClutterFixed x2, - ClutterFixed y2, - ClutterFixed x3, - ClutterFixed y3) +cogl_path_curve_to (ClutterFixed x1, + ClutterFixed y1, + ClutterFixed x2, + ClutterFixed y2, + ClutterFixed x3, + ClutterFixed y3) { _COGL_GET_CONTEXT (ctx, NO_RETVAL); @@ -790,48 +740,8 @@ cogl_path_bezier3_to (ClutterFixed x1, ctx->path_pen = cubic.p4; } -/** - * cogl_path_bezier2_to_rel: - * @x1: X coordinate of the second bezier control point - * @y1: Y coordinate of the second bezier control point - * @x2: X coordinate of the third bezier control point - * @y2: Y coordinate of the third bezier control point - * - * Adds a quadratic bezier curve segment to the current path with the given - * second and third control points and using current pen location as the - * first control point. The given coordinates are relative to the current - * pen location. - **/ void -cogl_path_bezier2_to_rel (ClutterFixed x1, - ClutterFixed y1, - ClutterFixed x2, - ClutterFixed y2) -{ - _COGL_GET_CONTEXT (ctx, NO_RETVAL); - - cogl_path_bezier2_to (ctx->path_pen.x + x1, - ctx->path_pen.y + y2, - ctx->path_pen.x + x2, - ctx->path_pen.y + y2); -} - -/** - * cogl_path_bezier3_to_rel: - * @x1: X coordinate of the second bezier control point - * @y1: Y coordinate of the second bezier control point - * @x2: X coordinate of the third bezier control point - * @y2: Y coordinate of the third bezier control point - * @x3: X coordinate of the fourth bezier control point - * @y3: Y coordinate of the fourth bezier control point - * - * Adds a cubic bezier curve segment to the current path with the given - * second, third and fourth control points and using current pen location - * as the first control point. The given coordinates are relative to the - * current pen location. - **/ -void -cogl_path_bezier3_to_rel (ClutterFixed x1, +cogl_rel_curve_to (ClutterFixed x1, ClutterFixed y1, ClutterFixed x2, ClutterFixed y2, @@ -840,10 +750,10 @@ cogl_path_bezier3_to_rel (ClutterFixed x1, { _COGL_GET_CONTEXT (ctx, NO_RETVAL); - cogl_path_bezier3_to (ctx->path_pen.x + x1, - ctx->path_pen.y + y2, - ctx->path_pen.x + x2, - ctx->path_pen.y + y2, - ctx->path_pen.x + x3, - ctx->path_pen.y + y3); + cogl_path_curve_to (ctx->path_pen.x + x1, + ctx->path_pen.y + y2, + ctx->path_pen.x + x2, + ctx->path_pen.y + y2, + ctx->path_pen.x + x3, + ctx->path_pen.y + y3); } diff --git a/gles/cogl.c b/gles/cogl.c index e43908893..455f80085 100644 --- a/gles/cogl.c +++ b/gles/cogl.c @@ -332,7 +332,7 @@ cogl_clip_set (ClutterFixed x_offset, GE( glColor4x (CFX_ONE, CFX_ONE, CFX_ONE, CFX_ONE ) ); - cogl_fast_fill_rectanglex (x_offset, y_offset, width, height); + cogl_rectanglex (x_offset, y_offset, width, height); GE( glStencilFunc (GL_EQUAL, 0x1, 0x1) ); GE( glStencilOp (GL_KEEP, GL_KEEP, GL_KEEP) );