diff options
Diffstat (limited to 'src/gallium/state_trackers/vega/vgu.c')
-rw-r--r-- | src/gallium/state_trackers/vega/vgu.c | 441 |
1 files changed, 0 insertions, 441 deletions
diff --git a/src/gallium/state_trackers/vega/vgu.c b/src/gallium/state_trackers/vega/vgu.c deleted file mode 100644 index 4206a91e006..00000000000 --- a/src/gallium/state_trackers/vega/vgu.c +++ /dev/null @@ -1,441 +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/vgu.h" - -#include "matrix.h" -#include "path.h" -#include "handle.h" - -#include "util/u_debug.h" -#include "util/u_pointer.h" - -#include <math.h> -#include <assert.h> - - -static void vgu_append_float_coords(VGPath path, - const VGubyte *cmds, - VGint num_cmds, - const VGfloat *coords, - VGint num_coords) -{ - VGubyte common_data[40 * sizeof(VGfloat)]; - struct path *p = handle_to_path(path); - - vg_float_to_datatype(path_datatype(p), common_data, coords, num_coords); - vgAppendPathData(path, num_cmds, cmds, common_data); -} - -VGUErrorCode vguLine(VGPath path, - VGfloat x0, VGfloat y0, - VGfloat x1, VGfloat y1) -{ - static const VGubyte cmds[] = {VG_MOVE_TO_ABS, VG_LINE_TO_ABS}; - VGfloat coords[4]; - VGbitfield caps; - - if (path == VG_INVALID_HANDLE) { - return VGU_BAD_HANDLE_ERROR; - } - caps = vgGetPathCapabilities(path); - if (!(caps & VG_PATH_CAPABILITY_APPEND_TO)) { - return VGU_PATH_CAPABILITY_ERROR; - } - - coords[0] = x0; - coords[1] = y0; - coords[2] = x1; - coords[3] = y1; - - vgu_append_float_coords(path, cmds, 2, coords, 4); - - return VGU_NO_ERROR; -} - -VGUErrorCode vguPolygon(VGPath path, - const VGfloat * points, - VGint count, - VGboolean closed) -{ - VGubyte *cmds; - VGfloat *coords; - VGbitfield caps; - VGint i; - - if (path == VG_INVALID_HANDLE) { - return VGU_BAD_HANDLE_ERROR; - } - - if (!points || count <= 0 || !is_aligned(points)) { - return VGU_ILLEGAL_ARGUMENT_ERROR; - } - - caps = vgGetPathCapabilities(path); - if (!(caps & VG_PATH_CAPABILITY_APPEND_TO)) { - return VGU_PATH_CAPABILITY_ERROR; - } - - cmds = malloc(sizeof(VGubyte) * count + 1); - coords = malloc(sizeof(VGfloat) * count * 2); - - cmds[0] = VG_MOVE_TO_ABS; - coords[0] = points[0]; - coords[1] = points[1]; - for (i = 1; i < count; ++i) { - cmds[i] = VG_LINE_TO_ABS; - coords[2*i + 0] = points[2*i + 0]; - coords[2*i + 1] = points[2*i + 1]; - } - - if (closed) { - cmds[i] = VG_CLOSE_PATH; - ++i; - } - - vgu_append_float_coords(path, cmds, i, coords, 2*i); - - free(cmds); - free(coords); - - return VGU_NO_ERROR; -} - -VGUErrorCode vguRect(VGPath path, - VGfloat x, VGfloat y, - VGfloat width, VGfloat height) -{ - static const VGubyte cmds[] = {VG_MOVE_TO_ABS, - VG_HLINE_TO_REL, - VG_VLINE_TO_REL, - VG_HLINE_TO_REL, - VG_CLOSE_PATH - }; - VGfloat coords[5]; - VGbitfield caps; - - if (path == VG_INVALID_HANDLE) { - return VGU_BAD_HANDLE_ERROR; - } - caps = vgGetPathCapabilities(path); - if (!(caps & VG_PATH_CAPABILITY_APPEND_TO)) { - return VGU_PATH_CAPABILITY_ERROR; - } - if (width <= 0 || height <= 0) { - return VGU_ILLEGAL_ARGUMENT_ERROR; - } - - coords[0] = x; - coords[1] = y; - coords[2] = width; - coords[3] = height; - coords[4] = -width; - - vgu_append_float_coords(path, cmds, 5, coords, 5); - - return VGU_NO_ERROR; -} - -VGUErrorCode vguRoundRect(VGPath path, - VGfloat x, VGfloat y, - VGfloat width, - VGfloat height, - VGfloat arcWidth, - VGfloat arcHeight) -{ - static const VGubyte cmds[] = {VG_MOVE_TO_ABS, - VG_HLINE_TO_REL, - VG_SCCWARC_TO_REL, - VG_VLINE_TO_REL, - VG_SCCWARC_TO_REL, - VG_HLINE_TO_REL, - VG_SCCWARC_TO_REL, - VG_VLINE_TO_REL, - VG_SCCWARC_TO_REL, - VG_CLOSE_PATH - }; - VGfloat c[26]; - VGbitfield caps; - - if (path == VG_INVALID_HANDLE) { - return VGU_BAD_HANDLE_ERROR; - } - caps = vgGetPathCapabilities(path); - if (!(caps & VG_PATH_CAPABILITY_APPEND_TO)) { - return VGU_PATH_CAPABILITY_ERROR; - } - if (width <= 0 || height <= 0) { - return VGU_ILLEGAL_ARGUMENT_ERROR; - } - - c[0] = x + arcWidth/2; c[1] = y; - - c[2] = width - arcWidth; - - c[3] = arcWidth/2; c[4] = arcHeight/2; c[5] = 0; - c[6] = arcWidth/2; c[7] = arcHeight/2; - - c[8] = height - arcHeight; - - c[9] = arcWidth/2; c[10] = arcHeight/2; c[11] = 0; - c[12] = -arcWidth/2; c[13] = arcHeight/2; - - c[14] = -(width - arcWidth); - - c[15] = arcWidth/2; c[16] = arcHeight/2; c[17] = 0; - c[18] = -arcWidth/2; c[19] = -arcHeight/2; - - c[20] = -(height - arcHeight); - - c[21] = arcWidth/2; c[22] = arcHeight/2; c[23] = 0; - c[24] = arcWidth/2; c[25] = -arcHeight/2; - - vgu_append_float_coords(path, cmds, 10, c, 26); - - return VGU_NO_ERROR; -} - -VGUErrorCode vguEllipse(VGPath path, - VGfloat cx, VGfloat cy, - VGfloat width, - VGfloat height) -{ - static const VGubyte cmds[] = {VG_MOVE_TO_ABS, - VG_SCCWARC_TO_REL, - VG_SCCWARC_TO_REL, - VG_CLOSE_PATH - }; - VGfloat coords[12]; - VGbitfield caps; - - if (path == VG_INVALID_HANDLE) { - return VGU_BAD_HANDLE_ERROR; - } - caps = vgGetPathCapabilities(path); - if (!(caps & VG_PATH_CAPABILITY_APPEND_TO)) { - return VGU_PATH_CAPABILITY_ERROR; - } - if (width <= 0 || height <= 0) { - return VGU_ILLEGAL_ARGUMENT_ERROR; - } - - coords[0] = cx + width/2; coords[1] = cy; - - coords[2] = width/2; coords[3] = height/2; coords[4] = 0; - coords[5] = -width; coords[6] = 0; - - coords[7] = width/2; coords[8] = height/2; coords[9] = 0; - coords[10] = width; coords[11] = 0; - - vgu_append_float_coords(path, cmds, 4, coords, 11); - - return VGU_NO_ERROR; -} - -VGUErrorCode vguArc(VGPath path, - VGfloat x, VGfloat y, - VGfloat width, VGfloat height, - VGfloat startAngle, - VGfloat angleExtent, - VGUArcType arcType) -{ - VGubyte cmds[11]; - VGfloat coords[40]; - VGbitfield caps; - VGfloat last = startAngle + angleExtent; - VGint i, c = 0; - - if (path == VG_INVALID_HANDLE) { - return VGU_BAD_HANDLE_ERROR; - } - caps = vgGetPathCapabilities(path); - if (!(caps & VG_PATH_CAPABILITY_APPEND_TO)) { - return VGU_PATH_CAPABILITY_ERROR; - } - if (width <= 0 || height <= 0) { - return VGU_ILLEGAL_ARGUMENT_ERROR; - } - if (arcType != VGU_ARC_OPEN && - arcType != VGU_ARC_CHORD && - arcType != VGU_ARC_PIE) { - return VGU_ILLEGAL_ARGUMENT_ERROR; - } - - cmds[c] = VG_MOVE_TO_ABS; ++c; - coords[0] = x+cos(DEGREES_TO_RADIANS(startAngle))*width/2; - coords[1] = y+sin(DEGREES_TO_RADIANS(startAngle))*height/2; -#ifdef DEBUG_VGUARC - debug_printf("start [%f, %f]\n", coords[0], coords[1]); -#endif - i = 2; - if (angleExtent > 0) { - VGfloat angle = startAngle + 180; - while (angle < last) { - cmds[c] = VG_SCCWARC_TO_ABS; ++c; - coords[i] = width/2; coords[i+1] = height/2; coords[i+2] = 0; - coords[i+3] = x + cos(DEGREES_TO_RADIANS(angle))*width/2; - coords[i+4] = y + sin(DEGREES_TO_RADIANS(angle))*height/2; -#ifdef DEBUG_VGUARC - debug_printf("1 [%f, %f]\n", coords[i+3], - coords[i+4]); -#endif - i += 5; - angle += 180; - } - cmds[c] = VG_SCCWARC_TO_ABS; ++c; - coords[i] = width/2; coords[i+1] = height/2; coords[i+2] = 0; - coords[i+3] = x+cos(DEGREES_TO_RADIANS(last))*width/2; - coords[i+4] = y+sin(DEGREES_TO_RADIANS(last))*height/2; -#ifdef DEBUG_VGUARC - debug_printf("2 [%f, %f]\n", coords[i+3], - coords[i+4]); -#endif - i += 5; - } else { - VGfloat angle = startAngle - 180; - while (angle > last) { - cmds[c] = VG_SCWARC_TO_ABS; ++c; - coords[i] = width/2; coords[i+1] = height/2; coords[i+2] = 0; - coords[i+3] = x + cos(DEGREES_TO_RADIANS(angle)) * width/2; - coords[i+4] = y + sin(DEGREES_TO_RADIANS(angle)) * height/2; -#ifdef DEBUG_VGUARC - debug_printf("3 [%f, %f]\n", coords[i+3], - coords[i+4]); -#endif - angle -= 180; - i += 5; - } - cmds[c] = VG_SCWARC_TO_ABS; ++c; - coords[i] = width/2; coords[i+1] = height/2; coords[i+2] = 0; - coords[i+3] = x + cos(DEGREES_TO_RADIANS(last)) * width/2; - coords[i+4] = y + sin(DEGREES_TO_RADIANS(last)) * height/2; -#ifdef DEBUG_VGUARC - debug_printf("4 [%f, %f]\n", coords[i+3], - coords[i+4]); -#endif - i += 5; - } - - if (arcType == VGU_ARC_PIE) { - cmds[c] = VG_LINE_TO_ABS; ++c; - coords[i] = x; coords[i + 1] = y; - i += 2; - } - if (arcType == VGU_ARC_PIE || arcType == VGU_ARC_CHORD) { - cmds[c] = VG_CLOSE_PATH; - ++c; - } - - assert(c < 11); - - vgu_append_float_coords(path, cmds, c, coords, i); - - return VGU_NO_ERROR; -} - -VGUErrorCode vguComputeWarpQuadToSquare(VGfloat sx0, VGfloat sy0, - VGfloat sx1, VGfloat sy1, - VGfloat sx2, VGfloat sy2, - VGfloat sx3, VGfloat sy3, - VGfloat * matrix) -{ - struct matrix mat; - - if (!matrix || !is_aligned(matrix)) - return VGU_ILLEGAL_ARGUMENT_ERROR; - - if (!matrix_quad_to_square(sx0, sy0, - sx1, sy1, - sx2, sy2, - sx3, sy3, - &mat)) - return VGU_BAD_WARP_ERROR; - - if (!matrix_is_invertible(&mat)) - return VGU_BAD_WARP_ERROR; - - memcpy(matrix, mat.m, sizeof(VGfloat) * 9); - - return VGU_NO_ERROR; -} - -VGUErrorCode vguComputeWarpSquareToQuad(VGfloat dx0, VGfloat dy0, - VGfloat dx1, VGfloat dy1, - VGfloat dx2, VGfloat dy2, - VGfloat dx3, VGfloat dy3, - VGfloat * matrix) -{ - struct matrix mat; - - if (!matrix || !is_aligned(matrix)) - return VGU_ILLEGAL_ARGUMENT_ERROR; - - if (!matrix_square_to_quad(dx0, dy0, - dx1, dy1, - dx2, dy2, - dx3, dy3, - &mat)) - return VGU_BAD_WARP_ERROR; - - if (!matrix_is_invertible(&mat)) - return VGU_BAD_WARP_ERROR; - - memcpy(matrix, mat.m, sizeof(VGfloat) * 9); - - return VGU_NO_ERROR; -} - -VGUErrorCode vguComputeWarpQuadToQuad(VGfloat dx0, VGfloat dy0, - VGfloat dx1, VGfloat dy1, - VGfloat dx2, VGfloat dy2, - VGfloat dx3, VGfloat dy3, - VGfloat sx0, VGfloat sy0, - VGfloat sx1, VGfloat sy1, - VGfloat sx2, VGfloat sy2, - VGfloat sx3, VGfloat sy3, - VGfloat * matrix) -{ - struct matrix mat; - - if (!matrix || !is_aligned(matrix)) - return VGU_ILLEGAL_ARGUMENT_ERROR; - - if (!matrix_quad_to_quad(dx0, dy0, - dx1, dy1, - dx2, dy2, - dx3, dy3, - sx0, sy0, - sx1, sy1, - sx2, sy2, - sx3, sy3, - &mat)) - return VGU_BAD_WARP_ERROR; - - memcpy(matrix, mat.m, sizeof(VGfloat) * 9); - - return VGU_NO_ERROR; -} |