2024-11-15 14:56:38 +01:00
|
|
|
/* TSI 2023.xmo */
|
|
|
|
/*******************************************************************************
|
|
|
|
* Copyright (c) 2023 Think Silicon Single Member PC
|
|
|
|
*
|
|
|
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
|
|
* of this header file and/or associated documentation files to use, copy,
|
|
|
|
* modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
|
|
|
* Materials, and to permit persons to whom the Materials are furnished to do
|
|
|
|
* so, subject to the following conditions:
|
|
|
|
*
|
|
|
|
* The above copyright notice and this permission notice shall be included in
|
|
|
|
* all copies or substantial portions of the Materials.
|
|
|
|
*
|
|
|
|
* MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS
|
|
|
|
* NEMAGFX API. THE UNMODIFIED, NORMATIVE VERSIONS OF THINK-SILICON NEMAGFX
|
|
|
|
* SPECIFICATIONS AND HEADER INFORMATION ARE LOCATED AT:
|
|
|
|
* https://think-silicon.com/products/software/nemagfx-api
|
|
|
|
*
|
|
|
|
* The software is provided 'as is', without warranty of any kind, express or
|
|
|
|
* implied, including but not limited to the warranties of merchantability,
|
|
|
|
* fitness for a particular purpose and noninfringement. In no event shall
|
|
|
|
* Think Silicon Single Member PC be liable for any claim, damages or other
|
|
|
|
* liability, whether in an action of contract, tort or otherwise, arising
|
|
|
|
* from, out of or in connection with the software or the use or other dealings
|
|
|
|
* in the software.
|
|
|
|
******************************************************************************/
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @file
|
|
|
|
* @brief Core NemaVG API drawing and initialization functions.
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef __NEMA_VG_H__
|
|
|
|
#define __NEMA_VG_H__
|
|
|
|
|
|
|
|
#include "nema_core.h"
|
|
|
|
#include "nema_sys_defs.h"
|
|
|
|
#include "nema_vg_path.h"
|
|
|
|
#include "nema_vg_paint.h"
|
|
|
|
#include "nema_vg_context.h"
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
extern "C" {
|
|
|
|
#endif
|
|
|
|
|
|
|
|
// -------------------------------------------------------------------------------
|
|
|
|
// SETUP
|
|
|
|
// -------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
/** \brief Initializes NemaVG library and allocates the stencil buffer to the default memory pool (NEMA_MEM_POOL_FB)
|
|
|
|
* Call either this or nema_vg_init_stencil_pool to allocate the stencil buffer to a different memory pool
|
|
|
|
* or nema_vg_init_stencil_prealloc to provide the stencil buffer
|
|
|
|
* \param width Framebuffer width
|
|
|
|
* \param height Framebuffer height
|
|
|
|
*/
|
|
|
|
void nema_vg_init(int width, int height);
|
|
|
|
|
|
|
|
/** \brief Initializes NemaVG library and allocate the stencil buffer in a specific memory pool.
|
|
|
|
* Call either this or nema_vg_init to allocate the stencil buffer to the default memory pool (NEMA_MEM_POOL_FB)
|
|
|
|
* or nema_vg_init_stencil_prealloc to provide the stencil buffer
|
|
|
|
* \param width Stencil buffer width - Must be the first multiple of 4 of the framebuffer width
|
|
|
|
* \param height Stencil buffer height - Must be the first multiple of 4 of the framebuffer height
|
|
|
|
* \param pool Memory pool for allocating the stencil buffer (memory pools are platform specific and defined in nema_sys_defs.h file)
|
|
|
|
*/
|
|
|
|
void nema_vg_init_stencil_pool(int width, int height, int pool);
|
|
|
|
|
|
|
|
/** \brief Initializes NemaVG library without allocating the stencil buffer which is provided by the user.
|
|
|
|
* Call either this or nema_vg_init to allocate the stencil buffer to the default memory pool (NEMA_MEM_POOL_FB)
|
|
|
|
* or nema_vg_init_stencil_pool to allocate the stencil buffer to a different memory pool
|
|
|
|
* \param width Stencil buffer width - Must be the first multiple of 4 of the framebuffer width
|
|
|
|
* \param height Stencil buffer height - Must be the first multiple of 4 of the framebuffer height
|
|
|
|
* \param stencil_bo stencil buffer
|
|
|
|
*/
|
|
|
|
void nema_vg_init_stencil_prealloc(int width, int height, nema_buffer_t stencil_bo);
|
|
|
|
|
|
|
|
|
|
|
|
/** \brief Reinitialize NemaVG library after a gpu powerofff
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
void nema_vg_reinit(void);
|
|
|
|
|
|
|
|
/** \brief Deinitialize NemaVG library. Free memory from implicitly allocated objects (stencil buffer
|
|
|
|
* if created inside the library, lut buffer and tsvgs' path, paint and gradient buffers)
|
|
|
|
*
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
void nema_vg_deinit(void);
|
|
|
|
|
|
|
|
/** \brief Initialize NemaVG library for a new thread.
|
|
|
|
* Must be called for every new thread that is used.
|
|
|
|
*
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
void nema_vg_thread_init(void);
|
|
|
|
|
|
|
|
|
|
|
|
// -------------------------------------------------------------------------------
|
|
|
|
// PATH DRAW
|
|
|
|
// -------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
/** \brief Draw a path using a specified paint object
|
|
|
|
*
|
|
|
|
* \param path Pointer (handle) to the path that will be drawn
|
|
|
|
* \param paint Pointer (handle) to the paint object that wil be used for drawing
|
|
|
|
|
|
|
|
* \return Error code. See NEMA_VG_ERR_* defines in "nema_vg_context.h" header file for the error codes.
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
uint32_t nema_vg_draw_path(NEMA_VG_PATH_HANDLE path, NEMA_VG_PAINT_HANDLE paint);
|
|
|
|
|
|
|
|
/** \brief Draw a line shape
|
|
|
|
*
|
|
|
|
* \param x1 Upper left x coordinate
|
|
|
|
* \param y1 Upper left y coordinate
|
|
|
|
* \param x2 The width
|
|
|
|
* \param y2 The height
|
|
|
|
* \param m 3x3 affine transformation matrix
|
|
|
|
* \param paint The paint to draw
|
|
|
|
|
|
|
|
* \return Error code. See NEMA_VG_ERR_* defines in "nema_vg_context.h" header file for the error codes.
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
uint32_t nema_vg_draw_line(float x1, float y1, float x2, float y2,
|
|
|
|
nema_matrix3x3_t m,
|
|
|
|
NEMA_VG_PAINT_HANDLE paint);
|
|
|
|
|
|
|
|
/** \brief Draw a rectangle shape
|
|
|
|
*
|
|
|
|
* \param x Upper left x coordinate
|
|
|
|
* \param y Upper left y coordinate
|
|
|
|
* \param width The width
|
|
|
|
* \param height The height
|
|
|
|
* \param m 3x3 affine transformation matrix
|
|
|
|
* \param paint The paint to draw
|
|
|
|
|
|
|
|
* \return Error code
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
uint32_t nema_vg_draw_rect(float x, float y, float width, float height,
|
|
|
|
nema_matrix3x3_t m,
|
|
|
|
NEMA_VG_PAINT_HANDLE paint);
|
|
|
|
|
|
|
|
/** \brief Draw a rounded rectangle shape
|
|
|
|
*
|
|
|
|
* \param x Upper left x coordinate
|
|
|
|
* \param y Upper left y coordinate
|
|
|
|
* \param width The width
|
|
|
|
* \param height The height
|
|
|
|
* \param rx Horizontal cornel radius
|
|
|
|
* \param ry Vertical cornel radius
|
|
|
|
* \param m 3x3 affine transformation matrix
|
|
|
|
* \param paint The paint to draw
|
|
|
|
|
|
|
|
* \return Error code. See NEMA_VG_ERR_* defines in "nema_vg_context.h" header file for the error codes.
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
uint32_t nema_vg_draw_rounded_rect(float x, float y, float width, float height,
|
|
|
|
float rx, float ry,
|
|
|
|
nema_matrix3x3_t m,
|
|
|
|
NEMA_VG_PAINT_HANDLE paint);
|
|
|
|
|
|
|
|
/** \brief Draw a ellipse shape
|
|
|
|
*
|
|
|
|
* \param cx The x position of the ellipse
|
|
|
|
* \param cy The y position of the ellipse
|
|
|
|
* \param rx Radius on the x axis
|
|
|
|
* \param ry Radius on the y axis
|
|
|
|
* \param m 3x3 affine transformation matrix
|
|
|
|
* \param paint The paint to draw
|
|
|
|
|
|
|
|
* \return Error code. See NEMA_VG_ERR_* defines in "nema_vg_context.h" header file for the error codes.
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
uint32_t nema_vg_draw_ellipse(float cx, float cy, float rx, float ry,
|
|
|
|
nema_matrix3x3_t m,
|
|
|
|
NEMA_VG_PAINT_HANDLE paint);
|
|
|
|
|
|
|
|
/** \brief Draw a circle shape
|
|
|
|
*
|
|
|
|
* \param cx The x center of the circle
|
|
|
|
* \param cy The y center of the circle
|
|
|
|
* \param r Radius of the circle
|
|
|
|
* \param m 3x3 affine transformation matrix
|
|
|
|
* \param paint The paint to draw
|
|
|
|
|
|
|
|
* \return Error code. See NEMA_VG_ERR_* defines in "nema_vg_context.h" header file for the error codes.
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
uint32_t nema_vg_draw_circle(float cx, float cy, float r,
|
|
|
|
nema_matrix3x3_t m,
|
|
|
|
NEMA_VG_PAINT_HANDLE paint);
|
|
|
|
|
|
|
|
|
|
|
|
/** \brief Draw a filled ring with rounded caps shape. In case of a conical gradient paint type,
|
|
|
|
* the conical gradient center should be at the center of the ring(cx, cy). In other case, where the two centers do not match,
|
|
|
|
* the ring should be drawn with NEMA_VG_QUALITY_MAXIMUM. The ring width can be set with the paint's stroke_width.
|
|
|
|
*
|
|
|
|
* \param cx The center x coordinate of the ring
|
|
|
|
* \param cy The center y coordinate of the ring
|
|
|
|
* \param ring_radius The radius of the ring
|
|
|
|
* \param angle_start The angle in degrees of the ring
|
|
|
|
* \param angle_end The angle in degrees that ends this ring
|
|
|
|
* \param paint The paint to draw
|
|
|
|
|
|
|
|
* \return Error code. See NEMA_VG_ERR_* defines in "nema_vg_context.h" header file for the error codes.
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
uint32_t nema_vg_draw_ring(float cx, float cy, float ring_radius, float angle_start, float angle_end,
|
|
|
|
NEMA_VG_PAINT_HANDLE paint);
|
|
|
|
|
|
|
|
/** \private
|
|
|
|
* \brief Draw a filled ring with flat ending or rounded ending caps. In case of a conical gradient paint type,
|
|
|
|
* the conical gradient center should be at the center of the ring(cx, cy). In other case, where the two centers do not match,
|
|
|
|
* the ring should be drawn with NEMA_VG_QUALITY_MAXIMUM. The ring width can be set with the paint's stroke_width.
|
|
|
|
*
|
|
|
|
* \param cx The center x coordinate of the ring
|
|
|
|
* \param cy The center y coordinate of the ring
|
|
|
|
* \param ring_radius The radius of the ring
|
|
|
|
* \param angle_start The angle in degrees of the ring
|
|
|
|
* \param angle_end The angle in degrees that ends this ring
|
|
|
|
* \param paint The paint to draw
|
|
|
|
* \param has_caps 1 For caps 0 for flat ending
|
|
|
|
|
|
|
|
* \return Error code. See NEMA_VG_ERR_* defines in "nema_vg_context.h" header file for the error codes.
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
uint32_t nema_vg_draw_ring_generic(float cx, float cy, float ring_radius, float angle_start, float angle_end,
|
|
|
|
NEMA_VG_PAINT_HANDLE paint, uint8_t has_caps);
|
|
|
|
|
|
|
|
|
|
|
|
/** \brief Returns the minimum and maximum values for the coordinates that
|
|
|
|
* can be handled by the underlying hardware
|
|
|
|
*
|
|
|
|
* \param min_coord Minimum coordinate (x or y) value (pointer)
|
|
|
|
* \param max_coord Maximum coordinate (x or y) value (pointer)
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
void nema_vg_get_coord_limits(float *min_coord, float *max_coord);
|
|
|
|
|
|
|
|
|
|
|
|
/** \brief Disables tsvg features from rendering. Should be set before
|
|
|
|
* nema_vg_draw_tsvg()
|
|
|
|
*
|
|
|
|
* \param feature feature to be disabled
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
void nema_vg_tsvg_disable_feature(uint32_t feature);
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#endif //__NEMA_VG_H__
|