summaryrefslogtreecommitdiff
path: root/src/gallium/state_trackers/vega/api_path.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium/state_trackers/vega/api_path.c')
-rw-r--r--src/gallium/state_trackers/vega/api_path.c487
1 files changed, 0 insertions, 487 deletions
diff --git a/src/gallium/state_trackers/vega/api_path.c b/src/gallium/state_trackers/vega/api_path.c
deleted file mode 100644
index ab6ce958945..00000000000
--- a/src/gallium/state_trackers/vega/api_path.c
+++ /dev/null
@@ -1,487 +0,0 @@
-/**************************************************************************
- *
- * Copyright 2009 VMware, Inc. All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- **************************************************************************/
-
-#include "VG/openvg.h"
-
-#include "vg_context.h"
-#include "handle.h"
-#include "path.h"
-#include "api.h"
-
-#include "pipe/p_context.h"
-
-VGPath vegaCreatePath(VGint pathFormat,
- VGPathDatatype datatype,
- VGfloat scale, VGfloat bias,
- VGint segmentCapacityHint,
- VGint coordCapacityHint,
- VGbitfield capabilities)
-{
- struct vg_context *ctx = vg_current_context();
-
- if (pathFormat != VG_PATH_FORMAT_STANDARD) {
- vg_set_error(ctx, VG_UNSUPPORTED_PATH_FORMAT_ERROR);
- return VG_INVALID_HANDLE;
- }
- if (datatype < VG_PATH_DATATYPE_S_8 ||
- datatype > VG_PATH_DATATYPE_F) {
- vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
- return VG_INVALID_HANDLE;
- }
- if (!scale) {
- vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
- return VG_INVALID_HANDLE;
- }
-
- return path_to_handle(path_create(datatype, scale, bias,
- segmentCapacityHint, coordCapacityHint,
- capabilities));
-}
-
-void vegaClearPath(VGPath path, VGbitfield capabilities)
-{
- struct vg_context *ctx = vg_current_context();
- struct path *p = 0;
-
- if (path == VG_INVALID_HANDLE) {
- vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
- return;
- }
-
- p = handle_to_path(path);
- path_clear(p, capabilities);
-}
-
-void vegaDestroyPath(VGPath p)
-{
- struct path *path = 0;
- struct vg_context *ctx = vg_current_context();
-
- if (p == VG_INVALID_HANDLE) {
- vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
- return;
- }
-
- path = handle_to_path(p);
- path_destroy(path);
-}
-
-void vegaRemovePathCapabilities(VGPath path,
- VGbitfield capabilities)
-{
- struct vg_context *ctx = vg_current_context();
- VGbitfield current;
- struct path *p;
-
- if (path == VG_INVALID_HANDLE) {
- vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
- return;
- }
-
- p = handle_to_path(path);
- current = path_capabilities(p);
- path_set_capabilities(p, (current &
- (~(capabilities & VG_PATH_CAPABILITY_ALL))));
-}
-
-VGbitfield vegaGetPathCapabilities(VGPath path)
-{
- struct vg_context *ctx = vg_current_context();
- struct path *p = 0;
-
- if (path == VG_INVALID_HANDLE) {
- vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
- return 0;
- }
- p = handle_to_path(path);
- return path_capabilities(p);
-}
-
-void vegaAppendPath(VGPath dstPath, VGPath srcPath)
-{
- struct vg_context *ctx = vg_current_context();
- struct path *src, *dst;
-
- if (dstPath == VG_INVALID_HANDLE || srcPath == VG_INVALID_HANDLE) {
- vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
- return;
- }
- src = handle_to_path(srcPath);
- dst = handle_to_path(dstPath);
-
- if (!(path_capabilities(src) & VG_PATH_CAPABILITY_APPEND_FROM) ||
- !(path_capabilities(dst) & VG_PATH_CAPABILITY_APPEND_TO)) {
- vg_set_error(ctx, VG_PATH_CAPABILITY_ERROR);
- return;
- }
- path_append_path(dst, src);
-}
-
-void vegaAppendPathData(VGPath dstPath,
- VGint numSegments,
- const VGubyte * pathSegments,
- const void * pathData)
-{
- struct vg_context *ctx = vg_current_context();
- struct path *p = 0;
- VGint i;
-
- if (dstPath == VG_INVALID_HANDLE) {
- vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
- return;
- }
- if (!pathSegments) {
- vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
- return;
- }
- if (numSegments <= 0) {
- vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
- return;
- }
- for (i = 0; i < numSegments; ++i) {
- if (pathSegments[i] > VG_LCWARC_TO_REL) {
- vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
- return;
- }
- }
-
- p = handle_to_path(dstPath);
-
- if (!p || !is_aligned_to(p, path_datatype_size(p))) {
- vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
- return;
- }
-
- if (!(path_capabilities(p)&VG_PATH_CAPABILITY_APPEND_TO)) {
- vg_set_error(ctx, VG_PATH_CAPABILITY_ERROR);
- return;
- }
-
- path_append_data(p, numSegments, pathSegments, pathData);
-}
-
-void vegaModifyPathCoords(VGPath dstPath,
- VGint startIndex,
- VGint numSegments,
- const void * pathData)
-{
- struct vg_context *ctx = vg_current_context();
- struct path *p = 0;
-
- if (dstPath == VG_INVALID_HANDLE) {
- vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
- return;
- }
- if (startIndex < 0 || numSegments <= 0) {
- vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
- return;
- }
-
- p = handle_to_path(dstPath);
-
- if (!pathData || !is_aligned_to(pathData, path_datatype_size(p))) {
- vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
- return;
- }
-
- if (startIndex + numSegments > path_num_segments(p)) {
- vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
- return;
- }
- if (!(path_capabilities(p)&VG_PATH_CAPABILITY_MODIFY)) {
- vg_set_error(ctx, VG_PATH_CAPABILITY_ERROR);
- return;
- }
- path_modify_coords(p, startIndex, numSegments, pathData);
-}
-
-void vegaTransformPath(VGPath dstPath, VGPath srcPath)
-{
- struct vg_context *ctx = vg_current_context();
- struct path *src = 0, *dst = 0;
-
- if (dstPath == VG_INVALID_HANDLE || srcPath == VG_INVALID_HANDLE) {
- vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
- return;
- }
- src = handle_to_path(srcPath);
- dst = handle_to_path(dstPath);
-
- if (!(path_capabilities(src) & VG_PATH_CAPABILITY_TRANSFORM_FROM) ||
- !(path_capabilities(dst) & VG_PATH_CAPABILITY_TRANSFORM_TO)) {
- vg_set_error(ctx, VG_PATH_CAPABILITY_ERROR);
- return;
- }
- path_transform(dst, src);
-}
-
-VGboolean vegaInterpolatePath(VGPath dstPath,
- VGPath startPath,
- VGPath endPath,
- VGfloat amount)
-{
- struct vg_context *ctx = vg_current_context();
- struct path *start = 0, *dst = 0, *end = 0;
-
- if (dstPath == VG_INVALID_HANDLE ||
- startPath == VG_INVALID_HANDLE ||
- endPath == VG_INVALID_HANDLE) {
- vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
- return VG_FALSE;
- }
- dst = handle_to_path(dstPath);
- start = handle_to_path(startPath);
- end = handle_to_path(endPath);
-
- if (!(path_capabilities(dst) & VG_PATH_CAPABILITY_INTERPOLATE_TO) ||
- !(path_capabilities(start) & VG_PATH_CAPABILITY_INTERPOLATE_FROM) ||
- !(path_capabilities(end) & VG_PATH_CAPABILITY_INTERPOLATE_FROM)) {
- vg_set_error(ctx, VG_PATH_CAPABILITY_ERROR);
- return VG_FALSE;
- }
-
- return path_interpolate(dst,
- start, end, amount);
-}
-
-VGfloat vegaPathLength(VGPath path,
- VGint startSegment,
- VGint numSegments)
-{
- struct vg_context *ctx = vg_current_context();
- struct path *p = 0;
-
- if (path == VG_INVALID_HANDLE) {
- vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
- return -1;
- }
- if (startSegment < 0) {
- vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
- return -1;
- }
- if (numSegments <= 0) {
- vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
- return -1;
- }
- p = handle_to_path(path);
-
- if (!(path_capabilities(p) & VG_PATH_CAPABILITY_PATH_LENGTH)) {
- vg_set_error(ctx, VG_PATH_CAPABILITY_ERROR);
- return -1;
- }
- if (startSegment + numSegments > path_num_segments(p)) {
- vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
- return -1;
- }
-
- return path_length(p, startSegment, numSegments);
-}
-
-void vegaPointAlongPath(VGPath path,
- VGint startSegment,
- VGint numSegments,
- VGfloat distance,
- VGfloat * x, VGfloat * y,
- VGfloat * tangentX,
- VGfloat * tangentY)
-{
- struct vg_context *ctx = vg_current_context();
- struct path *p = 0;
- VGbitfield caps;
-
- if (path == VG_INVALID_HANDLE) {
- vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
- return;
- }
- if (startSegment < 0) {
- vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
- return;
- }
- if (numSegments <= 0) {
- vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
- return;
- }
-
- if (!is_aligned(x) || !is_aligned(y) ||
- !is_aligned(tangentX) || !is_aligned(tangentY)) {
- vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
- return;
- }
-
- p = handle_to_path(path);
-
- caps = path_capabilities(p);
- if (!(caps & VG_PATH_CAPABILITY_POINT_ALONG_PATH) ||
- !(caps & VG_PATH_CAPABILITY_TANGENT_ALONG_PATH)) {
- vg_set_error(ctx, VG_PATH_CAPABILITY_ERROR);
- return;
- }
-
- if (startSegment + numSegments > path_num_segments(p)) {
- vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
- return;
- }
-
- {
- VGfloat point[2], normal[2];
- path_point(p, startSegment, numSegments, distance,
- point, normal);
- if (x)
- *x = point[0];
- if (y)
- *y = point[1];
- if (tangentX)
- *tangentX = -normal[1];
- if (tangentY)
- *tangentY = normal[0];
- }
-}
-
-void vegaPathBounds(VGPath path,
- VGfloat * minX,
- VGfloat * minY,
- VGfloat * width,
- VGfloat * height)
-{
- struct vg_context *ctx = vg_current_context();
- struct path *p = 0;
- VGbitfield caps;
-
- if (path == VG_INVALID_HANDLE) {
- vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
- return;
- }
-
- if (!minX || !minY || !width || !height) {
- vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
- return;
- }
-
- if (!is_aligned(minX) || !is_aligned(minY) ||
- !is_aligned(width) || !is_aligned(height)) {
- vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
- return;
- }
-
- p = handle_to_path(path);
-
- caps = path_capabilities(p);
- if (!(caps & VG_PATH_CAPABILITY_PATH_BOUNDS)) {
- vg_set_error(ctx, VG_PATH_CAPABILITY_ERROR);
- return;
- }
-
- path_bounding_rect(p, minX, minY, width, height);
-}
-
-void vegaPathTransformedBounds(VGPath path,
- VGfloat * minX,
- VGfloat * minY,
- VGfloat * width,
- VGfloat * height)
-{
- struct vg_context *ctx = vg_current_context();
- struct path *p = 0;
- VGbitfield caps;
-
- if (path == VG_INVALID_HANDLE) {
- vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
- return;
- }
-
- if (!minX || !minY || !width || !height) {
- vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
- return;
- }
-
- if (!is_aligned(minX) || !is_aligned(minY) ||
- !is_aligned(width) || !is_aligned(height)) {
- vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
- return;
- }
-
- p = handle_to_path(path);
-
- caps = path_capabilities(p);
- if (!(caps & VG_PATH_CAPABILITY_PATH_TRANSFORMED_BOUNDS)) {
- vg_set_error(ctx, VG_PATH_CAPABILITY_ERROR);
- return;
- }
-
-#if 0
- /* faster, but seems to have precision problems... */
- path_bounding_rect(p, minX, minY, width, height);
- if (*width > 0 && *height > 0) {
- VGfloat pts[] = {*minX, *minY,
- *minX + *width, *minY,
- *minX + *width, *minY + *height,
- *minX, *minY + *height};
- struct matrix *matrix = &ctx->state.vg.path_user_to_surface_matrix;
- VGfloat maxX, maxY;
- matrix_map_point(matrix, pts[0], pts[1], pts + 0, pts + 1);
- matrix_map_point(matrix, pts[2], pts[3], pts + 2, pts + 3);
- matrix_map_point(matrix, pts[4], pts[5], pts + 4, pts + 5);
- matrix_map_point(matrix, pts[6], pts[7], pts + 6, pts + 7);
- *minX = MIN2(pts[0], MIN2(pts[2], MIN2(pts[4], pts[6])));
- *minY = MIN2(pts[1], MIN2(pts[3], MIN2(pts[5], pts[7])));
- maxX = MAX2(pts[0], MAX2(pts[2], MAX2(pts[4], pts[6])));
- maxY = MAX2(pts[1], MAX2(pts[3], MAX2(pts[5], pts[7])));
- *width = maxX - *minX;
- *height = maxY - *minY;
- }
-#else
- {
- struct path *dst = path_create(VG_PATH_DATATYPE_F, 1.0, 0,
- 0, 0, VG_PATH_CAPABILITY_ALL);
- path_transform(dst, p);
- path_bounding_rect(dst, minX, minY, width, height);
- path_destroy(dst);
- }
-#endif
-}
-
-
-void vegaDrawPath(VGPath path, VGbitfield paintModes)
-{
- struct vg_context *ctx = vg_current_context();
- struct path *p = handle_to_path(path);
-
- if (path == VG_INVALID_HANDLE) {
- vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
- return;
- }
-
- if (!(paintModes & (VG_STROKE_PATH | VG_FILL_PATH))) {
- vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
- return;
- }
-
- if (path_is_empty(p))
- return;
- path_render(p, paintModes,
- &ctx->state.vg.path_user_to_surface_matrix);
-}
-