diff options
Diffstat (limited to 'src/cairo-evas-gl.h')
-rwxr-xr-x | src/cairo-evas-gl.h | 253 |
1 files changed, 253 insertions, 0 deletions
diff --git a/src/cairo-evas-gl.h b/src/cairo-evas-gl.h new file mode 100755 index 000000000..bfd93ba94 --- /dev/null +++ b/src/cairo-evas-gl.h @@ -0,0 +1,253 @@ +/* Cairo - a vector graphics library with display and print output + * + * Copyright © 2009 Eric Anholt + * Copyright © 2009 Chris Wilson + * + * This library is free software; you can redistribute it and/or + * modify it either under the terms of the GNU Lesser General Public + * License version 2.1 as published by the Free Software Foundation + * (the "LGPL") or, at your option, under the terms of the Mozilla + * Public License Version 1.1 (the "MPL"). If you do not alter this + * notice, a recipient may use your version of this file under either + * the MPL or the LGPL. + * + * You should have received a copy of the LGPL along with this library + * in the file COPYING-LGPL-2.1; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA + * You should have received a copy of the MPL along with this library + * in the file COPYING-MPL-1.1 + * + * The contents of this file are subject to the Mozilla Public License + * Version 1.1 (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.mozilla.org/MPL/ + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY + * OF ANY KIND, either express or implied. See the LGPL or the MPL for + * the specific language governing rights and limitations. + * + * The Original Code is the cairo graphics library. + * + * The Initial Developer of the Original Code is Eric Anholt. + */ + +#ifndef CAIRO_EVAS_GL_H +#define CAIRO_EVAS_GL_H + +#include "cairo.h" + +#if CAIRO_HAS_EVASGL_SURFACE + +CAIRO_BEGIN_DECLS + +#include <Evas_GL.h> + +/** + * @addtogroup CAPI_CAIRO_EVAS_GL_MODULE + * @{ + */ + +/* Evas_GL.h does not define GLchar */ +typedef char GLchar; +#ifndef GL_DRAW_FRAMEBUFFER +#define GL_DRAW_FRAMEBUFFER 0x8CA9 +#endif + +#ifndef GL_READ_FRAMEBUFFER +#define GL_READ_FRAMEBUFFER 0x8CA8 +#endif + +#ifndef GL_BACK_LEFT +#define GL_BACK_LEFT 0x402 +#endif + +#ifndef GL_DEPTH_STENCIL +#define GL_DEPTH_STENCIL 0x84F9 +#endif + +#ifndef GL_DEPTH24_STENCIL8 +#define GL_DEPTH24_STENCIL8 0x88F0 +#endif + +#ifndef GL_MAX_SAMPLES +#define GL_MAX_SAMPLES 0x8D57 +#endif + +#ifndef GL_DEPTH_STENCIL_ATTACHMENT +#define GL_DEPTH_STENCIL_ATTACHMENT 0x821A +#endif + +/* Cairo-gl API, which is Open-source, can be used at the Cairo_EvasGL backend */ + +/** + * @brief Create a cairo GL surface using the device as the underlying rendering system. + * + * @since_tizen 2.3.1 + * + * @param[in] device The given cairo_device_t represents the driver interface to underlying rendering system + * @param[in] content Type of content in the surface + * @param[in] width Width of the surface, in pixels + * @param[in] height Height of the surface, in pixels + * + * @return The created surface or NULL on failure + * The error value on failure can be retrieved with cairo_status(). + */ + +cairo_public cairo_surface_t * +cairo_gl_surface_create (cairo_device_t *device, + cairo_content_t content, + int width, int height); + +/** + * @brief Create a cairo GL surface using the texture as the render target, and the device as the underlying rendering system.\n + * The content must match the format of the texture\n + * CAIRO_CONTENT_ALPHA <-> GL_ALPHA\n + * CAIRO_CONTENT_COLOR <-> GL_RGB/GL_BGR\n + * CAIRO_CONTENT_COLOR_ALPHA <-> GL_RGBA/GL_BGRA\n + * + * @since_tizen 2.3.1 + * + * @param[in] abstract_device The given cairo_device_t represents the driver interface to underlying rendering system + * @param[in] content Type of content in the surface + * @param[in] tex Name of texture to use for storage of surface pixels + * @param[in] width Width of the surface, in pixels + * @param[in] height Height of the surface, in pixels + * + * @return The created surface or NULL on failure + * The error value on failure can be retrieved with cairo_status(). + */ + +cairo_public cairo_surface_t * +cairo_gl_surface_create_for_texture (cairo_device_t *abstract_device, + cairo_content_t content, + unsigned int tex, + int width, int height); + +/** + * @brief Returns the width of given cairo surface object + * + * @since_tizen 2.3.1 + * + * @param[in] abstract_surface The given cairo_surface_t object + * + * @return the surface width or NULL on failure + * The error value on failure can be retrieved with cairo_status(). + */ + +cairo_public int +cairo_gl_surface_get_width (cairo_surface_t *abstract_surface); + +/** + * @brief Returns the height of given cairo surface object + * + * @since_tizen 2.3.1 + * + * @param[in] abstract_surface The given cairo_surface_t object + * + * @return the surface height or NULL on failure + * The error value on failure can be retrieved with cairo_status(). + */ + +cairo_public int +cairo_gl_surface_get_height (cairo_surface_t *abstract_surface); + +/** + * @brief Cairo can be used in multithreaded environment.\n + * By default, cairo switches out the current GL context after each draw finishes.\n + * This API tells cairo not to switch GL context if no other thread uses cairo for rendering.\n + * In carefully designed application, there should be a single, dedicated rendering thread.\n + * + * @since_tizen 2.3.1 + * + * @param[in] device The given cairo_device structure for the interface to underlying rendering system + * @param[in] thread_aware Set this value as FALSE to choose non-thread-aware mode + */ + +cairo_public void +cairo_gl_device_set_thread_aware (cairo_device_t *device, + cairo_bool_t thread_aware); + +/** + * @brief Creates and returns a new cairo_device structure for interface to underlying rendering system. + * + * @since_tizen 2.3.1 + * + * @param[in] evas_gl The given Evas_gl object + * @param[in] evas_context The given Evas GL Context object + * + * @return The created cairo_device structure, or an error status on failure. + * The error value can be retrieved with cairo_device_status(). + * + * @see evas_gl_new + * @see evas_gl_context_create + * @see cairo_gl_surface_create_for_evas_gl + */ + +cairo_public cairo_device_t * +cairo_evas_gl_device_create (Evas_GL *evas_gl, + Evas_GL_Context *evas_context); + +/** + * @brief Creates and returns a new cairo_surface structure for representing Evas_GL_Surface object that cairo can render to. + * + * @since_tizen 2.3.1 + * + * @param[in] device The given cairo_device structure for the interface to underlying rendering system + * @param[in] evas_surface The given Evas_GL_Surface object for GL Rendering + * @param[in] evas_config The pixel format and configuration of the rendering surface + * @param[in] width The width of the surface + * @param[in] height The height of the surface + * + * @return The created cairo_surface structure, or an error status on failure + * The error value can be retrieved with cairo_surface_status(). + * + * @see cairo_evas_gl_device_create + * @see evas_gl_surface_create + * @see evas_gl_config_new + */ + +cairo_public cairo_surface_t * +cairo_gl_surface_create_for_evas_gl (cairo_device_t *device, + Evas_GL_Surface *evas_surface, + Evas_GL_Config *evas_config, + int width, + int height); + +/** + * @brief Returns the underlying Evas_GL object used to create cairo device object + * + * @since_tizen 2.3.1 + * + * @param[in] device The given cairo_device_t represents the driver interface to underlying rendering system + * + * @return The created Evas_GL object or NULL on failure + * The error value on failure can be retrieved with cairo_status(). + */ + +cairo_public Evas_GL * +cairo_evas_gl_device_get_gl (cairo_device_t *device); + +/** + * @brief Returns the underlying Evas_GL_Context object used to create cairo device object. + * + * @since_tizen 2.3.1 + * + * @param[in] device The given cairo_device_t represents the driver interface to underlying rendering system + * + * @return The created Evas_GL_Context object or NULL on failure + * The error value on failure can be retrieved with cairo_status(). + */ + +cairo_public Evas_GL_Context * +cairo_evas_gl_device_get_context (cairo_device_t *device); + +/** + * @} + */ + +CAIRO_END_DECLS +#else /* CAIRO_HAS_EVASGL_SURFACE */ +# error Cairo was not compiled with support for the Evas GL backend +#endif /* CAIRO_HAS_EVASGL_SURFACE */ + +#endif /* CAIRO_EVAS_GL_H */ |