cairo_int_status_t _cairo_gl_composite_emit_triangle_as_tristrip (cairo_gl_context_t *ctx, cairo_gl_composite_t *setup, const cairo_point_t triangle[3]) { _cairo_gl_composite_prepare_buffer (ctx, 3); _cairo_gl_composite_emit_tristrip_vertex (ctx, &triangle[0]); _cairo_gl_composite_emit_tristrip_vertex (ctx, &triangle[1]); _cairo_gl_composite_emit_tristrip_vertex (ctx, &triangle[2]); return _cairo_gl_composite_append_vertex_indices (ctx, 3); }
cairo_int_status_t _cairo_gl_composite_emit_triangle_as_tristrip (cairo_gl_context_t *ctx, cairo_gl_composite_t *setup, const cairo_point_t triangle[3]) { _cairo_gl_composite_prepare_buffer (ctx, 3, CAIRO_GL_PRIMITIVE_TYPE_TRISTRIPS); _cairo_gl_composite_emit_point (ctx, &triangle[0], 0); _cairo_gl_composite_emit_point (ctx, &triangle[1], 0); _cairo_gl_composite_emit_point (ctx, &triangle[2], 0); return _cairo_gl_composite_append_vertex_indices (ctx, 3); }
cairo_int_status_t _cairo_gl_composite_emit_point_as_single_line (cairo_gl_context_t *ctx, const cairo_point_t point[2]) { int num_indices = 2; if (ctx->draw_mode != CAIRO_GL_LINES) _cairo_gl_composite_flush (ctx); ctx->draw_mode = CAIRO_GL_LINES; _cairo_gl_composite_prepare_buffer (ctx, 2, CAIRO_GL_PRIMITIVE_TYPE_TRISTRIPS); _cairo_gl_composite_emit_point (ctx, &point[0], 0); _cairo_gl_composite_emit_point (ctx, &point[1], 0); return _cairo_gl_composite_append_vertex_indices (ctx, num_indices, FALSE); }
cairo_int_status_t _cairo_gl_composite_emit_quad_as_tristrip (cairo_gl_context_t *ctx, cairo_gl_composite_t *setup, const cairo_point_t quad[4]) { _cairo_gl_composite_prepare_buffer (ctx, 4); _cairo_gl_composite_emit_tristrip_vertex (ctx, &quad[0]); _cairo_gl_composite_emit_tristrip_vertex (ctx, &quad[1]); /* Cairo stores quad vertices in counter-clockwise order, but we need to emit them from top to bottom in the triangle strip, so we need to reverse the order of the last two vertices. */ _cairo_gl_composite_emit_tristrip_vertex (ctx, &quad[3]); _cairo_gl_composite_emit_tristrip_vertex (ctx, &quad[2]); return _cairo_gl_composite_append_vertex_indices (ctx, 4); }
cairo_int_status_t _cairo_gl_composite_emit_triangle_as_tristrip (cairo_gl_context_t *ctx, cairo_gl_composite_t *setup, const cairo_point_t triangle[3]) { if (ctx->draw_mode != CAIRO_GL_VERTEX) { _cairo_gl_composite_flush (ctx); ctx->draw_mode = CAIRO_GL_VERTEX; } _cairo_gl_composite_prepare_buffer (ctx, 3, CAIRO_GL_PRIMITIVE_TYPE_TRISTRIPS); _cairo_gl_composite_emit_point (ctx, &triangle[0], 0); _cairo_gl_composite_emit_point (ctx, &triangle[1], 0); _cairo_gl_composite_emit_point (ctx, &triangle[2], 0); return _cairo_gl_composite_append_vertex_indices (ctx, 3, TRUE); }
cairo_int_status_t _cairo_gl_composite_emit_quad_as_tristrip (cairo_gl_context_t *ctx, cairo_gl_composite_t *setup, const cairo_point_t quad[4]) { if (ctx->draw_mode != CAIRO_GL_VERTEX) { _cairo_gl_composite_flush (ctx); ctx->draw_mode = CAIRO_GL_VERTEX; } _cairo_gl_composite_prepare_buffer (ctx, 4, CAIRO_GL_PRIMITIVE_TYPE_TRISTRIPS); _cairo_gl_composite_emit_point (ctx, &quad[0], 0); _cairo_gl_composite_emit_point (ctx, &quad[1], 0); /* Cairo stores quad vertices in counter-clockwise order, but we need to emit them from top to bottom in the triangle strip, so we need to reverse the order of the last two vertices. */ _cairo_gl_composite_emit_point (ctx, &quad[3], 0); _cairo_gl_composite_emit_point (ctx, &quad[2], 0); return _cairo_gl_composite_append_vertex_indices (ctx, 4, TRUE); }