void cogl_framebuffer_push_path_clip (CoglFramebuffer *framebuffer, CoglPath *path) { CoglMatrixEntry *modelview_entry = _cogl_framebuffer_get_modelview_entry (framebuffer); CoglMatrixEntry *projection_entry = _cogl_framebuffer_get_projection_entry (framebuffer); /* XXX: It would be nicer if we stored the private viewport as a * vec4 so we could avoid this redundant copy. */ float viewport[] = { framebuffer->viewport_x, framebuffer->viewport_y, framebuffer->viewport_width, framebuffer->viewport_height }; framebuffer->clip_stack = _cogl_clip_stack_push_from_path (framebuffer->clip_stack, path, modelview_entry, projection_entry, viewport); if (framebuffer->context->current_draw_buffer == framebuffer) framebuffer->context->current_draw_buffer_changes |= COGL_FRAMEBUFFER_STATE_CLIP; }
void cogl_clip_push_from_path_preserve (void) { CoglFramebuffer *framebuffer; CoglClipState *clip_state; CoglMatrix modelview_matrix; _COGL_GET_CONTEXT (ctx, NO_RETVAL); framebuffer = _cogl_get_draw_buffer (); clip_state = _cogl_framebuffer_get_clip_state (framebuffer); cogl_get_modelview_matrix (&modelview_matrix); clip_state->stacks->data = _cogl_clip_stack_push_from_path (clip_state->stacks->data, ctx->current_path, &modelview_matrix); }