13a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/************************************************************************** 23a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * 33a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * Copyright 2009 VMware, Inc. All Rights Reserved. 43a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * 53a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * Permission is hereby granted, free of charge, to any person obtaining a 63a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * copy of this software and associated documentation files (the 73a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * "Software"), to deal in the Software without restriction, including 83a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * without limitation the rights to use, copy, modify, merge, publish, 93a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * distribute, sub license, and/or sell copies of the Software, and to 103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * permit persons to whom the Software is furnished to do so, subject to 113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * the following conditions: 123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * 133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * The above copyright notice and this permission notice (including the 143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * next paragraph) shall be included in all copies or substantial portions 153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * of the Software. 163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * 173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR 213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 223a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 233a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * 253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org **************************************************************************/ 263a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 273a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#ifndef VG_STATE_H 283a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define VG_STATE_H 293a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 303a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#include "VG/openvg.h" 313a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 323a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#include "api_consts.h" 333a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#include "matrix.h" 343a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 353a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstruct vg_value 363a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{ 373a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org VGfloat f; 383a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org VGint i; 393a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org}; 403a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 413a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstruct vg_state { 423a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org /* Mode settings */ 433a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org VGMatrixMode matrix_mode; 443a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org VGFillRule fill_rule; 453a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org VGImageQuality image_quality; 463a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org VGRenderingQuality rendering_quality; 473a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org VGBlendMode blend_mode; 483a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org VGImageMode image_mode; 493a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 503a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org /* Scissoring rectangles */ 513a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org struct vg_value scissor_rects[32*4]; 523a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org VGint scissor_rects_num; 533a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 543a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org /* Color Transformation */ 553a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org VGboolean color_transform; 563a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org VGfloat color_transform_values[8]; 573a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 583a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org /* Stroke parameters */ 593a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org struct { 603a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org struct vg_value line_width; 613a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org VGCapStyle cap_style; 623a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org VGJoinStyle join_style; 633a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org struct vg_value miter_limit; 643a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org struct vg_value dash_pattern[VEGA_MAX_DASH_COUNT]; 653a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org VGint dash_pattern_num; 663a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org struct vg_value dash_phase; 673a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org VGboolean dash_phase_reset; 683a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } stroke; 693a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 703a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org /* Edge fill color for VG_TILE_FILL tiling mode */ 713a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org VGfloat tile_fill_color[4]; 723a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org VGint tile_fill_colori[4]; 733a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 743a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org /* Color for vgClear */ 753a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org VGfloat clear_color[4]; 763a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org VGint clear_colori[4]; 773a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 783a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org /* Glyph origin */ 793a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org struct vg_value glyph_origin[2]; 803a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 813a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org /* Enable/disable alpha masking and scissoring */ 823a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org VGboolean masking; 833a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org VGboolean scissoring; 843a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 853a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org /* Pixel layout information */ 863a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org VGPixelLayout pixel_layout; 873a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org VGPixelLayout screen_layout; 883a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 893a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org /* Source format selection for image filters */ 903a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org VGboolean filter_format_linear; 913a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org VGboolean filter_format_premultiplied; 923a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 933a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org /* Destination write enable mask for image filters */ 943a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org VGbitfield filter_channel_mask; 953a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 963a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org struct matrix path_user_to_surface_matrix; 973a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org struct matrix image_user_to_surface_matrix; 983a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org struct matrix fill_paint_to_user_matrix; 993a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org struct matrix stroke_paint_to_user_matrix; 1003a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org struct matrix glyph_user_to_surface_matrix; 1013a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1023a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org struct vg_paint *stroke_paint; 1033a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org struct vg_paint *fill_paint; 1043a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org}; 1053a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1063a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgvoid vg_init_state(struct vg_state *state); 1073a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstruct matrix * vg_state_matrix(struct vg_state *state); 1083a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1093a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#endif 110