diff options
Diffstat (limited to 'cogl/cogl/cogl-buffer.h')
-rw-r--r-- | cogl/cogl/cogl-buffer.h | 328 |
1 files changed, 0 insertions, 328 deletions
diff --git a/cogl/cogl/cogl-buffer.h b/cogl/cogl/cogl-buffer.h deleted file mode 100644 index 4dc1f5744..000000000 --- a/cogl/cogl/cogl-buffer.h +++ /dev/null @@ -1,328 +0,0 @@ -/* - * Cogl - * - * A Low Level GPU Graphics and Utilities API - * - * Copyright (C)2010 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: - * Damien Lespiau <damien.lespiau@intel.com> - * Robert Bragg <robert@linux.intel.com> - */ - -#if !defined(__COGL_H_INSIDE__) && !defined(COGL_COMPILATION) -#error "Only <cogl/cogl.h> can be included directly." -#endif - -#ifndef __COGL_BUFFER_H__ -#define __COGL_BUFFER_H__ - -#include <cogl/cogl-types.h> - -G_BEGIN_DECLS - -/** - * SECTION:cogl-buffer - * @short_description: Common buffer functions, including data upload APIs - * @stability: unstable - * - * The CoglBuffer API provides a common interface to manipulate - * buffers that have been allocated either via cogl_pixel_buffer_new() - * or cogl_attribute_buffer_new(). The API allows you to upload data - * to these buffers and define usage hints that help Cogl manage your - * buffer optimally. - * - * Data can either be uploaded by supplying a pointer and size so Cogl - * can copy your data, or you can mmap() a CoglBuffer and then you can - * copy data to the buffer directly. - * - * One of the most common uses for CoglBuffers is to upload texture - * data asynchronously since the ability to mmap the buffers into - * the CPU makes it possible for another thread to handle the IO - * of loading an image file and unpacking it into the mapped buffer - * without blocking other Cogl operations. - */ - -#if defined(__COGL_H_INSIDE__) && !defined(COGL_ENABLE_MUTTER_API) && \ - !defined(COGL_GIR_SCANNING) -/* For the public C api we typedef interface types as void to avoid needing - * lots of casting in code and instead we will rely on runtime type checking - * for these objects. */ -typedef void CoglBuffer; -#else -typedef struct _CoglBuffer CoglBuffer; -#define COGL_BUFFER(buffer) ((CoglBuffer *)(buffer)) -#endif - -#define COGL_BUFFER_ERROR (_cogl_buffer_error_domain ()) - -/** - * CoglBufferError: - * @COGL_BUFFER_ERROR_MAP: A buffer could not be mapped either - * because the feature isn't supported or because a system - * limitation was hit. - * - * Error enumeration for #CoglBuffer - * - * Stability: unstable - */ -typedef enum /*< prefix=COGL_BUFFER_ERROR >*/ -{ - COGL_BUFFER_ERROR_MAP -} CoglBufferError; - -uint32_t -_cogl_buffer_error_domain (void); - -/** - * cogl_is_buffer: - * @object: a buffer object - * - * Checks whether @buffer is a buffer object. - * - * Return value: %TRUE if the handle is a CoglBuffer, and %FALSE otherwise - * - * Since: 1.2 - * Stability: unstable - */ -COGL_EXPORT gboolean -cogl_is_buffer (void *object); - -/** - * cogl_buffer_get_size: - * @buffer: a buffer object - * - * Retrieves the size of buffer - * - * Return value: the size of the buffer in bytes - * - * Since: 1.2 - * Stability: unstable - */ -COGL_EXPORT unsigned int -cogl_buffer_get_size (CoglBuffer *buffer); - -/** - * CoglBufferUpdateHint: - * @COGL_BUFFER_UPDATE_HINT_STATIC: the buffer will not change over time - * @COGL_BUFFER_UPDATE_HINT_DYNAMIC: the buffer will change from time to time - * @COGL_BUFFER_UPDATE_HINT_STREAM: the buffer will be used once or a couple of - * times - * - * The update hint on a buffer allows the user to give some detail on how often - * the buffer data is going to be updated. - * - * Since: 1.2 - * Stability: unstable - */ -typedef enum /*< prefix=COGL_BUFFER_UPDATE_HINT >*/ -{ - COGL_BUFFER_UPDATE_HINT_STATIC, - COGL_BUFFER_UPDATE_HINT_DYNAMIC, - COGL_BUFFER_UPDATE_HINT_STREAM -} CoglBufferUpdateHint; - -/** - * cogl_buffer_set_update_hint: - * @buffer: a buffer object - * @hint: the new hint - * - * Sets the update hint on a buffer. See #CoglBufferUpdateHint for a description - * of the available hints. - * - * Since: 1.2 - * Stability: unstable - */ -COGL_EXPORT void -cogl_buffer_set_update_hint (CoglBuffer *buffer, - CoglBufferUpdateHint hint); - -/** - * cogl_buffer_get_update_hint: - * @buffer: a buffer object - * - * Retrieves the update hints set using cogl_buffer_set_update_hint() - * - * Return value: the #CoglBufferUpdateHint currently used by the buffer - * - * Since: 1.2 - * Stability: unstable - */ -COGL_EXPORT CoglBufferUpdateHint -cogl_buffer_get_update_hint (CoglBuffer *buffer); - -/** - * CoglBufferAccess: - * @COGL_BUFFER_ACCESS_READ: the buffer will be read - * @COGL_BUFFER_ACCESS_WRITE: the buffer will written to - * @COGL_BUFFER_ACCESS_READ_WRITE: the buffer will be used for both reading and - * writing - * - * The access hints for cogl_buffer_set_update_hint() - * - * Since: 1.2 - * Stability: unstable - */ -typedef enum /*< prefix=COGL_BUFFER_ACCESS >*/ -{ - COGL_BUFFER_ACCESS_READ = 1 << 0, - COGL_BUFFER_ACCESS_WRITE = 1 << 1, - COGL_BUFFER_ACCESS_READ_WRITE = COGL_BUFFER_ACCESS_READ | COGL_BUFFER_ACCESS_WRITE -} CoglBufferAccess; - - -/** - * CoglBufferMapHint: - * @COGL_BUFFER_MAP_HINT_DISCARD: Tells Cogl that you plan to replace - * all the buffer's contents. When this flag is used to map a - * buffer, the entire contents of the buffer become undefined, even - * if only a subregion of the buffer is mapped. - * @COGL_BUFFER_MAP_HINT_DISCARD_RANGE: Tells Cogl that you plan to - * replace all the contents of the mapped region. The contents of - * the region specified are undefined after this flag is used to - * map a buffer. - * - * Hints to Cogl about how you are planning to modify the data once it - * is mapped. - * - * Since: 1.4 - * Stability: unstable - */ -typedef enum /*< prefix=COGL_BUFFER_MAP_HINT >*/ -{ - COGL_BUFFER_MAP_HINT_DISCARD = 1 << 0, - COGL_BUFFER_MAP_HINT_DISCARD_RANGE = 1 << 1 -} CoglBufferMapHint; - -/** - * cogl_buffer_map: - * @buffer: a buffer object - * @access: how the mapped buffer will be used by the application - * @hints: A mask of #CoglBufferMapHint<!-- -->s that tell Cogl how - * the data will be modified once mapped. - * - * Maps the buffer into the application address space for direct - * access. This is equivalent to calling cogl_buffer_map_range() with - * zero as the offset and the size of the entire buffer as the size. - * - * It is strongly recommended that you pass - * %COGL_BUFFER_MAP_HINT_DISCARD as a hint if you are going to replace - * all the buffer's data. This way if the buffer is currently being - * used by the GPU then the driver won't have to stall the CPU and - * wait for the hardware to finish because it can instead allocate a - * new buffer to map. - * - * The behaviour is undefined if you access the buffer in a way - * conflicting with the @access mask you pass. It is also an error to - * release your last reference while the buffer is mapped. - * - * Return value: (transfer none): A pointer to the mapped memory or - * %NULL is the call fails - * - * Since: 1.2 - * Stability: unstable - */ -COGL_EXPORT void * -cogl_buffer_map (CoglBuffer *buffer, - CoglBufferAccess access, - CoglBufferMapHint hints); - -/** - * cogl_buffer_map_range: - * @buffer: a buffer object - * @offset: Offset within the buffer to start the mapping - * @size: The size of data to map - * @access: how the mapped buffer will be used by the application - * @hints: A mask of #CoglBufferMapHint<!-- -->s that tell Cogl how - * the data will be modified once mapped. - * @error: A #GError for catching exceptional errors - * - * Maps a sub-region of the buffer into the application's address space - * for direct access. - * - * It is strongly recommended that you pass - * %COGL_BUFFER_MAP_HINT_DISCARD as a hint if you are going to replace - * all the buffer's data. This way if the buffer is currently being - * used by the GPU then the driver won't have to stall the CPU and - * wait for the hardware to finish because it can instead allocate a - * new buffer to map. You can pass - * %COGL_BUFFER_MAP_HINT_DISCARD_RANGE instead if you want the - * regions outside of the mapping to be retained. - * - * The behaviour is undefined if you access the buffer in a way - * conflicting with the @access mask you pass. It is also an error to - * release your last reference while the buffer is mapped. - * - * Return value: (transfer none): A pointer to the mapped memory or - * %NULL is the call fails - * - * Since: 2.0 - * Stability: unstable - */ -COGL_EXPORT void * -cogl_buffer_map_range (CoglBuffer *buffer, - size_t offset, - size_t size, - CoglBufferAccess access, - CoglBufferMapHint hints, - GError **error); - -/** - * cogl_buffer_unmap: - * @buffer: a buffer object - * - * Unmaps a buffer previously mapped by cogl_buffer_map(). - * - * Since: 1.2 - * Stability: unstable - */ -COGL_EXPORT void -cogl_buffer_unmap (CoglBuffer *buffer); - -/** - * cogl_buffer_set_data: - * @buffer: a buffer object - * @offset: destination offset (in bytes) in the buffer - * @data: a pointer to the data to be copied into the buffer - * @size: number of bytes to copy - * - * Updates part of the buffer with new data from @data. Where to put this new - * data is controlled by @offset and @offset + @data should be less than the - * buffer size. - * - * Return value: %TRUE is the operation succeeded, %FALSE otherwise - * - * Since: 1.2 - * Stability: unstable - */ -COGL_EXPORT gboolean -cogl_buffer_set_data (CoglBuffer *buffer, - size_t offset, - const void *data, - size_t size); - -G_END_DECLS - -#endif /* __COGL_BUFFER_H__ */ |