diff options
Diffstat (limited to 'cogl/cogl-gles2.h')
-rw-r--r-- | cogl/cogl-gles2.h | 420 |
1 files changed, 0 insertions, 420 deletions
diff --git a/cogl/cogl-gles2.h b/cogl/cogl-gles2.h deleted file mode 100644 index 84c9ba15..00000000 --- a/cogl/cogl-gles2.h +++ /dev/null @@ -1,420 +0,0 @@ -/* - * Cogl - * - * A Low Level GPU Graphics and Utilities API - * - * Copyright (C) 2011 Collabora Ltd. - * Copyright (C) 2012 Intel Corporation. - * - * Permission is hereby granted, free of charge, to any person - * obtaining a copy of this software and associated documentation - * files (the "Software"), to deal in the Software without - * restriction, including without limitation the rights to use, copy, - * modify, merge, publish, distribute, sublicense, and/or sell copies - * of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS - * 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. - * - * Authors: - * Tomeu Vizoso <tomeu.vizoso@collabora.com> - * Robert Bragg <robert@linux.intel.com> - * - */ - -#ifndef __COGL_GLES2_H__ -#define __COGL_GLES2_H__ - -/* NB: cogl-gles2.h is a top-level header that can be included directly - * but we want to be careful not to define __COGL_H_INSIDE__ when this - * is included internally while building Cogl itself since - * __COGL_H_INSIDE__ is used in headers to guard public vs private - * api definitions - */ -#ifndef COGL_COMPILATION - -/* Note: When building Cogl .gir we explicitly define - * __COGL_H_INSIDE__ */ -#ifndef __COGL_H_INSIDE__ -#define __COGL_H_INSIDE__ -#define __COGL_MUST_UNDEF_COGL_H_INSIDE__ -#endif - -#endif /* COGL_COMPILATION */ - -#include <cogl/cogl-defines.h> -#include <cogl/cogl-context.h> -#include <cogl/cogl-framebuffer.h> -#include <cogl/cogl-texture.h> -#include <cogl/cogl-texture-2d.h> - -/* CoglGLES2Vtable depends on GLES 2.0 typedefs being available but we - * want to be careful that the public api doesn't expose arbitrary - * system GL headers as part of the Cogl API so although when building - * internally we consistently refer to the system headers to avoid - * conflicts we only expose the minimal set of GLES 2.0 types and enums - * publicly. - */ -#ifdef COGL_COMPILATION -#include "cogl-gl-header.h" -#else -#include <cogl/cogl-gles2-types.h> -#endif - -COGL_BEGIN_DECLS - -/** - * SECTION:cogl-gles2 - * @short_description: A portable api to access OpenGLES 2.0 - * - * Cogl provides portable access to the OpenGLES api through a single - * library that is able to smooth over inconsistencies between the - * different vendor drivers for OpenGLES in a single place. - * - * The api is designed to allow Cogl to transparently implement the - * api on top of other drivers, such as OpenGL, D3D or on Cogl's own - * drawing api so even if your platform doesn't come with an - * OpenGLES 2.0 api Cogl may still be able to expose the api to your - * application. - * - * Since Cogl is a library and not an api specification it is possible - * to add OpenGLES 2.0 api features to Cogl which can immidiately - * benefit developers regardless of what platform they are running on. - * - * With this api it's possible to re-use existing OpenGLES 2.0 code - * within applications that are rendering with the Cogl API and also - * it's possible for applications that render using OpenGLES 2.0 to - * incorporate content rendered with Cogl. - * - * Applications can check for OpenGLES 2.0 api support by checking for - * %COGL_FEATURE_ID_GLES2_CONTEXT support with cogl_has_feature(). - * - * Since: 1.12 - * Stability: unstable - */ - -/** - * CoglGLES2Context: - * - * Represents an OpenGLES 2.0 api context used as a sandbox for - * OpenGLES 2.0 state. This is comparable to an EGLContext for those - * who have used OpenGLES 2.0 with EGL before. - * - * Since: 1.12 - * Stability: unstable - */ -typedef struct _CoglGLES2Context CoglGLES2Context; - -/** - * CoglGLES2Vtable: - * - * Provides function pointers for the full OpenGLES 2.0 api. The - * api must be accessed this way and not by directly calling - * symbols of any system OpenGLES 2.0 api. - * - * Since: 1.12 - * Stability: unstable - */ -typedef struct _CoglGLES2Vtable CoglGLES2Vtable; - -struct _CoglGLES2Vtable -{ - /*< private >*/ -#define COGL_EXT_BEGIN(name, \ - min_gl_major, min_gl_minor, \ - gles_availability, \ - extension_suffixes, extension_names) - -#define COGL_EXT_FUNCTION(ret, name, args) \ - ret (* name) args; - -#define COGL_EXT_END() - -#include <cogl/gl-prototypes/cogl-gles2-functions.h> - -#ifdef COGL_HAS_GTYPE_SUPPORT -#include <glib-object.h> -#endif - -#undef COGL_EXT_BEGIN -#undef COGL_EXT_FUNCTION -#undef COGL_EXT_END -}; - -#ifdef COGL_HAS_GTYPE_SUPPORT -/** - * cogl_gles2_context_get_gtype: - * - * Returns: a #GType that can be used with the GLib type system. - */ -GType cogl_gles2_context_get_gtype (void); -#endif - -uint32_t -_cogl_gles2_context_error_quark (void); - -/** - * COGL_GLES2_CONTEXT_ERROR: - * - * An error domain for runtime exceptions relating to the - * cogl_gles2_context api. - * - * Since: 2.0 - * Stability: unstable - */ -#define COGL_GLES2_CONTEXT_ERROR (_cogl_gles2_context_error_quark ()) - -/** - * CoglGLES2ContextError: - * @COGL_GLES2_CONTEXT_ERROR_UNSUPPORTED: Creating GLES2 contexts - * isn't supported. Applications should use cogl_has_feature() to - * check for the %COGL_FEATURE_ID_GLES2_CONTEXT. - * @COGL_GLES2_CONTEXT_ERROR_DRIVER: An underlying driver error - * occured. - * - * Error codes that relate to the cogl_gles2_context api. - */ -typedef enum { /*< prefix=COGL_GLES2_CONTEXT_ERROR >*/ - COGL_GLES2_CONTEXT_ERROR_UNSUPPORTED, - COGL_GLES2_CONTEXT_ERROR_DRIVER -} CoglGLES2ContextError; - -/** - * cogl_gles2_context_new: - * @ctx: A #CoglContext - * @error: A pointer to a #CoglError for returning exceptions - * - * Allocates a new OpenGLES 2.0 context that can be used to render to - * #CoglOffscreen framebuffers (Rendering to #CoglOnscreen - * framebuffers is not currently supported). - * - * To actually access the OpenGLES 2.0 api itself you need to use - * cogl_gles2_context_get_vtable(). You should not try to directly link - * to and use the symbols provided by the a system OpenGLES 2.0 - * driver. - * - * Once you have allocated an OpenGLES 2.0 context you can make it - * current using cogl_push_gles2_context(). For those familiar with - * using the EGL api, this serves a similar purpose to eglMakeCurrent. - * - * <note>Before using this api applications can check for OpenGLES 2.0 - * api support by checking for %COGL_FEATURE_ID_GLES2_CONTEXT support - * with cogl_has_feature(). This function will return %FALSE and - * return an %COGL_GLES2_CONTEXT_ERROR_UNSUPPORTED error if the - * feature isn't available.</note> - * - * Since: 2.0 - * Return value: A newly allocated #CoglGLES2Context or %NULL if there - * was an error and @error will be updated in that case. - * Stability: unstable - */ -CoglGLES2Context * -cogl_gles2_context_new (CoglContext *ctx, CoglError **error); - -/** - * cogl_gles2_context_get_vtable: - * @gles2_ctx: A #CoglGLES2Context allocated with - * cogl_gles2_context_new() - * - * Queries the OpenGLES 2.0 api function pointers that should be - * used for rendering with the given @gles2_ctx. - * - * <note>You should not try to directly link to and use the symbols - * provided by any system OpenGLES 2.0 driver.</note> - * - * Since: 2.0 - * Return value: A pointer to a #CoglGLES2Vtable providing pointers - * to functions for the full OpenGLES 2.0 api. - * Stability: unstable - */ -const CoglGLES2Vtable * -cogl_gles2_context_get_vtable (CoglGLES2Context *gles2_ctx); - -/** - * cogl_push_gles2_context: - * @ctx: A #CoglContext - * @gles2_ctx: A #CoglGLES2Context allocated with - * cogl_gles2_context_new() - * @read_buffer: A #CoglFramebuffer to access to read operations - * such as glReadPixels. (must be a #CoglOffscreen - * framebuffer currently) - * @write_buffer: A #CoglFramebuffer to access for drawing operations - * such as glDrawArrays. (must be a #CoglOffscreen - * framebuffer currently) - * @error: A pointer to a #CoglError for returning exceptions - * - * Pushes the given @gles2_ctx onto a stack associated with @ctx so - * that the OpenGLES 2.0 api can be used instead of the Cogl - * rendering apis to read and write to the specified framebuffers. - * - * Usage of the api available through a #CoglGLES2Vtable is only - * allowed between cogl_push_gles2_context() and - * cogl_pop_gles2_context() calls. - * - * If there is a runtime problem with switching over to the given - * @gles2_ctx then this function will return %FALSE and return - * an error through @error. - * - * Since: 2.0 - * Return value: %TRUE if operation was successfull or %FALSE - * otherwise and @error will be updated. - * Stability: unstable - */ -CoglBool -cogl_push_gles2_context (CoglContext *ctx, - CoglGLES2Context *gles2_ctx, - CoglFramebuffer *read_buffer, - CoglFramebuffer *write_buffer, - CoglError **error); - -/** - * cogl_pop_gles2_context: - * @ctx: A #CoglContext - * - * Restores the previously active #CoglGLES2Context if there - * were nested calls to cogl_push_gles2_context() or otherwise - * restores the ability to render with the Cogl api instead - * of OpenGLES 2.0. - * - * The behaviour is undefined if calls to cogl_pop_gles2_context() - * are not balenced with the number of corresponding calls to - * cogl_push_gles2_context(). - * - * Since: 2.0 - * Stability: unstable - */ -void -cogl_pop_gles2_context (CoglContext *ctx); - -/** - * cogl_gles2_get_current_vtable: - * - * Returns the OpenGL ES 2.0 api vtable for the currently pushed - * #CoglGLES2Context (last pushed with cogl_push_gles2_context()) or - * %NULL if no #CoglGLES2Context has been pushed. - * - * Return value: The #CoglGLES2Vtable for the currently pushed - * #CoglGLES2Context or %NULL if none has been pushed. - * Since: 2.0 - * Stability: unstable - */ -CoglGLES2Vtable * -cogl_gles2_get_current_vtable (void); - -/** - * cogl_gles2_texture_2d_new_from_handle: - * @ctx: A #CoglContext - * @gles2_ctx: A #CoglGLES2Context allocated with - * cogl_gles2_context_new() - * @handle: An OpenGL ES 2.0 texture handle created with - * glGenTextures() - * @width: Width of the texture to allocate - * @height: Height of the texture to allocate - * @format: The format of the texture - * - * Creates a #CoglTexture2D from an OpenGL ES 2.0 texture handle that - * was created within the given @gles2_ctx via glGenTextures(). The - * texture needs to have been associated with the GL_TEXTURE_2D target. - * - * <note>This interface is only intended for sharing textures to read - * from. The behaviour is undefined if the texture is modified using - * the Cogl api.</note> - * - * <note>Applications should only pass this function handles that were - * created via a #CoglGLES2Vtable or via libcogl-gles2 and not pass - * handles created directly using the system's native libGLESv2 - * api.</note> - * - * Since: 2.0 - * Stability: unstable - */ -CoglTexture2D * -cogl_gles2_texture_2d_new_from_handle (CoglContext *ctx, - CoglGLES2Context *gles2_ctx, - unsigned int handle, - int width, - int height, - CoglPixelFormat format); - -/** - * cogl_gles2_texture_get_handle: - * @texture: A #CoglTexture - * @handle: A return location for an OpenGL ES 2.0 texture handle - * @target: A return location for an OpenGL ES 2.0 texture target - * - * Gets an OpenGL ES 2.0 texture handle for a #CoglTexture that can - * then be referenced by a #CoglGLES2Context. As well as returning - * a texture handle the texture's target (such as GL_TEXTURE_2D) is - * also returned. - * - * If the #CoglTexture can not be shared with a #CoglGLES2Context then - * this function will return %FALSE. - * - * This api does not affect the lifetime of the CoglTexture and you - * must take care not to reference the returned handle after the - * original texture has been freed. - * - * <note>This interface is only intended for sharing textures to read - * from. The behaviour is undefined if the texture is modified by a - * GLES2 context.</note> - * - * <note>This function will only return %TRUE for low-level - * #CoglTexture<!-- -->s such as #CoglTexture2D or #CoglTexture3D but - * not for high level meta textures such as - * #CoglTexture2DSliced</note> - * - * <note>The handle returned should not be passed directly to a system - * OpenGL ES 2.0 library, the handle is only intended to be used via - * a #CoglGLES2Vtable or via libcogl-gles2.</note> - * - * Return value: %TRUE if a handle and target could be returned - * otherwise %FALSE is returned. - * Since: 2.0 - * Stability: unstable - */ -CoglBool -cogl_gles2_texture_get_handle (CoglTexture *texture, - unsigned int *handle, - unsigned int *target); - -/** - * cogl_is_gles2_context: - * @object: A #CoglObject pointer - * - * Gets whether the given object references a #CoglGLES2Context. - * - * Return value: %TRUE if the object references a #CoglGLES2Context - * and %FALSE otherwise. - * Since: 2.0 - * Stability: unstable - */ -CoglBool -cogl_is_gles2_context (void *object); - -COGL_END_DECLS - -/* The gobject introspection scanner seems to parse public headers in - * isolation which means we need to be extra careful about how we - * define and undefine __COGL_H_INSIDE__ used to detect when internal - * headers are incorrectly included by developers. In the gobject - * introspection case we have to manually define __COGL_H_INSIDE__ as - * a commandline argument for the scanner which means we must be - * careful not to undefine it in a header... - */ -#ifdef __COGL_MUST_UNDEF_COGL_H_INSIDE__ -#undef __COGL_H_INSIDE__ -#undef __COGL_MUST_UNDEF_COGL_H_INSIDE__ -#endif - -#endif /* __COGL_GLES2_H__ */ - |