Ensure OpenGL ES 2.0 C functions use C signatures in C++ builds (fixes VS builds)
// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
// All rights reserved.
// This component and the accompanying materials are made available
// under the terms of "Eclipse Public License v1.0"
// which accompanies this distribution, and is available
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
//
// Initial Contributors:
// Nokia Corporation - initial contribution.
//
// Contributors:
//
// Description:
// OpenVG C API for Symbian DLL
#include "vgstate.h"
extern "C" {
/*
Note: Comments at the start of each Open VG api are adapted from the Open VG 1.1 specification.
The text has been chosen/adapted to give a helpful overview of the function, and the errors
(other than VG_NO_CONTEXT_ERROR) that it may generate. For more details and diagrams see the
full Open VG specification.
*/
/*
The vgGetParameter functions return the value of a parameter on a given VGHandlebased
object.
The original value passed to vgSetParameter (provided the call to
vgSetParameter completed without error) should be returned by
vgGetParameter (except where specifically noted), even if the implementation
makes use of a truncated or quantized value internally.
ERRORS
VG_BAD_HANDLE_ERROR
if object is not a valid handle, or is not shared with the current context
VG_ILLEGAL_ARGUMENT_ERROR
if paramType is not a valid value from the appropriate enumeration
if paramType refers to a vector parameter in vgGetParameterf or
vgGetParameteri
*/
EXPORT_C VGint
vgGetParameteri(VGHandle object,
VGint paramType)
{
OPENVG_TRACE("vgGetParameteri object=0x%x, paramType=0x%x -->", object, paramType);
VGint value = TGuestOpenVg::vgGetParameteri(object, paramType);
OPENVG_TRACE("vgGetParameteri value=0x%x <--", value);
return value;
}
////////////////////////////////////////////////////////////////////////////////////////////
//Functions returning value
////////////////////////////////////////////////////////////////////////////////////////////
/*
Returns the oldest error code provided by an API call on the current context since the
previous call to vgGetError on that context (or since the creation of the context). No
error is indicated by a return value of 0 (VG_NO_ERROR). After the call, the error code is
cleared to 0. The possible errors that may be generated by each OpenVG function (apart from
VG_OUT_OF_MEMORY_ERROR) are shown below the definition of the function.
If no context is current at the time vgGetError is called, the error code
VG_NO_CONTEXT_ERROR is returned. Pending error codes on existing contexts are not affected
by the call.
*/
EXPORT_C VGErrorCode
vgGetError(void)
{
OPENVG_TRACE("vgGetError");
MVgContext* vgContext = CVghwUtils::VgContext();
VGErrorCode error = VG_NO_CONTEXT_ERROR;
if (vgContext)
{ // thread state already exists - get client or Host VG error
error = vgContext->VgError();
}
return error;
}
/*
Returns the paint object currently set for the given paintMode, or VG_INVALID_HANDLE
if an error occurs or if no paint object is set (i.e., the default paint is present) on
the given context with the given paintMode.
ERRORS
VG_ILLEGAL_ARGUMENT_ERROR
if paintMode is not a valid value from the VGPaintMode enumeration
*/
EXPORT_C VGPaint
vgGetPaint(VGPaintMode paintMode)
{
OPENVG_TRACE("vgGetPaint paintMode=0x%x -->", paintMode);
VGPaint paintHandle = TGuestOpenVg::vgGetPaint(paintMode);
OPENVG_TRACE("vgGetPaint handle=0x%x <--", paintHandle);
return paintHandle;
}
/*
Creates a new paint object that is initialized to a set of default values and returns
a VGPaint handle to it. If insufficient memory is available to allocate a new object,
VG_INVALID_HANDLE is returned.
*/
EXPORT_C VGPaint
vgCreatePaint(void)
{
OPENVG_TRACE("vgCreatePaint -->");
VGPaint paintHandle = TGuestOpenVg::vgCreatePaint();
OPENVG_TRACE("vgCreatePaint handle=0x%x <--", paintHandle);
return paintHandle;
}
/*
Appends a path, defined by interpolation (or extrapolation) between the paths
startPath and endPath by the given amount, to the path dstPath. It returns
VG_TRUE if interpolation was successful (i.e., the paths had compatible segment
types after normalization), and VG_FALSE otherwise. If interpolation is
unsuccessful, dstPath is left unchanged. It is legal for dstPath to be a handle
to the same path object as either startPath or endPath or both, in which case
the contents of the source path or paths referenced by dstPath will have the
interpolated path appended. If dstPath is not the a handle to the same path
object as either startPath or endPath, the contents of startPath and endPath
will not be affected by the call.
ERRORS
VG_BAD_HANDLE_ERROR
if any of dstPath, startPath, or endPath is not a valid path handle, or is
not shared with the current context
VG_PATH_CAPABILITY_ERROR
if VG_PATH_CAPABILITY_INTERPOLATE_TO is not enabled for dstPath
if VG_PATH_CAPABILITY_INTERPOLATE_FROM is not enabled for startPath or endPath
*/
EXPORT_C VGboolean
vgInterpolatePath(VGPath dstPath,
VGPath startPath,
VGPath endPath,
VGfloat amount)
{
OPENVG_TRACE("vgInterpolatePath dstPath=0x%x, startPath=0x%x, endPath=0x%x, amount=%f",
dstPath, startPath, endPath, amount);
return TGuestOpenVg::vgInterpolatePath(dstPath, startPath, endPath, amount);
}
/*
Returns the length of a given portion of a path in the user coordinate system
(that is, in the paths own coordinate system, disregarding any matrix
settings). Only the subpath consisting of the numSegments path segments beginning
with startSegment (where the initial path segment has index 0) is used. If an
error occurs, -1.0f is returned.
ERRORS
VG_BAD_HANDLE_ERROR
if path is not a valid path handle, or is not shared with the current context
VG_PATH_CAPABILITY_ERROR
if VG_PATH_CAPABILITY_PATH_LENGTH is not enabled for path
VG_ILLEGAL_ARGUMENT_ERROR
if startSegment is less than 0 or greater than the index of the final path
segment
if numSegments is less than or equal to 0
if (startSegment + numSegments 1) is greater than the index of the final
path segment
*/
EXPORT_C VGfloat
vgPathLength(VGPath path,
VGint startSegment,
VGint numSegments)
{
OPENVG_TRACE("vgPathLength path=0x%x, startSegment=%d, numSegments=%d", path, startSegment, numSegments);
return TGuestOpenVg::vgPathLength(path, startSegment, numSegments);
}
/*
Returns the current capabilities of the path, as a bitwise OR of
VGPathCapabilities constants. If an error occurs, 0 is returned.
ERRORS
VG_BAD_HANDLE_ERROR
if path is not a valid path handle, or is not shared with the current context
*/
EXPORT_C VGbitfield
vgGetPathCapabilities(VGPath path)
{
OPENVG_TRACE("vgGetPathCapabilities path=0x%x", path);
return TGuestOpenVg::vgGetPathCapabilities(path);
}
/*
Create a new path that is ready to accept segment data and return a VGPath handle
to it. The path data will be formatted in the format given by pathFormat, typically
VG_PATH_FORMAT_STANDARD. The datatype parameter contains a value from the
VGPathDatatype enumeration indicating the datatype that will be used for coordinate
data. The capabilities argument is a bitwise OR of the desired VGPathCapabilities
values. Bits of capabilities that do not correspond to values from VGPathCapabilities
have no effect.
If an error occurs, VG_INVALID_HANDLE is returned.
ERRORS
VG_UNSUPPORTED_PATH_FORMAT_ERROR
if pathFormat is not a supported format
VG_ILLEGAL_ARGUMENT_ERROR
if datatype is not a valid value from the VGPathDatatype enumeration
if scale is equal to 0
*/
EXPORT_C VGPath
vgCreatePath(VGint pathFormat,
VGPathDatatype datatype,
VGfloat scale, VGfloat bias,
VGint segmentCapacityHint,
VGint coordCapacityHint,
VGbitfield capabilities)
{
OPENVG_TRACE("vgCreatePath pathFormat=%d, datatype=0x%x, scale=%f, bias=%f, segCapHint=%d, coordCapHint=%d, caps=0x%x -->",
pathFormat, datatype, scale, bias, segmentCapacityHint, coordCapacityHint, capabilities);
VGPath pathHandle = TGuestOpenVg::vgCreatePath(pathFormat, datatype, scale, bias, segmentCapacityHint, coordCapacityHint, capabilities);
OPENVG_TRACE("vgCreatePath handle=0x%x <--", pathHandle);
return pathHandle;
}
/*
The vgGet functions return the value of a parameter on the current context.
The original value passed to vgSet (except as specifically noted, and provided the call to
vgSet completed without error) is returned by vgGet, even if the implementation makes
use of a truncated or quantized value internally. This rule ensures that OpenVG state may
be saved and restored without degradation.
If an error occurs during a call to vgGetf, vgGeti, or vgGetVectorSize, the return value
is undefined.
ERRORS
VG_ILLEGAL_ARGUMENT_ERROR
if paramType is not a valid value from the VGParamType enumeration
if paramType refers to a vector parameter in vgGetf or vgGeti
*/
EXPORT_C VGfloat
vgGetf(VGParamType type)
{
OPENVG_TRACE("vgGetf type=0x%x", type);
return TGuestOpenVg::vgGetf(type);
}
/*
The vgGet functions return the value of a parameter on the current context.
The original value passed to vgSet (except as specifically noted, and provided the call to
vgSet completed without error) is returned by vgGet, even if the implementation makes
use of a truncated or quantized value internally. This rule ensures that OpenVG state may
be saved and restored without degradation.
If an error occurs during a call to vgGetf, vgGeti, or vgGetVectorSize, the return value
is undefined.
ERRORS
VG_ILLEGAL_ARGUMENT_ERROR
if paramType is not a valid value from the VGParamType enumeration
if paramType refers to a vector parameter in vgGetf or vgGeti
*/
EXPORT_C VGint
vgGeti(VGParamType type)
{
OPENVG_TRACE("vgGeti type=0x%x", type);
return TGuestOpenVg::vgGeti(type);
}
/*
The vgGetVectorSize function returns the maximum number of elements in the vector
that will be retrieved by the vgGetiv or vgGetfv functions if called with the given
paramType argument. For scalar values, 1 is returned. If vgGetiv or vgGetfv is
called with a smaller value for count than that returned by vgGetVectorSize,
only the first count elements of the vector are retrieved. Use of a greater value
for count will result in an error.
The original value passed to vgSet (except as specifically noted, and provided the call to
vgSet completed without error) is returned by vgGet, even if the implementation makes
use of a truncated or quantized value internally. This rule ensures that OpenVG state may
be saved and restored without degradation.
If an error occurs during a call to vgGetf, vgGeti, or vgGetVectorSize, the return value
is undefined.
ERRORS
VG_ILLEGAL_ARGUMENT_ERROR
if paramType is not a valid value from the VGParamType enumeration
*/
EXPORT_C VGint
vgGetVectorSize(VGParamType type)
{
OPENVG_TRACE("vgGetVectorSize type=0x%x", type);
return TGuestOpenVg::vgGetVectorSize(type);
}
/*
The vgGetParameter functions return the value of a parameter on a given VGHandlebased
object.
The original value passed to vgSetParameter (provided the call to
vgSetParameter completed without error) should be returned by
vgGetParameter (except where specifically noted), even if the implementation
makes use of a truncated or quantized value internally.
ERRORS
VG_BAD_HANDLE_ERROR
if object is not a valid handle, or is not shared with the current context
VG_ILLEGAL_ARGUMENT_ERROR
if paramType is not a valid value from the appropriate enumeration
if paramType refers to a vector parameter in vgGetParameterf or
vgGetParameteri
*/
EXPORT_C VGfloat
vgGetParameterf(VGHandle object,
VGint paramType)
{
OPENVG_TRACE("vgGetParameterf object=0x%x, paramType=0x%x -->", object, paramType);
VGfloat value = TGuestOpenVg::vgGetParameterf(object, paramType);
OPENVG_TRACE("vgGetParameterf value=%f <--", value);
return value;
}
/*
The vgGetParameterVectorSize function returns the number of elements in the vector
that will be returned by the vgGetParameteriv or vgGetParameterfv functions if called
with the given paramType argument. For scalar values, 1 is returned.
ERRORS
VG_BAD_HANDLE_ERROR
if object is not a valid handle, or is not shared with the current context
VG_ILLEGAL_ARGUMENT_ERROR
if paramType is not a valid value from the appropriate enumeration
*/
EXPORT_C VGint
vgGetParameterVectorSize(VGHandle object,
VGint paramType)
{
OPENVG_TRACE("vgGetParameterVectorSize object=0x%x, paramType=0x%x -->", object, paramType);
VGint size = TGuestOpenVg::vgGetParameterVectorSize(object, paramType);
OPENVG_TRACE("vgGetParameterVectorSize size=%i <--", size);
return size;
}
/*
Creates an object capable of storing a mask layer with the given width and
height and returns a VGMaskLayer handle to it. The mask layer is defined to
be compatible with the format and multisampling properties of the current
drawing surface. If there is no current drawing surface, no mask is
configured for the current drawing surface, or an error occurs,
VG_INVALID_HANDLE is returned. All mask layer values are initially set to one.
ERRORS
VG_ILLEGAL_ARGUMENT_ERROR
if width or height are less than or equal to 0
if width is greater than VG_MAX_IMAGE_WIDTH
if height is greater than VG_MAX_IMAGE_HEIGHT
if width*height is greater than VG_MAX_IMAGE_PIXELS
*/
EXPORT_C VGMaskLayer
vgCreateMaskLayer(VGint width, VGint height)
{
OPENVG_TRACE("vgCreateMaskLayer width=%d, height=%d -->", width, height);
VGMaskLayer maskHandle = TGuestOpenVg::vgCreateMaskLayer(width, height);
OPENVG_TRACE("vgCreateMaskLayer handle=0x%x <--", maskHandle);
return maskHandle;
}
/*
The current setting of the VG_PAINT_COLOR parameter on a given paint object may
be queried as a 32-bit non-premultiplied sRGBA_8888 value. Each color channel or
alpha value is clamped to the range [0, 1] , multiplied by 255, and rounded to obtain an
8-bit integer; the resulting values are packed into a 32-bit value in the same format as for
vgSetColor.
ERRORS
VG_BAD_HANDLE_ERROR
if paint is not a valid paint handle, or is not shared with the current context
*/
EXPORT_C VGuint
vgGetColor(VGPaint paint)
{
OPENVG_TRACE("vgGetColor paint=0x%x", paint);
return TGuestOpenVg::vgGetColor(paint);
}
/*
Creates an image with the given width, height, and pixel format and returns a
VGImage handle to it. If an error occurs, VG_INVALID_HANDLE is returned. All
color and alpha channel values are initially set to zero. The format parameter
must contain a value from the VGImageFormat enumeration.
The allowedQuality parameter is a bitwise OR of values from the
VGImageQuality enumeration, indicating which levels of resampling quality may be
used to draw the image. It is always possible to draw an image using the
VG_IMAGE_QUALITY_NONANTIALIASED quality setting even if it is not explicitly
specified.
ERRORS
VG_UNSUPPORTED_IMAGE_FORMAT_ERROR
if format is not a valid value from the VGImageFormat enumeration
VG_ILLEGAL_ARGUMENT_ERROR
if width or height are less than or equal to 0
if width is greater than VG_MAX_IMAGE_WIDTH
if height is greater than VG_MAX_IMAGE_HEIGHT
if width*height is greater than VG_MAX_IMAGE_PIXELS
if width*height*(pixel size of format) is greater than
VG_MAX_IMAGE_BYTES
if allowedQuality is not a bitwise OR of values from the
VGImageQuality enumeration
*/
EXPORT_C VGImage
vgCreateImage(VGImageFormat format,
VGint width, VGint height,
VGbitfield allowedQuality)
{
OPENVG_TRACE("vgCreateImage format=0x%x, width=%d, height=%d, allowedQuality=0x%x -->",
format, width, height, allowedQuality);
VGImage imageHandle = TGuestOpenVg::vgCreateImage(format, width, height, allowedQuality);
OPENVG_TRACE("vgCreateImage handle=0x%x <--", imageHandle);
return imageHandle;
}
/*
Returns a new VGImage handle that refers to a portion of the parent image. The
region is given by the intersection of the bounds of the parent image with the
rectangle beginning at pixel (x, y) with dimensions width and height, which
must define a positive region contained entirely within parent.
ERRORS
VG_BAD_HANDLE_ERROR
if parent is not a valid image handle, or is not shared with the current
context
VG_IMAGE_IN_USE_ERROR
if parent is currently a rendering target
VG_ILLEGAL_ARGUMENT_ERROR
if x is less than 0 or greater than or equal to the parent width
if y is less than 0 or greater than or equal to the parent height
if width or height is less than or equal to 0
if x + width is greater than the parent width
if y + height is greater than the parent height
*/
EXPORT_C VGImage
vgChildImage(VGImage parent,
VGint x, VGint y,
VGint width, VGint height)
{
OPENVG_TRACE("vgChildImage parent=oc%x, x=%d, y=%d, width=%d, height=%d -->",
parent, x, y, width, height);
VGImage imageHandle = TGuestOpenVg::vgChildImage(parent, x, y, width, height);
OPENVG_TRACE("vgChildImage handle=0x%x <--", imageHandle);
return imageHandle;
}
/*
Returns the closest valid ancestor (i.e., one that has not been the target of
a vgDestroyImage call) of the given image. If image has no ancestors, image is
returned.
ERRORS
VG_BAD_HANDLE_ERROR
if image is not a valid image handle, or is not shared with the current
context
VG_IMAGE_IN_USE_ERROR
if image is currently a rendering target
*/
EXPORT_C VGImage vgGetParent(VGImage image)
{
OPENVG_TRACE("vgGetParent image=0x%x", image);
return TGuestOpenVg::vgGetParent(image);
}
/*
Creates a new font object and returns a VGFont handle to it. The glyphCapacityHint
argument provides a hint as to the capacity of a VGFont, i.e., the total number of
glyphs that this VGFont object will be required to accept. A value of 0 indicates that
the value is unknown. If an error occurs during execution, VG_INVALID_HANDLE is returned.
ERRORS
VG_ILLEGAL_ARGUMENT_ERROR
if glyphCapacityHint is negative
*/
EXPORT_C VGFont vgCreateFont(VGint glyphCapacityHint)
{
OPENVG_TRACE("vgCreateFont glyphCapacityHint=%d -->", glyphCapacityHint);
VGFont fontHandle = TGuestOpenVg::vgCreateFont(glyphCapacityHint);
OPENVG_TRACE("vgCreateFont handle=0x%x <--", fontHandle);
return fontHandle;
}
/* Hardware Queries */
/*
Returns a value indicating whether a given setting of a property of a type given
by key is generally accelerated in hardware on the currently running OpenVG
implementation.
ERRORS
VG_ILLEGAL_ARGUMENT_ERROR
if key is not one of the values from the VGHardwareQueryType enumeration
if setting is not one of the values from the enumeration associated with
key
*/
EXPORT_C VGHardwareQueryResult
vgHardwareQuery
(VGHardwareQueryType key,
VGint setting)
{
OPENVG_TRACE("vgHardwareQuery key=0x%x, setting=%d", key, setting);
return TGuestOpenVg::vgHardwareQuery(key, setting);
}
/*
The vgGetString function returns information about the OpenVG implementation,
including extension information. The values returned may vary according to
the display (e.g., the EGLDisplay when using EGL) associated with the current
context.
Returns NULL if no context is current.
*/
EXPORT_C const VGubyte *
vgGetString(VGStringID name)
{
OPENVG_TRACE("vgGetString name=0x%x", name);
switch (name)
{
case VG_VENDOR:
return (const VGubyte *)"Nokia";
case VG_RENDERER:
return (const VGubyte *)"Guest 1.0";
case VG_VERSION:
return (const VGubyte *)"1.1";
case VG_EXTENSIONS: // supported VG extensions, (associated function addresses are fetched with eglGetProcAddress)
return (const VGubyte *)"VG_KHR_EGL_image";
}
return (const VGubyte *)NULL;
}
/*
The vgGetParameter functions return the value of a parameter on a given VGHandlebased
object.
If vgGetParameteriv or vgGetParameterfv is called with a smaller value for
count than that returned by vgGetParameterVectorSize, only the first count
elements of the vector are retrieved. Use of a greater value for count will result
in an error.
The original value passed to vgSetParameter (provided the call to
vgSetParameter completed without error) should be returned by
vgGetParameter (except where specifically noted), even if the implementation
makes use of a truncated or quantized value internally.
ERRORS
VG_BAD_HANDLE_ERROR
if object is not a valid handle, or is not shared with the current context
VG_ILLEGAL_ARGUMENT_ERROR
if paramType is not a valid value from the appropriate enumeration
if values is NULL in vgGetParameterfv or vgGetParameteriv
if values is not properly aligned in vgGetParameterfv or vgGetParameteriv
if count is less than or equal to 0 in vgGetParameterfv or vgGetParameteriv
if count is greater than the value returned by vgGetParameterVectorSize for
the given parameter in vgGetParameterfv or vgGetParameteriv
*/
EXPORT_C void
vgGetParameterfv(VGHandle object,
VGint paramType,
VGint count,
VGfloat * values)
{
OPENVG_TRACE("vgGetParameterfv object=0x%x, paramType=0x%x, count=%d, values=0x%x",
object, paramType, count, values);
TGuestOpenVg::vgGetParameterfv(object, paramType, count, values);
}
EXPORT_C void
vgGetParameteriv(VGHandle object,
VGint paramType,
VGint count,
VGint * values)
{
OPENVG_TRACE("vgGetParameteriv object=0x%x, paramType=0x%x, count=%d, values=0x%x",
object, paramType, count, values);
TGuestOpenVg::vgGetParameteriv(object, paramType, count, values);
}
/* Renderer and Extension Information */
/*
The vgGetVectorSize function returns the maximum number of elements in the vector
that will be retrieved by the vgGetiv or vgGetfv functions if called with the given
paramType argument. For scalar values, 1 is returned. If vgGetiv or vgGetfv is
called with a smaller value for count than that returned by vgGetVectorSize,
only the first count elements of the vector are retrieved. Use of a greater value
for count will result in an error.
The original value passed to vgSet (except as specifically noted, and provided the call to
vgSet completed without error) is returned by vgGet, even if the implementation makes
use of a truncated or quantized value internally. This rule ensures that OpenVG state may
be saved and restored without degradation.
If an error occurs during a call to vgGetfv or vgGetiv, nothing is
written to values.
ERRORS
VG_ILLEGAL_ARGUMENT_ERROR
if paramType is not a valid value from the VGParamType enumeration
if values is NULL in vgGetfv or vgGetiv
if values is not properly aligned in vgGetfv or vgGetiv
if count is less than or equal to 0 in vgGetfv or vgGetiv
if count is greater than the value returned by vgGetVectorSize for the
given parameter in vgGetfv or vgGetiv
*/
EXPORT_C void
vgGetfv(VGParamType type, VGint count,
VGfloat * values)
{
OPENVG_TRACE("vgGetfv type=0x%x, count=%d, values=0x%x", type, count, values);
TGuestOpenVg::vgGetfv(type, count, values);
}
EXPORT_C void
vgGetiv(VGParamType type, VGint count,
VGint * values)
{
OPENVG_TRACE("vgGetiv type=0x%x, count=%d, values=0x%x", type, count, values);
TGuestOpenVg::vgGetiv(type, count, values);
}
/*
Retrieve the value of the current transformation.
Nine values are written to m in the order:
{ sx, shy, w0, shx, sy, w1, tx, ty, w2 }
For an affine matrix, w0 and w1 will always be 0 and w2 will always be 1.
ERRORS
VG_ILLEGAL_ARGUMENT_ERROR
if m is NULL
if m is not properly aligned
*/
EXPORT_C void
vgGetMatrix(VGfloat * m)
{
OPENVG_TRACE("vgGetMatrix m=0x%x", m);
TGuestOpenVg::vgGetMatrix(m);
}
/*
Read pixel values from a rectangular portion of an image, performs format conversion
if necessary, and stores the resulting pixels into memory.
Pixel values are written starting at the address given by the pointer data; adjacent
scanlines are separated by dataStride bytes. Negative or zero values of
dataStride are allowed. The region to be read is given by x, y, width, and
height, which must define a positive region. Pixels that fall outside the bounds
of the image are ignored.
Pixel values in memory are formatted according to the dataFormat parameter, which
must contain a value from the VGImageFormat enumeration. If dataFormat
specifies a premultiplied format (VG_sRGBA_8888_PRE or VG_lRGBA_8888_PRE),
color channel values of a pixel that are greater than their corresponding alpha value are
clamped to the range [0, alpha]. The data pointer alignment and the pixel layout in
memory are as described in the vgImageSubData section.
ERRORS
VG_BAD_HANDLE_ERROR
if image is not a valid image handle, or is not shared with the current context
VG_IMAGE_IN_USE_ERROR
if image is currently a rendering target
VG_UNSUPPORTED_IMAGE_FORMAT_ERROR
if dataFormat is not a valid value from the VGImageFormat enumeration
VG_ILLEGAL_ARGUMENT_ERROR
if width or height is less than or equal to 0
if data is NULL
if data is not properly aligned
*/
EXPORT_C void
vgGetImageSubData(VGImage image,
void * data,
VGint dataStride,
VGImageFormat dataFormat,
VGint x, VGint y,
VGint width, VGint height)
{
OPENVG_TRACE("vgGetImageSubData image=0x%x, data=0x%x, dataStride=%d, dataFormat=0x%x, x=%d, y=%d, width=%d, height=%d",
image, data, dataStride, dataFormat, x, y, width, height);
TGuestOpenVg::vgGetImageSubData(image, data, dataStride, dataFormat, x, y, width, height);
}
/*
Copy pixel data from the drawing surface without the creation of a VGImage object.
Pixel values are written starting at the address given by the pointer data; adjacent
scanlines are separated by dataStride bytes. Negative or zero values of
dataStride are allowed. The region to be read is given by x, y, width, and
height, which must define a positive region.
Pixel values in memory are formatted according to the dataFormat parameter, which
must contain a value from the VGImageFormat enumeration. The data pointer
alignment and the pixel layout in memory is as described for vgImageSubData.
Pixels whose source lies outside of the bounds of the drawing surface are
ignored. Pixel format conversion is applied as needed. The scissoring region
does not affect the reading of pixels.
ERRORS
VG_UNSUPPORTED_IMAGE_FORMAT_ERROR
if dataFormat is not a valid value from the VGImageFormat enumeration
VG_ILLEGAL_ARGUMENT_ERROR
if width or height is less than or equal to 0
if data is NULL
if data is not properly aligned
*/
EXPORT_C void
vgReadPixels(void * data, VGint dataStride,
VGImageFormat dataFormat,
VGint sx, VGint sy,
VGint width, VGint height)
{
OPENVG_TRACE("vgReadPixels data=0x%x, dataStride=%d, dataFormat=0x%x, sx=%d, sy=%d, width=%d, height=%d",
data, dataStride, dataFormat, sx, sy, width, height);
TGuestOpenVg::vgReadPixels(data, dataStride, dataFormat, sx, sy, width, height);
}
/*
Returns an axis-aligned bounding box that tightly bounds the interior of the given
path. Stroking parameters are ignored. If path is empty, minX and minY are set to 0
and width and height are set to -1. If path contains a single point, minX and minY
are set to the coordinates of the point and width and height are set to 0.
The VG_PATH_CAPABILITY_PATH_BOUNDS capability must be enabled for path.
ERRORS
VG_BAD_HANDLE_ERROR
if path is not a valid path handle, or is not shared with the current context
VG_ILLEGAL_ARGUMENT_ERROR
if minX, minY, width, or height is NULL
if minX, minY, width, or height is not properly aligned
VG_PATH_CAPABILITY_ERROR
if VG_PATH_CAPABILITY_PATH_BOUNDS is not enabled for path
*/
EXPORT_C void
vgPathBounds(VGPath path,
VGfloat * minX,
VGfloat * minY,
VGfloat * width,
VGfloat * height)
{
OPENVG_TRACE("vgPathBounds path=0x%x, minX=0x%x, minY=0x%x, width=0x%x, height=0x%x",
path, minX, minY, width, height);
TGuestOpenVg::vgPathBounds(path, minX, minY, width, height);
}
/*
The vgPathTransformedBounds function returns an axis-aligned bounding box
that is guaranteed to enclose the geometry of the given path following
transformation by the current path-user-to-surface transform. The returned
bounding box is not guaranteed to fit tightly around the path geometry. If path
is empty, minX and minY are set to 0 and width and height are set to -1. If
path contains a single point, minX and minY are set to the transformed
coordinates of the point and width and height are set to 0.
The VG_PATH_CAPABILITY_PATH_TRANSFORMED_BOUNDS capability must be
enabled for path.
ERRORS
VG_BAD_HANDLE_ERROR
if path is not a valid path handle, or is not shared with the current context
VG_ILLEGAL_ARGUMENT_ERROR
if minX, minY, width, or height is NULL
if minX, minY, width, or height is not properly aligned
VG_PATH_CAPABILITY_ERROR
if VG_PATH_CAPABILITY_PATH_TRANSFORMED_BOUNDS is not enabled
for path
*/
EXPORT_C void
vgPathTransformedBounds(VGPath path,
VGfloat * minX,
VGfloat * minY,
VGfloat * width,
VGfloat * height)
{
OPENVG_TRACE("vgPathTransformedBounds path=0x%x, minX=0x%x, minY=0x%x, width=0x%x, height=0x%x",
path, minX, minY, width, height);
TGuestOpenVg::vgPathTransformedBounds(path, minX, minY, width, height);
}
////////////////////////////////////////////////////////////////////////////////////////////
//Syncing methods
////////////////////////////////////////////////////////////////////////////////////////////
/*
Ensures that all outstanding requests on the current context will complete in finite time.
vgFlush may return prior to the actual completion of all requests.
*/
EXPORT_C void
vgFlush(void)
{
// ToDo comment
OPENVG_TRACE("vgFlush");
MVgContext* vgContext = CVghwUtils::VgContext();
if (vgContext)
{
vgContext->ExecuteVgFlushCommand();
}
}
/*
The vgFinish function forces all outstanding requests on the current context to
complete, returning only when the last request has completed.
*/
EXPORT_C void
vgFinish(void)
{
// ToDo comment
OPENVG_TRACE("vgFinish");
MVgContext* vgContext = CVghwUtils::VgContext();
if (vgContext)
{
vgContext->ExecuteVgFinishCommand();
}
}
////////////////////////////////////////////////////////////////////////////////////////////
//Functions not returning value (possible to buffer)
////////////////////////////////////////////////////////////////////////////////////////////
/* Getters and Setters */
/*
The vgSet functions set the value of a parameter on the current context.
ERRORS
VG_ILLEGAL_ARGUMENT_ERROR
if paramType is not a valid value from the VGParamType enumeration
if paramType refers to a vector parameter in vgSetf or vgSeti
if value is not a legal enumerated value for the given parameter in vgSetf or
vgSeti
*/
EXPORT_C void
vgSetf (VGParamType type, VGfloat value)
{
OPENVG_TRACE("vgSetf type=0x%x, value=%f", type, value);
TGuestOpenVg::vgSetf(type, value);
}
EXPORT_C void
vgSeti (VGParamType type, VGint value)
{
OPENVG_TRACE("vgSeti type=0x%x, value=%d", type, value);
TGuestOpenVg::vgSeti(type, value);
}
/*
The vgSet functions set the value of a parameter on the current context.
ERRORS
VG_ILLEGAL_ARGUMENT_ERROR
if paramType is not a valid value from the VGParamType enumeration
if paramType refers to a scalar parameter in vgSetfv or vgSetiv and count is
not equal to 1
if values[i] is not a legal enumerated value for the given parameter in vgSetfv
or vgSetiv for 0 <= i < count
if values is NULL in vgSetfv or vgSetiv and count is greater than 0
if values is not properly aligned in vgSetfv or vgSetiv
if count is less than 0 in vgSetfv or vgSetiv
if count is not a valid value for the given parameter
*/
EXPORT_C void
vgSetfv(VGParamType type, VGint count,
const VGfloat * values)
{
OPENVG_TRACE("vgSetfv type=0x%x, count=%d, values=0x%x", type, count, values);
TGuestOpenVg::vgSetfv(type, count, values);
}
EXPORT_C void
vgSetiv(VGParamType type, VGint count,
const VGint * values)
{
OPENVG_TRACE("vgSetiv type=0x%x, count=%d, values=0x%x", type, count, values);
TGuestOpenVg::vgSetiv(type, count, values);
}
/*
For vgSetParameterf and vgSetParameteri.
The vgSetParameter functions set the value of a parameter on a given VGHandlebased
object.
ERRORS
VG_BAD_HANDLE_ERROR
if object is not a valid handle, or is not shared with the current context
VG_ILLEGAL_ARGUMENT_ERROR
if paramType is not a valid value from the appropriate enumeration
if paramType refers to a vector parameter in vgSetParameterf or
vgSetParameteri
if value is not a legal enumerated value for the given parameter in
vgSetParameterf or vgSetParameteri
*/
EXPORT_C void
vgSetParameterf(VGHandle object,
VGint paramType,
VGfloat value)
{
OPENVG_TRACE("vgSetParameterf object=0x%x, paramType=0x%x, value=%f -->", object, paramType, value);
TGuestOpenVg::vgSetParameterf(object, paramType, value);
}
EXPORT_C void
vgSetParameteri(VGHandle object,
VGint paramType,
VGint value)
{
OPENVG_TRACE("vgSetParameteri object=0x%x, paramType=0x%x, value=0x%x", object, paramType, value);
TGuestOpenVg::vgSetParameteri(object, paramType, value);
}
/*
For vgSetParameterfv and vgSetParameteriv.
The vgSetParameter functions set the value of a parameter on a given VGHandlebased
object.
ERRORS
VG_BAD_HANDLE_ERROR
if object is not a valid handle, or is not shared with the current context
VG_ILLEGAL_ARGUMENT_ERROR
if paramType is not a valid value from the appropriate enumeration
if paramType refers to a scalar parameter in vgSetParameterfv or
vgSetParameteriv and count is not equal to 1
if values[i] is not a legal enumerated value for the given parameter
in vgSetParameterfv or vgSetParameteriv for 0 <= i < count
if values is NULL in vgSetParameterfv or vgSetParameteriv and count is
greater than 0
if values is not properly aligned in vgSetParameterfv or vgSetParameteriv
if count is less than 0 in vgSetParameterfv or vgSetParameteriv
if count is not a valid value for the given parameter
*/
EXPORT_C void
vgSetParameterfv(VGHandle object,
VGint paramType,
VGint count,
const VGfloat * values)
{
OPENVG_TRACE("vgSetParameterfv object=0x%x, paramType=%d, count=%d, values=0x%x", object, paramType, count, values);
TGuestOpenVg::vgSetParameterfv(object, paramType, count, values);
}
EXPORT_C void
vgSetParameteriv(VGHandle object,
VGint paramType,
VGint count,
const VGint * values)
{
OPENVG_TRACE("vgSetParameteriv object=0x%x, paramType=%d, count=%d, values=0x%x", object, paramType, count, values);
TGuestOpenVg::vgSetParameteriv(object, paramType, count, values);
}
/* Matrix Manipulation */
/*
Sets the current matrix M to the identity matrix:
*/
EXPORT_C void
vgLoadIdentity(void)
{
OPENVG_TRACE("vgLoadIdentity");
TGuestOpenVg::vgLoadIdentity();
}
/*
Loads an arbitrary set of matrix values into the current
matrix. Nine matrix values are read from m, in the order:
{ sx, shy, w0, shx, sy, w1, tx, ty, w2 }
However, if the targeted matrix is affine (i.e., the matrix mode is not
VG_MATRIX_IMAGE_USER_TO_SURFACE), the values { w0, w1, w2 } are ignored and
replaced by the values { 0, 0, 1 }.
ERRORS
VG_ILLEGAL_ARGUMENT_ERROR
if m is NULL
if m is not properly aligned
*/
EXPORT_C void
vgLoadMatrix(const VGfloat * m)
{
OPENVG_TRACE("vgLoadMatrix m=0x%x", m);
TGuestOpenVg::vgLoadMatrix(m);
}
/*
Right-multiplies the current matrix M by a given matrix:
Nine matrix values are read from m in the order:
{ sx, shy, w0, shx, sy, w1, tx, ty, w2 }
and the current matrix is multiplied by the resulting matrix. However, if the
targeted matrix is affine (i.e., the matrix mode is not
VG_MATRIX_IMAGE_USER_TO_SURFACE), the values { w0, w1, w2 } are ignored
and replaced by the values { 0, 0, 1 } prior to multiplication.
ERRORS
VG_ILLEGAL_ARGUMENT_ERROR
if m is NULL
if m is not properly aligned
*/
EXPORT_C void
vgMultMatrix(const VGfloat * m)
{
OPENVG_TRACE("vgMultMatrix m=0x%x", m);
TGuestOpenVg::vgMultMatrix(m);
}
/*
Modifies the current transformation by appending a translation. This is equivalent
to right-multiplying the current matrix M by a translation matrix:
[ 1 0 tx ]
[ 0 1 ty ]
[ 0 0 1 ]
*/
EXPORT_C void
vgTranslate(VGfloat tx, VGfloat ty)
{
OPENVG_TRACE("vgTranslate tx=%f, ty=%f", tx, ty);
TGuestOpenVg::vgTranslate(tx, ty);
}
/*
Modifies the current transformation by appending a scale. This is equivalent to
right-multiplying the current matrix M by a scale matrix:
[ sx 0 0 ]
[ 0 sy 0 ]
[ 0 0 1 ]
*/
EXPORT_C void
vgScale(VGfloat sx, VGfloat sy)
{
OPENVG_TRACE("vgScale sx=%f, sy=%f", sx, sy);
TGuestOpenVg::vgScale(sx, sy);
}
/*
Modifies the current transformation by appending a shear. This is equivalent to
right-multiplying the current matrix M by a shear matrix:
[ 1 shx 0 ]
[ shy 1 0 ]
[ 0 0 1 ]
*/
EXPORT_C void
vgShear(VGfloat shx, VGfloat shy)
{
OPENVG_TRACE("vgShear shx=%f, shy=%f", shx, shy);
TGuestOpenVg::vgShear(shx, shy);
}
/*
Modifies the current transformation by appending a counterclockwise rotation by a given
angle (expressed in degrees) about the origin. This is equivalent to right-multiplying
the current matrix M by the following matrix (using the symbol a to represent the value
of the angle parameter):
[ cos(a) -sin(a) 0 ]
[ sin(a) cos(a) 0 ]
[ 0 0 1 ]
*/
EXPORT_C void
vgRotate(VGfloat angle)
{
OPENVG_TRACE("vgRotate angle=%f");
TGuestOpenVg::vgRotate(angle);
}
/*
Modifies the drawing surface mask values according to a given operation, possibly
using coverage values taken from a mask layer or bitmap image given by the mask
parameter. If no mask is configured for the current drawing surface, vgMask has
no effect.
ERRORS
VG_BAD_HANDLE_ERROR
if operation is not VG_CLEAR_MASK or VG_FILL_MASK, and mask is not a
valid mask layer or image handle, or is not shared with the current context
VG_IMAGE_IN_USE_ERROR
if mask is a VGImage that is currently a rendering target
VG_ILLEGAL_ARGUMENT_ERROR
if operation is not a valid value from the VGMaskOperation
enumeration
if width or height is less than or equal to 0
if mask is a VGMaskLayer and is not compatible with the current surface
mask
*/
EXPORT_C void
vgMask(VGHandle mask, VGMaskOperation operation,
VGint x, VGint y,
VGint width, VGint height)
{
OPENVG_TRACE("vgMask mask=0x%x, operation=0x%x, x=%d, y=%d, width=%d, height=%d",
mask, operation, x, y, width, height);
TGuestOpenVg::vgMask(mask, operation, x, y, width, height);
}
/*
Modifies the current surface mask by applying the given operation to the set of
coverage values associated with the rendering of the given path. If paintModes
contains VG_FILL_PATH, the path is filled; if it contains VG_STROKE_PATH, the path
is stroked. If both are present, the mask operation is performed in two passes,
first on the filled path geometry, then on the stroked path geometry.
ERRORS
VG_BAD_HANDLE_ERROR
if path is not a valid path handle
VG_ILLEGAL_ARGUMENT_ERROR
if paintModes is not a valid bitwise OR of values from the VGPaintMode
enumeration
if operation is not a valid value from the VGMaskOperation enumeration
*/
EXPORT_C void
vgRenderToMask(VGPath path,
VGbitfield paintModes,
VGMaskOperation operation)
{
OPENVG_TRACE("vgRenderToMask path=0x%x, paintModes=0x%x, operation=0x%x", path, paintModes, operation);
TGuestOpenVg::vgRenderToMask(path, paintModes, operation);
}
/*
Deallocate the resources associated with a mask layer. Following the call,
the maskLayer handle is no longer valid in the current context.
ERRORS
VG_BAD_HANDLE_ERROR
if maskLayer is not a valid mask handle
*/
EXPORT_C void vgDestroyMaskLayer(VGMaskLayer maskLayer)
{
OPENVG_TRACE("vgDestroyMaskLayer maskLayer=0x%x", maskLayer);
TGuestOpenVg::vgDestroyMaskLayer(maskLayer);
}
/*
Set the values of a given maskLayer within a given rectangular region to a given
value. The floating-point value value must be between 0 and 1. The value is rounded
to the closest available value supported by the mask layer. If two values are equally
close, the larger value is used.
ERRORS
VG_BAD_HANDLE_ERROR
if maskLayer is not a valid mask layer handle, or is not shared with the
current context
VG_ILLEGAL_ARGUMENT_ERROR
if value is less than 0 or greater than 1
if width or height is less than or equal to 0
if x or y is less than 0
if x + width is greater than the width of the mask
if y + height is greater than the height of the mask
*/
EXPORT_C void
vgFillMaskLayer(VGMaskLayer maskLayer,
VGint x, VGint y,
VGint width, VGint height,
VGfloat value)
{
OPENVG_TRACE("vgFillMaskLayer maskLayer=0x%x, x=%d, y=%d, width=%d, height=%d, value=%f",
maskLayer, x, y, width, height, value);
TGuestOpenVg::vgFillMaskLayer(maskLayer, x, y, width, height, value);
}
/*
Copies a portion of the current surface mask into a VGMaskLayer object. The source
region starts at (sx, sy) in the surface mask, and the destination region starts
at (dx, dy) in the destination maskLayer. The copied region is clipped to the given
width and height and the bounds of the source and destination. If the current context
does not contain a surface mask, vgCopyMask does nothing.
ERRORS
VG_BAD_HANDLE_ERROR
if maskLayer is not a valid mask layer handle
VG_ILLEGAL_ARGUMENT_ERROR
if width or height are less than or equal to 0
if maskLayer is not compatible with the current surface mask
*/
EXPORT_C void
vgCopyMask(VGMaskLayer maskLayer,
VGint sx, VGint sy,
VGint dx, VGint dy,
VGint width, VGint height)
{
OPENVG_TRACE("vgCopyMask maskLayer=0x%x, sx=%d, sy=%d, dx=%d, dy=%d, width=%d, height=%d",
maskLayer, sx, sy, dx, dy, width, height);
TGuestOpenVg::vgCopyMask(maskLayer, sx, sy, dx, dy, width, height);
}
/*
Fills the portion of the drawing surface intersecting the rectangle extending from
pixel (x, y) and having the given width and height with a constant color value, taken
from the VG_CLEAR_COLOR parameter. The color value is expressed in non-premultiplied
sRGBA (sRGB color plus alpha)format. Values outside the [0, 1] range are interpreted
as the nearest endpoint of the range. The color is converted to the destination color
space in the same manner as if a rectangular path were being filled. Clipping and
scissoring take place in the usual fashion, but antialiasing, masking, and blending
do not occur.
ERRORS
VG_ILLEGAL_ARGUMENT_ERROR
if width or height is less than or equal to 0
*/
EXPORT_C void
vgClear(VGint x, VGint y,
VGint width, VGint height)
{
OPENVG_TRACE("vgClear x=%d, y=%d, width=%d, height=%d", x, y, width, height);
TGuestOpenVg::vgClear(x, y, width, height);
}
/* Paths */
/*
Remove all segment command and coordinate data associated with a path. The handle
continues to be valid for use in the future, and the path format and datatype retain
their existing values. The capabilities argument is a bitwise OR of the desired
VGPathCapabilities values. Bits of capabilities that do not correspond to values from
VGPathCapabilities have no effect. Using vgClearPath may be more efficient than
destroying and re-creating a path for short-lived paths.
ERRORS
VG_BAD_HANDLE_ERROR
if path is not a valid path handle, or is not shared with the current context
*/
EXPORT_C void
vgClearPath(VGPath path, VGbitfield capabilities)
{
OPENVG_TRACE("vgClearPath path=0x%x, capabilities=0x%x", path, capabilities);
TGuestOpenVg::vgClearPath(path, capabilities);
}
/*
Release any resources associated with path, and makes the handle invalid in all
contexts that shared it.
ERRORS
VG_BAD_HANDLE_ERROR
if path is not a valid path handle, or is not shared with the current context
*/
EXPORT_C void vgDestroyPath(VGPath path)
{
OPENVG_TRACE("vgDestroyPath path=0x%x", path);
TGuestOpenVg::vgDestroyPath(path);
}
/*
Requests the set of capabilities specified in the capabilities argument to
be disabled for the given path. The capabilities argument is a bitwise OR of
the VGPathCapabilities values whose removal is requested. Attempting to
remove a capability that is already disabled has no effect. Bits of
capabilities that do not correspond to values from VGPathCapabilities have
no effect.
ERRORS
VG_BAD_HANDLE_ERROR
if path is not a valid path handle, or is not shared with the current context
*/
EXPORT_C void
vgRemovePathCapabilities(VGPath path,
VGbitfield capabilities)
{
OPENVG_TRACE("vgRemovePathCapabilities path=0x%x, capabilities=0x%x", path, capabilities);
TGuestOpenVg::vgRemovePathCapabilities(path, capabilities);
}
/*
Appends a copy of all path segments from srcPath onto the end of the existing
data in dstPath. It is legal for srcPath and dstPath to be handles to the same
path object, in which case the contents of the path are duplicated. If srcPath
and dstPath are handles to distinct path objects, the contents of srcPath will
not be affected by the call.
ERRORS
VG_BAD_HANDLE_ERROR
if either dstPath or srcPath is not a valid path handle, or is not shared
with the current context
VG_PATH_CAPABILITY_ERROR
if VG_PATH_CAPABILITY_APPEND_FROM is not enabled for srcPath
if VG_PATH_CAPABILITY_APPEND_TO is not enabled for dstPath
*/
EXPORT_C void
vgAppendPath(VGPath dstPath, VGPath srcPath)
{
OPENVG_TRACE("vgAppendPath dstPath=0x%x, srcPath=0x%x", dstPath, srcPath);
TGuestOpenVg::vgAppendPath(dstPath, srcPath);
}
/*
Appends data taken from pathData to the given path dstPath. The data are formatted
using the path format of dstPath (as returned by querying the paths VG_PATH_FORMAT
parameter using vgGetParameteri). The numSegments parameter gives the total number
of entries in the pathSegments array, and must be greater than 0. Legal values for
the pathSegments array are the values from the VGPathCommand enumeration as well as
VG_CLOSE_PATH and (VG_CLOSE_PATH | VG_RELATIVE) (which are synonymous).
The pathData pointer must be aligned on a 1-, 2-, or 4-byte boundary (as defined in
the Bytes column of Open VG spec Table 7) depending on the size of the coordinate
datatype (as returned by querying the paths VG_PATH_DATATYPE parameter using
vgGetParameteri). The VG_PATH_CAPABILITY_APPEND_TO capability must be enabled for
path.
ERRORS
VG_BAD_HANDLE_ERROR
if dstPath is not a valid path handle, or is not shared with the current
context
VG_PATH_CAPABILITY_ERROR
if VG_PATH_CAPABILITY_APPEND_TO is not enabled for dstPath
VG_ILLEGAL_ARGUMENT_ERROR
if pathSegments or pathData is NULL
if pathData is not properly aligned
if numSegments is less than or equal to 0
if pathSegments contains an illegal command
*/
EXPORT_C void
vgAppendPathData(VGPath dstPath,
VGint numSegments,
const VGubyte * pathSegments,
const void * pathData)
{
OPENVG_TRACE("vgAppendPathData dstPath=0x%x, numSegments=%d, pathSegments=0x%x, pathData=0x%x",
dstPath, numSegments, pathSegments, pathData);
TGuestOpenVg::vgAppendPathData(dstPath, numSegments, pathSegments, pathData);
}
/*
Modifies the coordinate data for a contiguous range of segments of dstPath, starting
at startIndex (where 0 is the index of the first path segment) and having length
numSegments. The data in pathData must be formatted in exactly the same manner as the
original coordinate data for the given segment range, unless the path has been
transformed using vgTransformPath or interpolated using vgInterpolatePath. In these
cases, the path will have been subject to the segment promotion rules specified in
those functions.
The pathData pointer must be aligned on a 1-, 2-, or 4-byte boundary
depending on the size of the coordinate datatype (as returned by querying the
paths VG_PATH_DATATYPE parameter using vgGetParameteri). The
VG_PATH_CAPABILITY_MODIFY capability must be enabled for path.
ERRORS
VG_BAD_HANDLE_ERROR
if dstPath is not a valid path handle, or is not shared with the current
context
VG_PATH_CAPABILITY_ERROR
if VG_PATH_CAPABILITY_MODIFY is not enabled for dstPath
VG_ILLEGAL_ARGUMENT_ERROR
if pathData is NULL
if pathData is not properly aligned
if startIndex is less than 0
if numSegments is less than or equal to 0
if startIndex + numSegments is greater than the number of segments in the path
*/
EXPORT_C void
vgModifyPathCoords(VGPath dstPath,
VGint startIndex,
VGint numSegments,
const void * pathData)
{
OPENVG_TRACE("vgModifyPathCoords dstPath=0x%x, startIndex=%d, numSegments=%d, pathData=0x%x",
dstPath, startIndex, numSegments, pathData);
TGuestOpenVg::vgModifyPathCoords(dstPath, startIndex, numSegments, pathData);
}
/*
Appends a transformed copy of srcPath to the current contents of dstPath.
The appended path is equivalent to the results of applying the current
pathuser-to-surface transformation (VG_MATRIX_PATH_USER_TO_SURFACE) to srcPath.
It is legal for srcPath and dstPath to be handles to the same path object, in
which case the transformed path will be appended to the existing path. If
srcPath and dstPath are handles to distinct path objects, the contents of
srcPath will not be affected by the call.
ERRORS
VG_BAD_HANDLE_ERROR
if either dstPath or srcPath is not a valid path handle, or is not shared with
the current context
VG_PATH_CAPABILITY_ERROR
if VG_PATH_CAPABILITY_TRANSFORM_FROM is not enabled for srcPath
if VG_PATH_CAPABILITY_TRANSFORM_TO is not enabled for dstPath
*/
EXPORT_C void
vgTransformPath(VGPath dstPath, VGPath srcPath)
{
OPENVG_TRACE("vgTransformPath dstPath=0x%x, srcPath=0x%x", dstPath, srcPath);
TGuestOpenVg::vgTransformPath(dstPath, srcPath);
}
/*
Returns the point lying a given distance along a given portion of a path and
the unit-length tangent vector at that point. Only the subpath consisting of the
numSegments path segments beginning with startSegment (where the initial path
segment has index 0) is used. For the remainder of this section we refer only to
this subpath when discussing paths.
ERRORS
VG_BAD_HANDLE_ERROR
if path is not a valid path handle, or is not shared with the current context
VG_PATH_CAPABILITY_ERROR
If x and y are both non-NULL, and the VG_PATH_CAPABILITY_POINT_ALONG_PATH is
not enabled for path
If tangentX and tangentY are both non-NULL, and the
VG_PATH_CAPABILITY_TANGENT_ALONG_PATH capability is not enabled for path
VG_ILLEGAL_ARGUMENT_ERROR
if startSegment is less than 0 or greater than the index of the final path
segment
if numSegments is less than or equal to 0
if (startSegment + numSegments 1) is less than 0 or greater than the index
of the final path segment
if x, y, tangentX or tangentY is not properly aligned
*/
EXPORT_C void
vgPointAlongPath(VGPath path,
VGint startSegment,
VGint numSegments,
VGfloat distance,
VGfloat * x, VGfloat * y,
VGfloat * tangentX,
VGfloat * tangentY)
{
OPENVG_TRACE("vgPointAlongPath path=0x%x, startSeg=%d, numSegs=%d, distance=%f, x=0x%x, y=0x%x, tangentX=0x%x, tangentY=0x%x",
path, startSegment, numSegments, distance, x, y, tangentX, tangentY);
TGuestOpenVg::vgPointAlongPath(path, startSegment, numSegments, distance, x, y, tangentX, tangentY);
}
/*
Performs filling and stroking. The paintModes argument is a bitwise OR of
values from the VGPaintMode enumeration, determining whether the path is to be
filled (VG_FILL_PATH), stroked (VG_STROKE_PATH), or both (VG_FILL_PATH |
VG_STROKE_PATH). If both filling and stroking are to be performed, the path is
first filled, then stroked.
ERRORS
VG_BAD_HANDLE_ERROR
if path is not a valid path handle, or is not shared with the current context
VG_ILLEGAL_ARGUMENT_ERROR
if paintModes is not a valid bitwise OR of values from the VGPaintMode
enumeration
*/
EXPORT_C void
vgDrawPath(VGPath path, VGbitfield paintModes)
{
OPENVG_TRACE("vgDrawPath path=0x%x paintModes=0x%x", path, paintModes);
TGuestOpenVg::vgDrawPath(path, paintModes);
}
/* Paint */
/*
Deallocates the resources associated with a paint object. Following the call, the
paint handle is no longer valid in any of the contexts that shared it. If the paint
object is currently active in a drawing context, the context continues to access it
until it is replaced or the context is destroyed.
ERRORS
VG_BAD_HANDLE_ERROR
if paint is not a valid paint handle, or is not shared with the current context
*/
EXPORT_C void vgDestroyPaint(VGPaint paint)
{
OPENVG_TRACE("vgDestroyPaint paint=0x%x", paint);
TGuestOpenVg::vgDestroyPaint(paint);
}
/*
Set paint definitions on the current context. The paintModes argument is a
bitwise OR of values from the VGPaintMode enumeration, determining whether
the paint object is to be used for filling (VG_FILL_PATH), stroking
(VG_STROKE_PATH), or both (VG_FILL_PATH | VG_STROKE_PATH). The current paint
replaces the previously set paint object, if any, for the given paint mode
or modes. If paint is equal to VG_INVALID_HANDLE, the previously set paint
object for the given mode (if present) is removed and the paint settings are
restored to their default values.
ERRORS
VG_BAD_HANDLE_ERROR
if paint is neither a valid paint handle nor equal to VG_INVALID_HANDLE,
or is not shared with the current context
VG_ILLEGAL_ARGUMENT_ERROR
if paintModes is not a valid bitwise OR of values from the VGPaintMode
enumeration
*/
EXPORT_C void
vgSetPaint(VGPaint paint, VGbitfield paintModes)
{
OPENVG_TRACE("vgSetPaint paint=0x%x, paintModes=0x%x", paint, paintModes);
TGuestOpenVg::vgSetPaint(paint, paintModes);
}
/*
As a shorthand, the vgSetColor function allows the VG_PAINT_COLOR parameter of a
given paint object to be set using a 32-bit non-premultiplied sRGBA_8888
representation. The rgba parameter is a VGuint with 8 bits of red starting at the
most significant bit, followed by 8 bits each of green, blue, and alpha. Each color
or alpha channel value is conceptually divided by 255. So as to obtain a value
between 0 and 1.
ERRORS
VG_BAD_HANDLE_ERROR
if paint is not a valid paint handle, or is not shared with the current context
*/
EXPORT_C void
vgSetColor(VGPaint paint, VGuint rgba)
{
OPENVG_TRACE("vgSetColor paint=0x%x, rgba=0x%x", paint, rgba);
TGuestOpenVg::vgSetColor(paint, rgba);
}
/*
Replaces any previous pattern image defined on the given paint object for the given
set of paint modes with a new pattern image. A value of VG_INVALID_HANDLE for the
pattern parameter removes the current pattern image from the paint object.
If the current paint object has its VG_PAINT_TYPE parameter set to VG_PAINT_TYPE_PATTERN,
but no pattern image is set, the paint object behaves as if VG_PAINT_TYPE were set to
VG_PAINT_TYPE_COLOR. While an image is set as the paint pattern for any paint object, it
may not be used as a rendering target. Conversely, an image that is currently a rendering
target may not be set as a paint pattern.
ERRORS
VG_BAD_HANDLE_ERROR
if paint is not a valid paint handle, or is not shared with the current context
if pattern is neither a valid image handle nor equal to VG_INVALID_HANDLE, or is not
shared with the current context
VG_IMAGE_IN_USE_ERROR
if pattern is currently a rendering target
*/
EXPORT_C void
vgPaintPattern(VGPaint paint, VGImage pattern)
{
OPENVG_TRACE("vgPaintPattern paint=0x%x, pattern=0x%x", paint, pattern);
TGuestOpenVg::vgPaintPattern(paint, pattern);
}
/* Images */
/*
Deallocates the resources associated with an image. Following the call, the image
handle is no longer valid in any context that shared it. If the image is currently
in use as a rendering target, is the ancestor of another image (see vgChildImage),
is set as a paint pattern image on a VGPaint object, or is set as a glyph an a
VGFont object, its definition remains available to those consumers as long as they
remain valid, but the handle may no longer be used. When those uses cease, the
images resources will automatically be deallocated.
ERRORS
VG_BAD_HANDLE_ERROR
if image is not a valid image handle, or is not shared with the current
context
*/
EXPORT_C void vgDestroyImage(VGImage image)
{
OPENVG_TRACE("vgDestroyImage image=0x%x -->", image);
TGuestOpenVg::vgDestroyImage(image);
OPENVG_TRACE("vgDestroyImage <--");
}
/*
Fills a given rectangle of an image with the color specified by the VG_CLEAR_COLOR parameter.
The rectangle to be cleared is given by x, y, width, and height, which must define a positive
region. The rectangle is clipped to the bounds of the image.
ERRORS
VG_BAD_HANDLE_ERROR
if image is not a valid image handle, or is not shared with the current
context
VG_IMAGE_IN_USE_ERROR
if image is currently a rendering target
VG_ILLEGAL_ARGUMENT_ERROR
if width or height is less than or equal to 0
*/
EXPORT_C void
vgClearImage(VGImage image,
VGint x, VGint y,
VGint width, VGint height)
{
OPENVG_TRACE("vgClearImage image=0x%x, x=%d, y=%d, width=%d, height=%d",
image, x, y, width, height);
TGuestOpenVg::vgClearImage(image, x, y, width, height);
}
/*
Read pixel values from memory, perform format conversion if necessary, and store
the resulting pixels into a rectangular portion of an image.
Pixel values are read starting at the address given by the pointer data; adjacent
scanlines are separated by dataStride bytes. Negative or zero values of
dataStride are allowed. The region to be written is given by x, y, width, and
height, which must define a positive region. Pixels that fall outside the bounds
of the image are ignored.
Pixel values in memory are formatted according to the dataFormat parameter, which
must contain a value from the VGImageFormat enumeration. The data pointer must
be aligned according to the number of bytes of the pixel format specified by
dataFormat, unless dataFormat is equal to VG_BW_1, VG_A_1, or VG_A_4, in
which case 1 byte alignment is sufficient. Each pixel is converted into the format of
the destination image as it is written.
ERRORS
VG_BAD_HANDLE_ERROR
if image is not a valid image handle, or is not shared with the current
context
VG_IMAGE_IN_USE_ERROR
if image is currently a rendering target
VG_UNSUPPORTED_IMAGE_FORMAT_ERROR
if dataFormat is not a valid value from the VGImageFormat enumeration
VG_ILLEGAL_ARGUMENT_ERROR
if width or height is less than or equal to 0
if data is NULL
if data is not properly aligned
*/
EXPORT_C void
vgImageSubData(VGImage image,
const void * data,
VGint dataStride,
VGImageFormat dataFormat,
VGint x, VGint y,
VGint width, VGint height)
{
OPENVG_TRACE("vgImageSubData image=0x%x, data=0x%x, dataStride=%d, dataFormat=0x%x, x=%d, y=%d, width=%d, height=%d",
image, data, dataStride, dataFormat, x, y, width, height);
TGuestOpenVg::vgImageSubData(image, data, dataStride, dataFormat, x, y, width, height);
}
/*
Copies pixels between images. The source image pixel (sx + i, sy + j) is copied
to the destination image pixel (dx + i, dy + j), for 0 <= i < width and
0 <= j < height. Pixels whose source or destination lie outside of the bounds
of the respective image are ignored. Pixel format conversion is applied as needed.
ERRORS
VG_BAD_HANDLE_ERROR
if either dst or src is not a valid image handle, or is not shared with the
current context
VG_IMAGE_IN_USE_ERROR
if either dst or src is currently a rendering target
VG_ILLEGAL_ARGUMENT_ERROR
if width or height is less than or equal to 0
*/
EXPORT_C void
vgCopyImage(VGImage dst, VGint dx, VGint dy,
VGImage src, VGint sx, VGint sy,
VGint width, VGint height,
VGboolean dither)
{
OPENVG_TRACE("vgCopyImage dst=0x%x, dx=%d, dy=%d, src=0x%x, sx=%d, sy=%d, width=%d, height=%d, dither=%d",
dst, dx, dy, src, sx, sy, width, height, dither);
TGuestOpenVg::vgCopyImage(dst, dx, dy, src, sx, sy, width, height, dither);
}
/*
Draw an image to the current drawing surface. The current image-user-to-surface
transformation Ti is applied to the image, so that the image pixel centered at
(px + 0.5, py + 0.5) is mapped to the point (Ti)(px + 0.5, py + 0.5). In practice,
backwards mapping may be used. That is, a sample located at (x, y) in the surface
coordinate system is colored according to an interpolated image pixel value at the
point (Ti)-1(x, y) in the image coordinate system. If Ti is non-invertible (or nearly
so, within the limits of numerical accuracy), no drawing occurs.
ERRORS
VG_BAD_HANDLE_ERROR
if image is not a valid image handle, or is not shared with the current
context
VG_IMAGE_IN_USE_ERROR
if image is currently a rendering target
*/
EXPORT_C void
vgDrawImage(VGImage image)
{
OPENVG_TRACE("vgDrawImage image=0x%x", image);
TGuestOpenVg::vgDrawImage(image);
}
/*
Copies pixel data from the image src onto the drawing surface. The image pixel
(sx + i, sy + j) is copied to the drawing surface pixel (dx + i, dy + j), for
0 <= i < width and 0 <= j < height. Pixels whose source lies outside of the
bounds of src or whose destination lies outside the bounds of the drawing surface
are ignored. Pixel format conversion is applied as needed. Scissoring takes place
normally. Transformations, masking, and blending are not applied.
ERRORS
VG_BAD_HANDLE_ERROR
if src is not a valid image handle, or is not shared with the current context
VG_IMAGE_IN_USE_ERROR
if src is currently a rendering target
VG_ILLEGAL_ARGUMENT_ERROR
if width or height is less than or equal to 0
*/
EXPORT_C void
vgSetPixels(VGint dx, VGint dy,
VGImage src, VGint sx, VGint sy,
VGint width, VGint height)
{
OPENVG_TRACE("vgSetPixels dx=%d, dy=%d, src==0x%x, sx=%d, sy=%d, width=%d, height=%d",
dx, dy, src, sx, sy, width, height);
TGuestOpenVg::vgSetPixels(dx, dy, src, sx, sy, width, height);
}
/*
Copy pixel data to the drawing surface without the creation of a VGImage object. The pixel
values to be drawn are taken from the data pointer at the time of the vgWritePixels call,
so future changes to the data have no effect. The effects of changes to the data by another
thread at the time of the call to vgWritePixels are undefined.
ERRORS
VG_UNSUPPORTED_IMAGE_FORMAT_ERROR
if dataFormat is not a valid value from the VGImageFormat enumeration
VG_ILLEGAL_ARGUMENT_ERROR
if width or height is less than or equal to 0
if data is NULL
if data is not properly aligned
*/
EXPORT_C void
vgWritePixels(const void * data, VGint dataStride,
VGImageFormat dataFormat,
VGint dx, VGint dy,
VGint width, VGint height)
{
OPENVG_TRACE("vgWritePixels data=0x%x, dataStride=%d, dataFormat=0x%x, dx=%d, dy=%d, width=%d, height=%d",
data, dataStride, dataFormat, dx, dy, width, height);
TGuestOpenVg::vgWritePixels(data, dataStride, dataFormat, dx, dy, width, height);
}
/*
Retrieves pixel data from the drawing surface into the image dst. The drawing surface
pixel (sx + i, sy + j) is copied to pixel (dx + i, dy + j) of the image dst, for
0 <= i < width and 0 <= j < height. Pixels whose source lies outside of the bounds of
the drawing surface or whose destination lies outside the bounds of dst are ignored.
Pixel format conversion is applied as needed. The scissoring region does not affect
the reading of pixels.
ERRORS
VG_BAD_HANDLE_ERROR
if dst is not a valid image handle, or is not shared with the current context
VG_IMAGE_IN_USE_ERROR
if dst is currently a rendering target
VG_ILLEGAL_ARGUMENT_ERROR
if width or height is less than or equal to 0
*/
EXPORT_C void
vgGetPixels(VGImage dst, VGint dx, VGint dy,
VGint sx, VGint sy,
VGint width, VGint height)
{
OPENVG_TRACE("vgGetPixels dst=0x%x, dx=%d, dy=%d, sx=%d, sy=%d, width=%d, height=%d",
dst, dx, dy, sx, sy, width, height);
TGuestOpenVg::vgGetPixels(dst, dx, dy, sx, sy, width, height);
}
/*
Copy pixels from one region of the drawing surface to another. Copies between
overlapping regions are allowed and always produce consistent results identical to
copying the entire source region to a scratch buffer followed by copying the scratch
buffer into the destination region. The drawing surface pixel (sx + i, sy + j) is
copied to pixel (dx + i, dy + j) for 0 <= i < width and 0 <= j < height. Pixels whose
source or destination lies outside of the bounds of the drawing surface are ignored.
Transformations, masking, and blending are not applied. Scissoring is applied to the
destination, but does not affect the reading of pixels.
ERRORS
VG_ILLEGAL_ARGUMENT_ERROR
if width or height is less than or equal to 0
*/
EXPORT_C void
vgCopyPixels(VGint dx, VGint dy,
VGint sx, VGint sy,
VGint width, VGint height)
{
OPENVG_TRACE("vgCopyPixels dx=%d, dy=%d, sx=%d, sy=%d, width=%d, height=%d",
dx, dy, sx, sy, width, height);
TGuestOpenVg::vgCopyPixels(dx, dy, sx, sy, width, height);
}
/*
Destroys the VGFont object pointed to by the font argument.
Note that vgDestroyFont will not destroy underlying objects that were used to
define glyphs in the font. It is the responsibility of an application to destroy all
VGPath or VGImage objects that were used in a VGFont, if they are no longer in
use.
ERRORS
VG_BAD_HANDLE_ERROR
if font is not a valid font handle, or is not shared with the current context
*/
EXPORT_C void
vgDestroyFont(VGFont font)
{
OPENVG_TRACE("vgDestroyFont font=0x%x", font);
TGuestOpenVg::vgDestroyFont(font);
}
/*
Creates a new glyph and assigns the given path to a glyph associated with the
glyphIndex in a font object. The glyphOrigin argument defines the coordinates of
the glyph origin within the path, and the escapement parameter determines the
advance width for this glyph. Both glyphOrigin and escapement coordinates are
defined in the same coordinate system as the path. For glyphs that have no
visual representation (e.g., the <space> character), a value of VG_INVALID_HANDLE
is used for path. The reference count for the path is incremented.
The path object may define either an original glyph outline, or an outline that
has been scaled and hinted to a particular size (in surface coordinate units); this
is defined by the isHinted parameter, which can be used by implementation
for text-specific optimizations (e.g., heuristic auto-hinting of unhinted outlines).
When isHinted is equal to VG_TRUE, the implementation will never apply
auto-hinting; otherwise, auto hinting will be applied at the implementation's
discretion.
ERRORS
VG_BAD_HANDLE_ERROR
if font is not a valid font handle, or is not shared with the current context
if path is not a valid font handle or VG_INVALID_HANDLE, or is not shared
with the current context
VG_ILLEGAL_ARGUMENT_ERROR
if the pointer to glyphOrigin or escapement is NULL or is not properly
aligned
*/
EXPORT_C void
vgSetGlyphToPath(VGFont font,
VGuint glyphIndex,
VGPath path,
VGboolean isHinted,
const VGfloat glyphOrigin [2],
const VGfloat escapement[2])
{
OPENVG_TRACE("vgSetGlyphToPath font=0x%x, glyphIndex=%u, path=0x%x, isHinted=%d, glyphOrigin=0x%x, escapement=0x%x",
font, glyphIndex, path, isHinted, glyphOrigin, escapement);
TGuestOpenVg::vgSetGlyphToPath(font, glyphIndex, path, isHinted, glyphOrigin, escapement);
}
/*
Creates a new glyph and assigns the given image into a glyph associated with
the glyphIndex in a font object. The glyphOrigin argument defines the
coordinates of the glyph origin within the image, and the escapement parameter
determines the advance width for this glyph. Both glyphOrigin and escapement
coordinates are defined in the image coordinate system. Applying transformations
to an image (other than translations mapped to pixel grid in surface coordinate
system) should be avoided as much as possible. For glyphs that have no visual
representation (e.g., the <space> character), a value of VG_INVALID_HANDLE is
used for image. The reference count for the image is incremented.
ERRORS
VG_BAD_HANDLE_ERROR
if font is not a valid font handle, or is not shared with the current context
if image is not a valid image handle or VG_INVALID_HANDLE, or is not
shared with the current context
VG_ILLEGAL_ARGUMENT_ERROR
if the pointer to glyphOrigin or escapement is NULL or is not properly
aligned
VG_IMAGE_IN_USE_ERROR
if image is currently a rendering target
*/
EXPORT_C void
vgSetGlyphToImage(VGFont font,
VGuint glyphIndex,
VGImage image,
const VGfloat glyphOrigin [2],
const VGfloat escapement[2])
{
OPENVG_TRACE("vgSetGlyphToImage font=0x%x, glyphIndex=%d, image=0x%x, glyphOrigin=0x%x, escapement=0x%x",
font, glyphIndex, image, (void*)glyphOrigin, (void*)escapement);
TGuestOpenVg::vgSetGlyphToImage(font, glyphIndex, image, glyphOrigin, escapement);
}
/*
Deletes the glyph defined by a glyphIndex parameter from a font. The reference count
for the VGPath or VGImage object to which the glyph was previously set is decremented,
and the object's resources are released if the count has fallen to 0.
ERRORS
VG_BAD_HANDLE_ERROR
if font is not a valid font handle, or is not shared with the current context
VG_ILLEGAL_ARGUMENT_ERROR
if glyphIndex is not defined for the font
*/
EXPORT_C void
vgClearGlyph(VGFont font,
VGuint glyphIndex)
{
OPENVG_TRACE("vgClearGlyph font=0x%x, glyphIndex=%u", font, glyphIndex);
TGuestOpenVg::vgClearGlyph(font, glyphIndex);
}
/*
Renders a glyph defined by the glyphIndex using the given font object. The
user space position of the glyph (the point where the glyph origin will be
placed) is determined by value of VG_GLYPH_ORIGIN. vgDrawGlyph calculates the
new text origin by translating the glyph origin by the escapement vector of
the glyph defined by glyphIndex. Following the call, the VG_GLYPH_ORIGIN
parameter will be updated with the new origin.
ERRORS
VG_BAD_HANDLE_ERROR
if font is not a valid font handle, or is not shared with the current context
VG_ILLEGAL_ARGUMENT_ERROR
if glyphIndex has not been defined for a given font object
if paintModes is not a valid bitwise OR of values from the VGPaintMode
enumeration, or 0
*/
EXPORT_C void
vgDrawGlyph(VGFont font,
VGuint glyphIndex,
VGbitfield paintModes,
VGboolean allowAutoHinting)
{
OPENVG_TRACE("vgDrawGlyph font=0x%x, glyphIndex=%u, paintModes=0x%x, allowAutoHinting=%d",
font, glyphIndex, paintModes, allowAutoHinting);
TGuestOpenVg::vgDrawGlyph(font, glyphIndex, paintModes, allowAutoHinting);
}
/*
Renders a sequence of glyphs defined by the array pointed to by glyphIndices
using the given font object. The values in the adjustments_x and adjustments_y
arrays define positional adjustment values for each pair of glyphs defined by
the glyphIndices array. The glyphCount parameter defines the number of elements
in the glyphIndices and adjustments_x and adjustments_y arrays. The adjustment
values defined in these arrays may represent kerning or other positional adjustments
required for each pair of glyphs. If no adjustments for glyph positioning in a
particular axis are required (all horizontal and/or vertical adjustments are zero),
NULL pointers may be passed for either or both of adjustment_x and
adjustment_y. The adjustments values should be defined in the same
coordinate system as the font glyphs; if the glyphs are defined by path objects
with path data scaled (e.g., by a factor of 1/units-per-EM), the values in the
adjustment_x and adjustment_y arrays are scaled using the same scale factor.
ERRORS
VG_BAD_HANDLE_ERROR
if font is not a valid font handle, or is not shared with the current context
VG_ILLEGAL_ARGUMENT_ERROR
if glyphCount is zero or a negative value
if the pointer to the glyphIndices array is NULL or is not properly
aligned
if a pointer to either of the adjustments_x or adjustments_y arrays are
non-NULL and are not properly aligned
if any of the glyphIndices has not been defined in a given font object
if paintModes is not a valid bitwise OR of values from the VGPaintMode
enumeration, or 0
*/
EXPORT_C void
vgDrawGlyphs(VGFont font,
VGint glyphCount,
const VGuint * glyphIndices,
const VGfloat * adjustments_x,
const VGfloat * adjustments_y,
VGbitfield paintModes,
VGboolean allowAutoHinting)
{
OPENVG_TRACE("vgDrawGlyphs font=0x%x, glyphCount=%d, glyphIndices=0x%x, adjustments_y=0x%x, "
"adjustments_x=0x%x, paintModes=0x%x, allowAutoHinting=%d",
font, glyphCount, (void*)glyphIndices, (void*)adjustments_x, (void*)adjustments_y, paintModes, allowAutoHinting);
TGuestOpenVg::vgDrawGlyphs(font, glyphCount, glyphIndices, adjustments_x, adjustments_y, paintModes, allowAutoHinting);
}
/* Image Filters */
/*
Computes a linear combination of color and alpha values (Rsrc, Gsrc, Bsrc,
ALPHAsrc) from the normalized source image src at each pixel.
ERRORS
VG_BAD_HANDLE_ERROR
if either dst or src is not a valid image handle, or is not shared with the
current context
VG_IMAGE_IN_USE_ERROR
if either dst or src is currently a rendering target
VG_ILLEGAL_ARGUMENT_ERROR
if src and dst overlap
if matrix is NULL
if matrix is not properly aligned
*/
EXPORT_C void
vgColorMatrix(VGImage dst, VGImage src,
const VGfloat * matrix)
{
OPENVG_TRACE("vgColorMatrix dst=0x%x, src=0x%x, matrix=0x%x", dst, src, matrix);
TGuestOpenVg::vgColorMatrix(dst, src, matrix);
}
/*
Applies a user-supplied convolution kernel to a normalized source image src. The
dimensions of the kernel are given by kernelWidth and kernelHeight; the kernel values
are specified as kernelWidth*kernelHeight VGshorts in column-major order. That is,
the kernel entry (i, j) is located at position i*kernelHeight + j in the input sequence.
The shiftX and shiftY parameters specify a translation between the source and
destination images. The result of the convolution is multiplied by a scale factor, and
a bias is added.
ERRORS
VG_BAD_HANDLE_ERROR
if either dst or src is not a valid image handle, or is not shared with the
current context
VG_IMAGE_IN_USE_ERROR
if either dst or src is currently a rendering target
VG_ILLEGAL_ARGUMENT_ERROR
if src and dst overlap
if kernelWidth or kernelHeight is less than or equal to 0 or greater than
VG_MAX_KERNEL_SIZE
if kernel is NULL
if kernel is not properly aligned
if tilingMode is not one of the values from the VGTilingMode enumeration
*/
EXPORT_C void
vgConvolve(VGImage dst, VGImage src,
VGint kernelWidth, VGint kernelHeight,
VGint shiftX, VGint shiftY,
const VGshort * kernel,
VGfloat scale,
VGfloat bias,
VGTilingMode tilingMode)
{
OPENVG_TRACE("vgConvolve dst=0x%x, src=0x%x, kW=%d, kH=%d, shX=%d, shY=%d, kernel=0x%x, scale=%f, bias=%f, tiling=0x%x",
dst, src, kernelWidth, kernelHeight, shiftX, shiftY, kernel, scale, bias, tilingMode);
TGuestOpenVg::vgConvolve(dst, src, kernelWidth, kernelHeight, shiftX, shiftY, kernel, scale, bias, tilingMode);
}
/*
Applies a user-supplied separable convolution kernel to a normalized source image src.
A separable kernel is a two-dimensional kernel in which each entry kij is equal to a
product kxi * kyj of elements from two one dimensional kernels, one horizontal and one
vertical.
ERRORS
VG_BAD_HANDLE_ERROR
if either dst or src is not a valid image handle, or is not shared with the
current context
VG_IMAGE_IN_USE_ERROR
if either dst or src is currently a rendering target
VG_ILLEGAL_ARGUMENT_ERROR
if src and dst overlap
if kernelWidth or kernelHeight is less than or equal to 0 or greater than
VG_MAX_SEPARABLE_KERNEL_SIZE
if kernelX or kernelY is NULL
if kernelX or kernelY is not properly aligned
if tilingMode is not one of the values from the VGTilingMode
enumeration
*/
EXPORT_C void
vgSeparableConvolve(VGImage dst, VGImage src,
VGint kernelWidth,
VGint kernelHeight,
VGint shiftX, VGint shiftY,
const VGshort * kernelX,
const VGshort * kernelY,
VGfloat scale,
VGfloat bias,
VGTilingMode tilingMode)
{
OPENVG_TRACE("vgSeparableConvolve dst=0x%x, src=0x%x, kW=%d, kH=%d, shX=%d, shY=%d, kX=0x%x, kY=0x%x, scale=%f, bias=%f, tiling=0x%x",
dst, src, kernelWidth, kernelHeight, shiftX, shiftY, kernelX, kernelY, scale, bias, tilingMode);
TGuestOpenVg::vgSeparableConvolve(dst, src, kernelWidth, kernelHeight, shiftX, shiftY, kernelX, kernelY, scale, bias, tilingMode);
}
/*
Computes the convolution of a normalized source image src with a separable kernel
defined in each dimension by the Gaussian function G(x, s).
ERRORS
VG_BAD_HANDLE_ERROR
if either dst or src is not a valid image handle, or is not shared with the
current context
VG_IMAGE_IN_USE_ERROR
if either dst or src is currently a rendering target
VG_ILLEGAL_ARGUMENT_ERROR
if src and dst overlap
if stdDeviationX or stdDeviationY is less than or equal to 0 or greater
than VG_MAX_GAUSSIAN_STD_DEVIATION
if tilingMode is not one of the values from the VGTilingMode
enumeration
*/
EXPORT_C void
vgGaussianBlur(VGImage dst, VGImage src,
VGfloat stdDeviationX,
VGfloat stdDeviationY,
VGTilingMode tilingMode)
{
OPENVG_TRACE("vgGaussianBlur dst=0x%x, src=0x%x, stdDeviationX=%f, stdDeviationY=%f, tilingMode=%d",
dst, src, stdDeviationX, stdDeviationY, tilingMode);
TGuestOpenVg::vgGaussianBlur(dst, src, stdDeviationX, stdDeviationY, tilingMode);
}
/*
Passes each image channel of the normalized source image src through a separate lookup
table.
Each channel of the normalized source pixel is used as an index into the lookup table for
that channel by multiplying the normalized value by 255 and rounding to obtain an 8-bit
integral value. Each LUT parameter should contain 256 VGubyte entries. The
outputs of the lookup tables are concatenated to form an RGBA_8888 pixel
value, which is interpreted as lRGBA_8888, lRGBA_8888_PRE, sRGBA_8888,
or sRGBA_8888_PRE, depending on the values of outputLinear and outputPremultiplied.
The resulting pixels are converted into the destination format using the normal
pixel format conversion rules.
ERRORS
VG_BAD_HANDLE_ERROR
if either dst or src is not a valid image handle, or is not shared with the
current context
VG_IMAGE_IN_USE_ERROR
if either dst or src is currently a rendering target
VG_ILLEGAL_ARGUMENT_ERROR
if src and dst overlap
if any pointer parameter is NULL
*/
EXPORT_C void
vgLookup(VGImage dst, VGImage src,
const VGubyte * redLUT,
const VGubyte * greenLUT,
const VGubyte * blueLUT,
const VGubyte * alphaLUT,
VGboolean outputLinear,
VGboolean outputPremultiplied)
{
OPENVG_TRACE("vgLookup dst=0x%x, src=0x%x, redLUT=0x%x, greenLUT=0x%x, blueLUT=0x%x, alphaLUT=0x%x, opLin=%d, opPremul=%d",
dst, src, redLUT, greenLUT, blueLUT, alphaLUT, outputLinear, outputPremultiplied);
TGuestOpenVg::vgLookup(dst, src, redLUT, greenLUT, blueLUT, alphaLUT, outputLinear, outputPremultiplied);
}
/*
Passes a single image channel of the normalized source image src, selected by the
sourceChannel parameter, through a combined lookup table that produces whole pixel
values. Each normalized source channel value is multiplied by 255 and rounded to
obtain an 8 bit integral value.
ERRORS
VG_BAD_HANDLE_ERROR
if either dst or src is not a valid image handle, or is not shared with the
current context
VG_IMAGE_IN_USE_ERROR
if either dst or src is currently a rendering target
VG_ILLEGAL_ARGUMENT_ERROR
if src and dst overlap
if src is in an RGB pixel format and sourceChannel is not one of VG_RED,
VG_GREEN, VG_BLUE or VG_ALPHA from the VGImageChannel enumeration
if lookupTable is NULL
if lookupTable is not properly aligned
*/
EXPORT_C void
vgLookupSingle(VGImage dst, VGImage src,
const VGuint * lookupTable,
VGImageChannel sourceChannel,
VGboolean outputLinear,
VGboolean outputPremultiplied)
{
OPENVG_TRACE("vgLookupSingle dst=0x%x, src=0x%x, lookupTable=0x%x, sourceChannel=0x%x, opLin=%d, opPremul=%d",
dst, src, lookupTable, sourceChannel, outputLinear, outputPremultiplied);
TGuestOpenVg::vgLookupSingle(dst, src, lookupTable, sourceChannel, outputLinear, outputPremultiplied);
}
// guest support for OpenVG extension #4, KHR_EGL_image - vgCreateEGLImageTargetKHR(VGeglImageKHR image)
/*
Creates an EGLImage target VGImage object from the provided EGLImage
<image>. <image> should be of type EGLImageKHR, cast into the type
VGeglImageKHR. Assuming no errors are generated in this function,
the resulting VGImage will be an EGLImage target of the specified
EGLImage <image>. As a side-effect of the referencing operation,
all of the pixel data in the <buffer> used as the EGLImage source
resource (i.e., the <buffer> parameter passed to the CreateImageKHR
command that returned <image>) will become undefined.
ERRORS
VG_UNSUPPORTED_IMAGE_FORMAT_ERROR
- if the OpenVG implementation is not able to create a VGImage
compatible with the provided VGeglImageKHR for an implementation-
dependent reason (this could be caused by, but not limited to,
reasons such as unsupported pixel formats, anti-aliasing quality,
etc.).
VG_ILLEGAL_ARGUMENT_ERROR
- if <image> is not a valid VGeglImageKHR.
*/
VGImage vgCreateEGLImageTargetKHR(VGeglImageKHR image)
{
OPENVG_TRACE("vgCreateEGLImageTargetKHR image=0x%x -->", image);
VGImage imageHandle = TGuestOpenVg::vgCreateEGLImageTargetKHR(image);
OPENVG_TRACE("vgCreateEGLImageTargetKHR imageHandle=0x%x <--", imageHandle);
return imageHandle;
}
} /* extern "C" */
// end of file openvg.cpp