/* * Copyright (c) 2021 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /* * * @addtogroup Display * @{ * * @brief Defines driver functions of the display module. * * This module provides driver functions for the graphics subsystem, including graphics layer management, * device control, graphics hardware acceleration, display memory management, and callbacks. * * @since 3.0 */ /* * * @file display_vgu.h * * @brief Declares the driver functions for implementing 2D vector hardware acceleration. * * @since 3.0 */ #ifndef DISPLAY_VGU_H #define DISPLAY_VGU_H #include "display_type.h" #ifdef __cplusplus extern "C" { #endif #undef HDI_VGU_SCALAR_IS_FLOAT #define HDI_VGU_SCALAR_IS_FLOAT 1 #ifdef HDI_VGU_SCALAR_IS_FLOAT typedef float VGUScalar; #else typedef int32_t VGUScalar; #endif typedef PixelFormat VGUPixelFormat; /* < Pixel formats */ typedef BlendType VGUBlendType; /* < Blend types supported by hardware acceleration */ /* * * @brief Enumerates data types of paths. * */ typedef enum { VGU_DATA_TYPE_S16 = 0, /* < Integer (2 bytes) */ VGU_DATA_TYPE_S32, /* < Integer (4 bytes) */ VGU_DATA_TYPE_F32 /* < Floating point number (4 bytes) */ } VGUPathDataType; /* * * @brief Enumerates supported hardware acceleration capabilities. * */ typedef enum { VGU_CAP_BLIT = (1 << 0), /* < Bit blit */ VGU_CAP_BLIT_NUM = (1 << 1), /* < Maximum number of images that can be combined during bit blit */ VGU_CAP_PATH = (1 << 2), /* < Path filling and stroking */ VGU_CAP_FILTER_BLUR = (1 << 3), /* < Blur filter */ } VGUCapability; /* * * @brief Enumerates result codes that may return. * */ typedef enum { VGU_SUCCESS = 0, /* < The operation is successful. */ VGU_NO_SUPPORT = -1, /* < This feature is not supported. */ VGU_OPERATION_FAILED = -2, /* < The operation failed. */ VGU_OUT_OF_MEMORY = -3, /* < The operation ran out of memory. */ VGU_TIMEOUT = -4, /* < The operation times out. */ VGU_INVALID_PARAMETER = -5, /* < One or more parameters are invalid. */ VGU_BUSY = -6, /* < The device is busy. */ VGU_NO_CONTEXT = -7, /* < There is no context specified. */ } VGUResult; /* * * @brief Enumerates styles for the endpoints of a stroked line. * */ typedef enum { VGU_LINECAP_BUTT = 0, /* < A line with a squared-off end (default value) */ VGU_LINECAP_ROUND, /* < A line with a rounded end */ VGU_LINECAP_SQUARE /* < A line with a squared-off end */ } VGULineCap; /* * * @brief Enumerates join types for stroked lines. * */ typedef enum { VGU_LINE_JOIN_MITER = 0, /* < A join with a sharp corner (default value) */ VGU_LINE_JOIN_ROUND, /* < A join with a rounded end */ VGU_LINE_JOIN_BEVEL, /* < A join with a squared-off end */ VGU_LINE_JOIN_BUTT /* < Invalid definition */ } VGUJointType; /* * * @brief Defines the coordinates of a point. * */ typedef struct { VGUScalar x; /* < Horizontal coordinate of the point */ VGUScalar y; /* < Vertical coordinate of the point */ } VGUPoint; /* * * @brief Defines a rectangle. * */ typedef struct { VGUScalar x; /* < Horizontal coordinate of the start point of the rectangle */ VGUScalar y; /* < Vertical coordinate of the start point of the rectangle */ VGUScalar w; /* < Width of the rectangle */ VGUScalar h; /* < Height of the rectangle */ } VGURect; /* * * @brief Enumerates filter types for rendering an image. * */ typedef enum { VGU_FILTER_BILINEAR = 0, /* < Bilinear interpolation filter (default value) */ VGU_FILTER_NEAREST, /* < No interpolation filter */ VGU_FILTER_LINEAR, /* < Linear interpolation filter */ VGU_FILTER_BUTT /* < Invalid definition */ } VGUFilter; /* * * @brief Enumerates fill rules for graphics. * */ typedef enum { VGU_RULE_WINDING = 0, /* < Non-zero winding rule (default value) */ VGU_RULE_EVEN_ODD, /* < Even-odd rule */ VGU_RULE_BUTT /* < Invalid definition */ } VGUFillRule; /* * * @brief Enumerates fill types of the outside of the gradient area. * */ typedef enum { VGU_SPREAD_PAD = 0, /* < The area is filled with the closest gradient stop color. (Default value) */ VGU_SPREAD_REFLECT, /* < The gradient is reflected outside the area. */ VGU_SPREAD_REPEAT, /* < The gradient is repeated outside the area. */ VGU_SPREAD_BUTT /* < Invalid definition */ } VGUFillSpread; /* * * @brief Enumerates wrap types of a pattern. * */ typedef enum { VGU_WRAP_REFLECT = 0, /* < The pattern is reflected. */ VGU_WRAP_REPEAT, /* < The pattern is repeated. */ VGU_WRAP_BUTT /* < Invalid definition */ } VGUWrapType; /* * * @brief Enumerates commands for drawing a path. * */ typedef enum { VGU_PATH_CMD_CLOSE = 0, /* < Close the current subpath (coordinates: none). */ VGU_PATH_CMD_MOVE, /* < Move to the specified point (coordinates: x0, y0). */ VGU_PATH_CMD_LINE, /* < Draw a line (coordinates: x0, y0). */ VGU_PATH_CMD_HLINE, /* < Draw a horizontal line (coordinates: x0). */ VGU_PATH_CMD_VLINE, /* < Draw a vertical line (coordinates: y0). */ VGU_PATH_CMD_QUAD, /* < Draw a quadratic Bezier curve (coordinates: x0, y0, x1, y1). */ VGU_PATH_CMD_CUBIC, /* < Draw a cubic Bezier curve (coordinates: x0, y0, x1, y1, x2, y2). */ VGU_PATH_CMD_SQUAD, /* < Draw a smooth quadratic Bezier curve (coordinates: x1, y1). */ VGU_PATH_CMD_SCUBIC, /* < Draw a smooth cubic Bezier curve (coordinates: x1, y1, x2, y2). */ VGU_PATH_CMD_BUTT, /* < Invalid definition */ } VGUPathCmd; /* * * @brief Defines a path object, which stores path-related commands and coordinates. * */ typedef struct { uint8_t *segment; /* < Pointer to the path command data */ int32_t numSegments; /* < Total number of path commands */ uint8_t *data; /* < Pointer to the coordinates used in the path commands */ VGUPathDataType type; /* < Data type of the path */ bool enAlias; /* < Whether to enable anti-aliasing */ VGURect boundBox; /* < Bounding box of the path */ } VGUPath; /* * * @brief Enumerates transform types. * */ typedef enum { VGU_TRANSFORM_TRANSLATE = (1 << 0), /* < Translate */ VGU_TRANSFORM_SCALE = (1 << 1), /* < Scale */ VGU_TRANSFORM_ROTATE_90 = (1 << 2), /* < Rotate by 90 degrees */ VGU_TRANSFORM_ROTATE_180 = (1 << 3), /* < Rotate by 180 degrees */ VGU_TRANSFORM_ROTATE_270 = (1 << 4), /* < Rotate by 270 degrees */ VGU_TRANSFORM_OTHER = (1 << 16) /* < Other transform type */ } VGUTransformType; /* * * @brief Defines a transformation matrix. * */ typedef struct { float m[3][3]; /* < 3x3 transformation matrix */ uint32_t type; /* < Transform type, which can be scale, translate, or rotate by 90 x N degrees */ } VGUMatrix3; /* * * @brief Stores bitmap information for hardware acceleration. * */ typedef struct { VGUPixelFormat pixelFormat; /* < Pixel format */ uint32_t width; /* < Bitmap width */ uint32_t height; /* < Bitmap height */ uint32_t stride; /* < Bitmap stride */ void *virAddr; /* < Virtual address of the requested memory */ uint64_t phyAddr; /* < Physical memory address */ } VGUBuffer; /* * * @brief Enumerates clip types of a surface. * */ typedef enum { VGU_CLIP_RECT = 0, /* < Rectangle clip (default value) */ VGU_CLIP_PATH, /* < Path clip */ VGU_CLIP_BUTT /* < Invalid definition */ } VGUClipType; /* * * @brief Defines a mask layer. * */ typedef struct { VGUBuffer *buffer; /* < Pointer to the buffer for the mask */ VGURect *rect; /* < Pointer to the rectangle for the mask */ } VGUMaskLayer; /* * * @brief Stores surface information for 2D hardware acceleration. * */ typedef struct { VGUBuffer *buffer; /* < Bitmap buffer */ union { VGURect *clipRect; /* < Pointer to the clip rectangle. If it is null, the entire surface will be rendered. */ VGUPath *clipPath; /* < Pointer to the clip path. If it is null, the entire surface will be rendered. */ }; VGUClipType clipType; /* < Clip type of the surface */ VGUMaskLayer *mask; /* < Mask layer, which can be null */ VGUBlendType blend; /* < Blend type, specifying how a new image is drawn onto an existing surface */ VGUFilter filter; /* < Filter type */ } VGUSurface; /* * * @brief Defines how the colors are distributed along the gradient. * */ typedef struct { float stop; /* < Stop position. The value ranges from 0.0 to 1.0. */ uint32_t color; /* < Color of the stop */ } VGUColorStop; /* * * @brief Defines a linear gradient. * */ typedef struct { VGUScalar x1; /* < Horizontal coordinate of the start point of the linear gradient */ VGUScalar y1; /* < Vertical coordinate of the start point of the linear gradient */ VGUScalar x2; /* < Horizontal coordinate of the end point of the linear gradient */ VGUScalar y2; /* < Vertical coordinate of the end point of the linear gradient */ } VGULinear; /* * * @brief Defines a radial gradient. * */ typedef struct { VGUScalar x0; /* < Horizontal coordinate of the center of the inner circle */ VGUScalar y0; /* < Vertical coordinate of the center of the inner circle */ VGUScalar r0; /* < Radius of the inner circle */ VGUScalar x1; /* < Horizontal coordinate of the center of the outer circle */ VGUScalar y1; /* < Vertical coordinate of the center of the outer circle */ VGUScalar r1; /* < Radius of the outer circle */ } VGURadial; /* * * @brief Defines a conic gradient. * */ typedef struct { VGUScalar cx; /* < Horizontal coordinate of the center of the circle */ VGUScalar cy; /* < Vertical coordinate of the center of the circle */ } VGUConic; /* * * @brief Defines an image. * */ typedef struct { VGUBuffer *buffer; /* < Image buffer */ VGUMatrix3 *matrix; /* < Pointer to the transformation matrix. If it is null, the identity matrix is used. */ VGURect *rect; /* < Pointer to the rectangle of the image. If it is null, the entire buffer data is used. */ uint8_t opacity; /* < Opacity. The value ranges from 0 to 255. */ } VGUImage; /* * * @brief Defines an image pattern. * */ typedef struct { VGUImage *image; /* < Pointer to the image object */ VGUWrapType wrapx; /* < Wrap the image horizontally. */ VGUWrapType wrapy; /* < Wrap the image vertically. */ } VGUPattern; /* * * @brief Enumerates gradient types. * */ typedef enum { VGU_GRADIENT_LINEAR = 0, /* < Linear gradient */ VGU_GRADIENT_RADIAL, /* < Radial gradient */ VGU_GRADIENT_CONIC, /* < Conic gradient */ VGU_GRADIENT_BUTT /* < Invalid definition */ } VGUGradientType; /* * * @brief Defines a gradient object. * */ typedef struct { VGUMatrix3 *matrix; /* < Pointer to the transformation matrix of the gradient object */ VGUColorStop *colorStops; /* < Pointer to the gradient stop color array */ uint16_t stopCount; /* < Number of stop colors */ union { VGULinear linear; /* < Linear gradient object */ VGURadial radial; /* < Radial gradient object */ VGUConic conic; /* < Conic gradient object */ }; VGUGradientType type; /* < Gradient type */ VGUFillSpread spread; /* < Gradient spread mode */ uint8_t opacity; /* < Opacity. The value ranges from 0 to 255. */ } VGUGradient; /* * * @brief Defines a solid color. * */ typedef struct { uint32_t color; /* < Solid color */ uint8_t opacity; /* < Opacity. The value ranges from 0 to 255. */ } VGUSolid; /* * * @brief Enumerates paint types. * */ typedef enum { VGU_PAINT_SOLID = 0, /* < Paint a solid color. */ VGU_PAINT_GRADIENT, /* < Paint a gradient object. */ VGU_PAINT_PATTERN, /* < Paint a pattern. */ VGU_PAINT_BUTT /* < Invalid operation */ } VGUPaintType; /* * * @brief Defines the paint style when filling or stroking a path. * */ typedef struct { union { VGUGradient *gradient; /* < Pointer to the gradient object */ VGUPattern *pattern; /* < Pointer to the pattern object */ VGUSolid *solid; /* < Pointer to the solid color object */ }; VGUPaintType type; /* < Paint type */ } VGUPaintStyle; /* * * @brief Defines path filling attributes. * */ typedef struct { VGUFillRule rule; /* < Fill rule */ } VGUFillAttr; /* * * @brief Defines path stroking attributes. * */ typedef struct { VGULineCap cap; /* < Line cap style */ VGUJointType join; /* < Join type */ float miterLimit; /* < Miter limit */ float width; /* < Line width */ } VGUStrokeAttr; /* * * @brief Defines driver functions for 2D hardware acceleration. */ typedef struct { /* * * @brief Initializes hardware acceleration. * * @return Returns VGU_SUCCESS if the operation is successful; returns an error code defined in * {@link VGUResult} otherwise. * @see DeinitVgu * @since 3.0 */ VGUResult (*InitVgu)(void); /* * * @brief Deinitializes hardware acceleration. * * @return Returns VGU_SUCCESS if the operation is successful; returns an error code defined in * {@link VGUResult} otherwise. * @see InitVgu * @since 3.0 */ VGUResult (*DeinitVgu)(void); /* * * @brief Queries hardware acceleration capabilities. * * @param cap Indicates the capabilities to query, which are defined by VGUCapability. * * @return Returns a value greater than or equal to 0 if the operation is successful; returns an error code defined * in {@link VGUResult} otherwise. * @since 3.0 */ int32_t (*QueryCapability)(uint32_t cap); /* * * @brief Fills the given path with a specified paint style. * * @param target Indicates the pointer to the target surface. * @param path Indicates the pointer to the path object. * @param matrix Indicates the pointer to the transformation matrix object. If this parameter is null, * the identity matrix is used by default. * @param attr Indicates the pointer to the path filling attributes. * @param style Indicates the pointer to the paint style to use. * * @return Returns VGU_SUCCESS if the operation is successful; returns an error code defined in * {@link VGUResult} otherwise. * @since 3.0 */ VGUResult (*RenderFill)(VGUSurface *target, const VGUPath *path, const VGUMatrix3 *matrix, const VGUFillAttr *attr, const VGUPaintStyle *style); /* * * @brief Strokes the given path with a specified paint style. * * @param target Indicates the pointer to the target surface. * @param path Indicates the pointer to the path object. * @param matrix Indicates the pointer to the transformation matrix object. If this parameter is null, * the identity matrix is used by default. * @param attr Indicates the pointer to the path stroking attributes. * @param style Indicates the pointer to the paint style to use. * * @return Returns VGU_SUCCESS if the operation is successful; returns an error code defined in * {@link VGUResult} otherwise. * @since 3.0 */ VGUResult (*RenderStroke)(VGUSurface *target, const VGUPath *path, const VGUMatrix3 *matrix, const VGUStrokeAttr *attr, const VGUPaintStyle *style); /* * * @brief Blurs a specified surface. * * @param target Indicates the pointer to the target surface. * @param blur Indicates the blur radius. * * @return Returns VGU_SUCCESS if the operation is successful; returns an error code defined in * {@link VGUResult} otherwise. * @since 3.0 */ VGUResult (*RenderBlur)(VGUSurface *target, uint16_t blur); /* * * @brief Blits an image to the target surface. * * During bit blit, color space conversion (CSC) and transformation can be implemented. * * @param target Indicates the pointer to the target surface. * @param src Indicates the pointer to the source image. * @param color Indicates the color for blending. If this parameter is 0, color blending is not performed. * * @return Returns VGU_SUCCESS if the operation is successful; returns an error code defined in * {@link VGUResult} otherwise. * @since 3.0 */ VGUResult (*RenderBlit)(VGUSurface *target, const VGUImage *src, uint32_t color); /* * * @brief Blits multiple images to the target surface. * * During bit blit, color space conversion (CSC) and transformation can be implemented. You can use this * function to combine multiple source images to the target surface. * To query the maximum number of source images allowed, call the QueryCapability function. * * @param target Indicates the pointer to the target surface. * @param src Indicates the pointer to the array of source images. * @param count Indicates the number of source images. * @param color Indicates the color for blending. If this parameter is 0, color blending is not performed. * * @return Returns VGU_SUCCESS if the operation is successful; returns an error code defined in * {@link VGUResult} otherwise. * @since 3.0 */ VGUResult (*RenderBlitN)(VGUSurface *target, const VGUImage *src, uint16_t count, uint32_t color); /* * * @brief Clears a rectangle with a given color on the target surface. * * @param target Indicates the pointer to the target surface. * @param rect Indicates the pointer to the rectangle to clear. If this parameter is null, the entire surface * will be cleared. * @param color Indicates the color to fill. * @param opacity Indicates the opacity to set. * * @return Returns VGU_SUCCESS if the operation is successful; returns an error code defined in * {@link VGUResult} otherwise. * @since 3.0 */ VGUResult (*RenderClearRect)(VGUSurface *target, const VGURect *rect, uint32_t color, uint8_t opacity); /* * * @brief Disables hardware acceleration for rendering. * * @return Returns VGU_SUCCESS if the operation is successful; returns an error code defined in * {@link VGUResult} otherwise. * @since 3.0 */ VGUResult (*RenderCancel)(); /* * * @brief Synchronizes hardware acceleration when it is used to draw and blit bitmaps. * * This function blocks the process until hardware acceleration is complete. * * @param timeOut Indicates the timeout duration for hardware acceleration synchronization. * The value 0 indicates no timeout, so the process keeps waiting until hardware acceleration is complete. * * @return Returns VGU_SUCCESS if the operation is successful; returns an error code defined in * {@link VGUResult} otherwise. * @since 3.0 */ VGUResult (*RenderSync)(int32_t timeOut); } VGUFuncs; /* * * @brief Initializes a path object. * * @param path Indicates the pointer to the path object. * @param type Indicates the data type of the path. * @param segments Indicates the pointer to the path commands. * @param numSegments Indicates the total number of path commands. * @param data Indicates the pointer to the coordinate data used in the path commands. * @param enAlias Specifies whether to enable anti-aliasing. * @param boundBox Indicates the bounding box of the path. * * @return Returns VGU_SUCCESS if the operation is successful; returns an error code defined in * {@link VGUResult} otherwise. * @since 3.0 */ VGUResult VGUPathInit(VGUPath *path, VGUPathDataType type, const uint8_t* segments, int numSegments, const uint8_t *data, bool enAlias, VGURect boundBox); /* * * @brief Adds a subpath to a specified path. * * @param path Indicates the pointer to the path object. * @param subpath Indicates the pointer to the subpath object. * * @return Returns VGU_SUCCESS if the operation is successful; returns an error code defined in * {@link VGUResult} otherwise. * @since 3.0 */ VGUResult VGUPathAppend(VGUPath *path, const VGUPath *subpath); /* * * @brief Clears the memory of a specified path object. * * @param path Indicates the pointer to the path object. * * @return Returns VGU_SUCCESS if the operation is successful; returns an error code defined in * {@link VGUResult} otherwise. * @since 3.0 */ VGUResult VGUPathClear(VGUPath *path); /* * * @brief Loads an identity matrix into a specified matrix object. * * @param matrix Indicates the pointer to the transformation matrix object. * * @return Returns VGU_SUCCESS if the operation is successful; returns an error code defined in * {@link VGUResult} otherwise. * @since 3.0 */ VGUResult VGUMatrixIdentity(VGUMatrix3 *matrix); /* * * @brief Scales a specified transformation matrix. * * @param matrix Indicates the pointer to the transformation matrix object. * @param xScale Indicates how much you want to scale the horizontal coordinate by. * @param yScale Indicates how much you want to scale the vertical coordinate by. * * @return Returns VGU_SUCCESS if the operation is successful; returns an error code defined in * {@link VGUResult} otherwise. * @since 3.0 */ VGUResult VGUMatrixScale(VGUMatrix3 *matrix, float xScale, float yScale); /* * * @brief Rotates a specified transformation matrix. * * @param matrix Indicates the pointer to the transformation matrix object. * @param degree Indicates the number of degrees to rotate. * * @return Returns VGU_SUCCESS if the operation is successful; returns an error code defined in * {@link VGUResult} otherwise. * @since 3.0 */ VGUResult VGUMatrixRotate(VGUMatrix3 *matrix, float degree); /* * * @brief Translates a specified transformation matrix. * * @param matrix Indicates the pointer to the transformation matrix object. * @param x Indicates how much you want to translate the horizontal coordinate by. * @param y Indicates how much you want to translate the vertical coordinate by. * * @return Returns VGU_SUCCESS if the operation is successful; returns an error code defined in * {@link VGUResult} otherwise. * @since 3.0 */ VGUResult VGUMatrixTranslate(VGUMatrix3 *matrix, float x, float y); /* * * @brief Adds color stops to a specified gradient. * * @param gradient Indicates the pointer to the gradient object. * @param colorStop Indicates the pointer to the color stop array. * @param count Indicates the total number of color stops. * * @return Returns VGU_SUCCESS if the operation is successful; returns an error code defined in * {@link VGUResult} otherwise. * @since 3.0 */ VGUResult VGUGradientColorStop(VGUGradient *gradient, const VGUColorStop *colorStop, uint32_t count); /* * * @brief Clears color stops of a specified gradient. * * @param gradient Indicates the pointer to the gradient object. * * @return Returns VGU_SUCCESS if the operation is successful; returns an error code defined in * {@link VGUResult} otherwise. * @since 3.0 */ VGUResult VGUGradientClearStop(VGUGradient *gradient); /* * * @brief Sets a transformation matrix for a specified gradient. * * @param gradient Indicates the pointer to the gradient object. * @param matrix Indicates the pointer to the transformation matrix object to set. * * @return Returns VGU_SUCCESS if the operation is successful; returns an error code defined in * {@link VGUResult} otherwise. * @since 3.0 */ VGUResult VGUGradientMatrix(VGUGradient *gradient, const VGUMatrix3 *matrix); /* * * @brief Creates a linear gradient object. * * @param gradient Indicates the pointer to the gradient object. * @param p1 Indicates the pointer to the coordinates of the start point. * @param p2 Indicates the pointer to the coordinates of the end point. * * @return Returns VGU_SUCCESS if the operation is successful; returns an error code defined in * {@link VGUResult} otherwise. * @since 3.0 */ VGUResult VGUGradientLinear(VGUGradient *gradient, const VGUPoint *p1, const VGUPoint *p2); /* * * @brief Creates a radial gradient object. * * @param gradient Indicates the pointer to the gradient object. * @param p1 Indicates the pointer to the center point coordinates of the inner circle. * @param r1 Indicates the radius of the inner circle. * @param p2 Indicates the pointer to the center point coordinates of the outer circle. * @param r2 Indicates the radius of the outer circle. * * @return Returns VGU_SUCCESS if the operation is successful; returns an error code defined in * {@link VGUResult} otherwise. * @since 3.0 */ VGUResult VGUGradientRadial(VGUGradient *gradient, const VGUPoint *p1, VGUScalar r1, const VGUPoint *p2, VGUScalar r2); /* * * @brief Creates a conic gradient object. * * @param gradient Indicates the pointer to the gradient object. * @param cx Indicates the horizontal coordinate of the center point of the gradient. * @param cy Indicates the vertical coordinate of the center point of the gradient. * * @return Returns VGU_SUCCESS if the operation is successful; returns an error code defined in * {@link VGUResult} otherwise. * @since 3.0 */ VGUResult VGUGradientConic(VGUGradient *gradient, VGUScalar cx, VGUScalar cy); /* * * @brief Initializes the hardware acceleration module to obtain the pointer to functions for * hardware acceleration operations. * * @param funcs Indicates the double pointer to the functions for hardware acceleration operations. * Memory is allocated automatically when you initiate the hardware acceleration module, so you can simply use * the pointer to gain access to the functions. * * @return Returns VGU_SUCCESS if the operation is successful; returns an error code defined in * {@link VGUResult} otherwise. * * @since 3.0 */ VGUResult VGUInitialize(VGUFuncs **funcs); /* * * @brief Deinitializes the hardware acceleration module to release the pointer to functions * for hardware acceleration operations. * * @param funcs Indicates the pointer to the functions for hardware acceleration operations. * * @return Returns VGU_SUCCESS if the operation is successful; returns an error code defined in * {@link VGUResult} otherwise. * @since 3.0 */ VGUResult VGUUninitialize(VGUFuncs *funcs); #ifdef __cplusplus } #endif #endif