2010-10-12 11:54:07 +00:00
|
|
|
/*
|
|
|
|
* Cogl
|
|
|
|
*
|
2014-02-22 01:28:54 +00:00
|
|
|
* A Low Level GPU Graphics and Utilities API
|
2010-10-12 11:54:07 +00:00
|
|
|
*
|
|
|
|
* Copyright (C) 2010 Intel Corporation.
|
|
|
|
*
|
2014-02-22 01:28:54 +00:00
|
|
|
* 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.
|
2010-10-12 11:54:07 +00:00
|
|
|
*
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* Authors:
|
|
|
|
* Robert Bragg <robert@linux.intel.com>
|
|
|
|
*/
|
|
|
|
|
2023-07-21 13:37:20 +00:00
|
|
|
#pragma once
|
|
|
|
|
2012-06-20 17:49:08 +00:00
|
|
|
#if !defined(__COGL_H_INSIDE__) && !defined(COGL_COMPILATION)
|
2010-10-12 11:54:07 +00:00
|
|
|
#error "Only <cogl/cogl.h> can be included directly."
|
|
|
|
#endif
|
|
|
|
|
2012-02-17 21:46:39 +00:00
|
|
|
/* We forward declare the CoglPrimitive type here to avoid some circular
|
|
|
|
* dependency issues with the following headers.
|
|
|
|
*/
|
|
|
|
typedef struct _CoglPrimitive CoglPrimitive;
|
|
|
|
|
2023-08-07 13:38:12 +00:00
|
|
|
#include "cogl/cogl-types.h" /* for CoglVerticesMode */
|
|
|
|
#include "cogl/cogl-attribute.h"
|
|
|
|
#include "cogl/cogl-framebuffer.h"
|
2010-10-12 11:54:07 +00:00
|
|
|
|
2013-09-02 15:02:42 +00:00
|
|
|
#include <glib-object.h>
|
|
|
|
|
2018-11-23 07:42:05 +00:00
|
|
|
G_BEGIN_DECLS
|
2010-10-12 11:54:07 +00:00
|
|
|
|
|
|
|
/**
|
2023-09-19 10:19:17 +00:00
|
|
|
* CoglPrimitive:
|
2010-10-12 11:54:07 +00:00
|
|
|
*
|
2023-09-19 10:19:17 +00:00
|
|
|
*Functions for creating, manipulating and drawing primitives
|
2010-10-12 11:54:07 +00:00
|
|
|
*/
|
|
|
|
|
2023-09-19 10:19:17 +00:00
|
|
|
#define COGL_TYPE_PRIMITIVE (cogl_primitive_get_type ())
|
2016-06-15 19:57:36 +00:00
|
|
|
|
2019-11-21 11:15:22 +00:00
|
|
|
COGL_EXPORT
|
2023-09-19 10:19:17 +00:00
|
|
|
G_DECLARE_FINAL_TYPE (CoglPrimitive,
|
|
|
|
cogl_primitive,
|
|
|
|
COGL,
|
|
|
|
PRIMITIVE,
|
|
|
|
GObject)
|
2010-10-12 11:54:07 +00:00
|
|
|
/**
|
2011-01-20 12:29:49 +00:00
|
|
|
* CoglVertexP2:
|
2010-10-12 11:54:07 +00:00
|
|
|
* @x: The x component of a position attribute
|
|
|
|
* @y: The y component of a position attribute
|
|
|
|
*
|
|
|
|
* A convenience vertex definition that can be used with
|
2012-12-31 23:26:11 +00:00
|
|
|
* cogl_primitive_new_p2().
|
2010-10-12 11:54:07 +00:00
|
|
|
*/
|
2012-12-31 16:08:12 +00:00
|
|
|
typedef struct {
|
2010-10-12 11:54:07 +00:00
|
|
|
float x, y;
|
2011-01-20 12:29:49 +00:00
|
|
|
} CoglVertexP2;
|
2010-10-12 11:54:07 +00:00
|
|
|
|
|
|
|
/**
|
2011-01-20 12:29:49 +00:00
|
|
|
* CoglVertexP3:
|
2010-10-12 11:54:07 +00:00
|
|
|
* @x: The x component of a position attribute
|
|
|
|
* @y: The y component of a position attribute
|
|
|
|
* @z: The z component of a position attribute
|
|
|
|
*
|
|
|
|
* A convenience vertex definition that can be used with
|
2012-12-31 23:26:11 +00:00
|
|
|
* cogl_primitive_new_p3().
|
2010-10-12 11:54:07 +00:00
|
|
|
*/
|
2012-12-31 16:08:12 +00:00
|
|
|
typedef struct {
|
2010-10-12 11:54:07 +00:00
|
|
|
float x, y, z;
|
2011-01-20 12:29:49 +00:00
|
|
|
} CoglVertexP3;
|
2010-10-12 11:54:07 +00:00
|
|
|
|
|
|
|
/**
|
2011-01-20 12:29:49 +00:00
|
|
|
* CoglVertexP2C4:
|
2010-10-12 11:54:07 +00:00
|
|
|
* @x: The x component of a position attribute
|
|
|
|
* @y: The y component of a position attribute
|
|
|
|
* @r: The red component of a color attribute
|
|
|
|
* @b: The green component of a color attribute
|
|
|
|
* @g: The blue component of a color attribute
|
|
|
|
* @a: The alpha component of a color attribute
|
|
|
|
*
|
|
|
|
* A convenience vertex definition that can be used with
|
2012-12-31 23:26:11 +00:00
|
|
|
* cogl_primitive_new_p2c4().
|
2010-10-12 11:54:07 +00:00
|
|
|
*/
|
2012-12-31 16:08:12 +00:00
|
|
|
typedef struct {
|
2010-10-12 11:54:07 +00:00
|
|
|
float x, y;
|
Switch use of primitive glib types to c99 equivalents
The coding style has for a long time said to avoid using redundant glib
data types such as gint or gchar etc because we feel that they make the
code look unnecessarily foreign to developers coming from outside of the
Gnome developer community.
Note: When we tried to find the historical rationale for the types we
just found that they were apparently only added for consistent syntax
highlighting which didn't seem that compelling.
Up until now we have been continuing to use some of the platform
specific type such as gint{8,16,32,64} and gsize but this patch switches
us over to using the standard c99 equivalents instead so we can further
ensure that our code looks familiar to the widest range of C developers
who might potentially contribute to Cogl.
So instead of using the gint{8,16,32,64} and guint{8,16,32,64} types this
switches all Cogl code to instead use the int{8,16,32,64}_t and
uint{8,16,32,64}_t c99 types instead.
Instead of gsize we now use size_t
For now we are not going to use the c99 _Bool type and instead we have
introduced a new CoglBool type to use instead of gboolean.
Reviewed-by: Neil Roberts <neil@linux.intel.com>
(cherry picked from commit 5967dad2400d32ca6319cef6cb572e81bf2c15f0)
2012-04-16 20:56:40 +00:00
|
|
|
uint8_t r, g, b, a;
|
2011-01-20 12:29:49 +00:00
|
|
|
} CoglVertexP2C4;
|
2010-10-12 11:54:07 +00:00
|
|
|
|
|
|
|
/**
|
2011-01-20 12:29:49 +00:00
|
|
|
* CoglVertexP3C4:
|
2010-10-12 11:54:07 +00:00
|
|
|
* @x: The x component of a position attribute
|
|
|
|
* @y: The y component of a position attribute
|
|
|
|
* @z: The z component of a position attribute
|
|
|
|
* @r: The red component of a color attribute
|
|
|
|
* @b: The green component of a color attribute
|
|
|
|
* @g: The blue component of a color attribute
|
|
|
|
* @a: The alpha component of a color attribute
|
|
|
|
*
|
|
|
|
* A convenience vertex definition that can be used with
|
2012-12-31 23:26:11 +00:00
|
|
|
* cogl_primitive_new_p3c4().
|
2010-10-12 11:54:07 +00:00
|
|
|
*/
|
2012-12-31 16:08:12 +00:00
|
|
|
typedef struct {
|
2010-10-12 11:54:07 +00:00
|
|
|
float x, y, z;
|
Switch use of primitive glib types to c99 equivalents
The coding style has for a long time said to avoid using redundant glib
data types such as gint or gchar etc because we feel that they make the
code look unnecessarily foreign to developers coming from outside of the
Gnome developer community.
Note: When we tried to find the historical rationale for the types we
just found that they were apparently only added for consistent syntax
highlighting which didn't seem that compelling.
Up until now we have been continuing to use some of the platform
specific type such as gint{8,16,32,64} and gsize but this patch switches
us over to using the standard c99 equivalents instead so we can further
ensure that our code looks familiar to the widest range of C developers
who might potentially contribute to Cogl.
So instead of using the gint{8,16,32,64} and guint{8,16,32,64} types this
switches all Cogl code to instead use the int{8,16,32,64}_t and
uint{8,16,32,64}_t c99 types instead.
Instead of gsize we now use size_t
For now we are not going to use the c99 _Bool type and instead we have
introduced a new CoglBool type to use instead of gboolean.
Reviewed-by: Neil Roberts <neil@linux.intel.com>
(cherry picked from commit 5967dad2400d32ca6319cef6cb572e81bf2c15f0)
2012-04-16 20:56:40 +00:00
|
|
|
uint8_t r, g, b, a;
|
2011-01-20 12:29:49 +00:00
|
|
|
} CoglVertexP3C4;
|
2010-10-12 11:54:07 +00:00
|
|
|
|
|
|
|
/**
|
2011-01-20 12:29:49 +00:00
|
|
|
* CoglVertexP2T2:
|
2010-10-12 11:54:07 +00:00
|
|
|
* @x: The x component of a position attribute
|
|
|
|
* @y: The y component of a position attribute
|
|
|
|
* @s: The s component of a texture coordinate attribute
|
|
|
|
* @t: The t component of a texture coordinate attribute
|
|
|
|
*
|
|
|
|
* A convenience vertex definition that can be used with
|
2012-12-31 23:26:11 +00:00
|
|
|
* cogl_primitive_new_p2t2().
|
2010-10-12 11:54:07 +00:00
|
|
|
*/
|
2012-12-31 16:08:12 +00:00
|
|
|
typedef struct {
|
2010-10-12 11:54:07 +00:00
|
|
|
float x, y;
|
|
|
|
float s, t;
|
2011-01-20 12:29:49 +00:00
|
|
|
} CoglVertexP2T2;
|
2010-10-12 11:54:07 +00:00
|
|
|
|
|
|
|
/**
|
2011-01-20 12:29:49 +00:00
|
|
|
* CoglVertexP3T2:
|
2010-10-12 11:54:07 +00:00
|
|
|
* @x: The x component of a position attribute
|
|
|
|
* @y: The y component of a position attribute
|
|
|
|
* @z: The z component of a position attribute
|
|
|
|
* @s: The s component of a texture coordinate attribute
|
|
|
|
* @t: The t component of a texture coordinate attribute
|
|
|
|
*
|
|
|
|
* A convenience vertex definition that can be used with
|
2012-12-31 23:26:11 +00:00
|
|
|
* cogl_primitive_new_p3t2().
|
2010-10-12 11:54:07 +00:00
|
|
|
*/
|
2012-12-31 16:08:12 +00:00
|
|
|
typedef struct {
|
2010-10-12 11:54:07 +00:00
|
|
|
float x, y, z;
|
|
|
|
float s, t;
|
2011-01-20 12:29:49 +00:00
|
|
|
} CoglVertexP3T2;
|
2010-10-12 11:54:07 +00:00
|
|
|
|
|
|
|
|
|
|
|
/**
|
2011-01-20 12:29:49 +00:00
|
|
|
* CoglVertexP2T2C4:
|
2010-10-12 11:54:07 +00:00
|
|
|
* @x: The x component of a position attribute
|
|
|
|
* @y: The y component of a position attribute
|
|
|
|
* @s: The s component of a texture coordinate attribute
|
|
|
|
* @t: The t component of a texture coordinate attribute
|
|
|
|
* @r: The red component of a color attribute
|
|
|
|
* @b: The green component of a color attribute
|
|
|
|
* @g: The blue component of a color attribute
|
|
|
|
* @a: The alpha component of a color attribute
|
|
|
|
*
|
|
|
|
* A convenience vertex definition that can be used with
|
2012-12-31 23:26:11 +00:00
|
|
|
* cogl_primitive_new_p3t2c4().
|
2010-10-12 11:54:07 +00:00
|
|
|
*/
|
2012-12-31 16:08:12 +00:00
|
|
|
typedef struct {
|
2010-10-12 11:54:07 +00:00
|
|
|
float x, y;
|
|
|
|
float s, t;
|
Switch use of primitive glib types to c99 equivalents
The coding style has for a long time said to avoid using redundant glib
data types such as gint or gchar etc because we feel that they make the
code look unnecessarily foreign to developers coming from outside of the
Gnome developer community.
Note: When we tried to find the historical rationale for the types we
just found that they were apparently only added for consistent syntax
highlighting which didn't seem that compelling.
Up until now we have been continuing to use some of the platform
specific type such as gint{8,16,32,64} and gsize but this patch switches
us over to using the standard c99 equivalents instead so we can further
ensure that our code looks familiar to the widest range of C developers
who might potentially contribute to Cogl.
So instead of using the gint{8,16,32,64} and guint{8,16,32,64} types this
switches all Cogl code to instead use the int{8,16,32,64}_t and
uint{8,16,32,64}_t c99 types instead.
Instead of gsize we now use size_t
For now we are not going to use the c99 _Bool type and instead we have
introduced a new CoglBool type to use instead of gboolean.
Reviewed-by: Neil Roberts <neil@linux.intel.com>
(cherry picked from commit 5967dad2400d32ca6319cef6cb572e81bf2c15f0)
2012-04-16 20:56:40 +00:00
|
|
|
uint8_t r, g, b, a;
|
2011-01-20 12:29:49 +00:00
|
|
|
} CoglVertexP2T2C4;
|
2010-10-12 11:54:07 +00:00
|
|
|
|
|
|
|
/**
|
2011-01-20 12:29:49 +00:00
|
|
|
* CoglVertexP3T2C4:
|
2010-10-12 11:54:07 +00:00
|
|
|
* @x: The x component of a position attribute
|
|
|
|
* @y: The y component of a position attribute
|
|
|
|
* @z: The z component of a position attribute
|
|
|
|
* @s: The s component of a texture coordinate attribute
|
|
|
|
* @t: The t component of a texture coordinate attribute
|
|
|
|
* @r: The red component of a color attribute
|
|
|
|
* @b: The green component of a color attribute
|
|
|
|
* @g: The blue component of a color attribute
|
|
|
|
* @a: The alpha component of a color attribute
|
|
|
|
*
|
|
|
|
* A convenience vertex definition that can be used with
|
2012-12-31 23:26:11 +00:00
|
|
|
* cogl_primitive_new_p3t2c4().
|
2010-10-12 11:54:07 +00:00
|
|
|
*/
|
2012-12-31 16:08:12 +00:00
|
|
|
typedef struct {
|
2010-10-12 11:54:07 +00:00
|
|
|
float x, y, z;
|
|
|
|
float s, t;
|
Switch use of primitive glib types to c99 equivalents
The coding style has for a long time said to avoid using redundant glib
data types such as gint or gchar etc because we feel that they make the
code look unnecessarily foreign to developers coming from outside of the
Gnome developer community.
Note: When we tried to find the historical rationale for the types we
just found that they were apparently only added for consistent syntax
highlighting which didn't seem that compelling.
Up until now we have been continuing to use some of the platform
specific type such as gint{8,16,32,64} and gsize but this patch switches
us over to using the standard c99 equivalents instead so we can further
ensure that our code looks familiar to the widest range of C developers
who might potentially contribute to Cogl.
So instead of using the gint{8,16,32,64} and guint{8,16,32,64} types this
switches all Cogl code to instead use the int{8,16,32,64}_t and
uint{8,16,32,64}_t c99 types instead.
Instead of gsize we now use size_t
For now we are not going to use the c99 _Bool type and instead we have
introduced a new CoglBool type to use instead of gboolean.
Reviewed-by: Neil Roberts <neil@linux.intel.com>
(cherry picked from commit 5967dad2400d32ca6319cef6cb572e81bf2c15f0)
2012-04-16 20:56:40 +00:00
|
|
|
uint8_t r, g, b, a;
|
2011-01-20 12:29:49 +00:00
|
|
|
} CoglVertexP3T2C4;
|
2010-10-12 11:54:07 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* cogl_primitive_new:
|
|
|
|
* @mode: A #CoglVerticesMode defining how to draw the vertices
|
|
|
|
* @n_vertices: The number of vertices to process when drawing
|
2012-12-30 18:08:50 +00:00
|
|
|
* @...: A %NULL terminated list of attributes
|
2010-10-12 11:54:07 +00:00
|
|
|
*
|
2011-01-20 19:31:53 +00:00
|
|
|
* Combines a set of #CoglAttribute<!-- -->s with a specific draw @mode
|
2010-10-12 11:54:07 +00:00
|
|
|
* and defines a vertex count so a #CoglPrimitive object can be retained and
|
|
|
|
* drawn later with no addition information required.
|
|
|
|
*
|
2011-10-25 21:34:59 +00:00
|
|
|
* The value passed as @n_vertices will simply update the
|
2012-12-31 16:12:03 +00:00
|
|
|
* #CoglPrimitive <structfield>n_vertices</structfield> property as if
|
2011-10-25 21:34:59 +00:00
|
|
|
* cogl_primitive_set_n_vertices() were called. This property defines
|
|
|
|
* the number of vertices to read when drawing.
|
|
|
|
*
|
2013-09-03 13:28:14 +00:00
|
|
|
* Return value: (transfer full): A newly allocated #CoglPrimitive object
|
2010-10-12 11:54:07 +00:00
|
|
|
*/
|
2019-11-21 11:15:22 +00:00
|
|
|
COGL_EXPORT CoglPrimitive *
|
2010-10-12 11:54:07 +00:00
|
|
|
cogl_primitive_new (CoglVerticesMode mode,
|
|
|
|
int n_vertices,
|
|
|
|
...);
|
|
|
|
|
2013-09-03 14:39:50 +00:00
|
|
|
/**
|
2016-06-15 19:57:36 +00:00
|
|
|
* cogl_primitive_new_with_attributes: (skip)
|
2013-09-03 14:39:50 +00:00
|
|
|
* @mode: A #CoglVerticesMode defining how to draw the vertices
|
|
|
|
* @n_vertices: The number of vertices to process when drawing
|
|
|
|
* @attributes: An array of CoglAttribute
|
|
|
|
* @n_attributes: The number of attributes
|
|
|
|
*
|
|
|
|
* Combines a set of #CoglAttribute<!-- -->s with a specific draw @mode
|
|
|
|
* and defines a vertex count so a #CoglPrimitive object can be retained and
|
|
|
|
* drawn later with no addition information required.
|
|
|
|
*
|
|
|
|
* The value passed as @n_vertices will simply update the
|
|
|
|
* #CoglPrimitive <structfield>n_vertices</structfield> property as if
|
|
|
|
* cogl_primitive_set_n_vertices() were called. This property defines
|
|
|
|
* the number of vertices to read when drawing.
|
|
|
|
*
|
|
|
|
* Return value: (transfer full): A newly allocated #CoglPrimitive object
|
|
|
|
*/
|
2019-11-21 11:15:22 +00:00
|
|
|
COGL_EXPORT CoglPrimitive *
|
2011-03-03 01:02:12 +00:00
|
|
|
cogl_primitive_new_with_attributes (CoglVerticesMode mode,
|
|
|
|
int n_vertices,
|
|
|
|
CoglAttribute **attributes,
|
|
|
|
int n_attributes);
|
2010-10-12 11:54:07 +00:00
|
|
|
|
2010-11-04 16:42:11 +00:00
|
|
|
/**
|
2016-06-15 19:57:36 +00:00
|
|
|
* cogl_primitive_new_p2: (skip)
|
2012-02-06 17:08:58 +00:00
|
|
|
* @context: A #CoglContext
|
2010-11-04 16:42:11 +00:00
|
|
|
* @mode: A #CoglVerticesMode defining how to draw the vertices
|
2011-10-25 21:34:59 +00:00
|
|
|
* @n_vertices: The number of vertices to read from @data and also
|
|
|
|
* the number of vertices to read when later drawing.
|
2013-09-03 13:28:14 +00:00
|
|
|
* @data: (array length=n_vertices): (type Cogl.VertexP2): An array
|
|
|
|
* of #CoglVertexP2 vertices
|
2010-11-04 16:42:11 +00:00
|
|
|
*
|
|
|
|
* Provides a convenient way to describe a primitive, such as a single
|
|
|
|
* triangle strip or a triangle fan, that will internally allocate the
|
2011-03-02 15:01:41 +00:00
|
|
|
* necessary #CoglAttributeBuffer storage, describe the position
|
2011-01-20 19:31:53 +00:00
|
|
|
* attribute with a #CoglAttribute and upload your data.
|
2010-11-04 16:42:11 +00:00
|
|
|
*
|
|
|
|
* For example to draw a convex polygon you can do:
|
|
|
|
* |[
|
2011-01-20 12:29:49 +00:00
|
|
|
* CoglVertexP2 triangle[] =
|
2010-11-04 16:42:11 +00:00
|
|
|
* {
|
|
|
|
* { 0, 300 },
|
|
|
|
* { 150, 0, },
|
|
|
|
* { 300, 300 }
|
|
|
|
* };
|
|
|
|
* prim = cogl_primitive_new_p2 (COGL_VERTICES_MODE_TRIANGLE_FAN,
|
|
|
|
* 3, triangle);
|
|
|
|
* cogl_primitive_draw (prim);
|
|
|
|
* ]|
|
|
|
|
*
|
2011-10-25 21:34:59 +00:00
|
|
|
* The value passed as @n_vertices is initially used to determine how
|
|
|
|
* much can be read from @data but it will also be used to update the
|
2012-12-31 16:12:03 +00:00
|
|
|
* #CoglPrimitive <structfield>n_vertices</structfield> property as if
|
2011-10-25 21:34:59 +00:00
|
|
|
* cogl_primitive_set_n_vertices() were called. This property defines
|
|
|
|
* the number of vertices to read when drawing.
|
|
|
|
|
2010-11-04 16:42:11 +00:00
|
|
|
* <note>The primitive API doesn't support drawing with sliced
|
|
|
|
* textures (since switching between slices implies changing state and
|
2022-03-31 16:11:44 +00:00
|
|
|
* so that implies multiple primitives need to be submitted). If your
|
|
|
|
* hardware doesn't support non-power of two textures (For example you
|
|
|
|
* are using GLES 1.1) then you will need to make sure your assets are
|
|
|
|
* resized to a power-of-two size (though they don't have to be square)
|
|
|
|
* </note>
|
2010-11-04 16:42:11 +00:00
|
|
|
*
|
2013-09-03 13:28:14 +00:00
|
|
|
* Return value: (transfer full): A newly allocated #CoglPrimitive
|
2023-09-19 10:19:17 +00:00
|
|
|
* with a reference of 1. This can be freed using g_object_unref().
|
2010-11-04 16:42:11 +00:00
|
|
|
*/
|
2019-11-21 11:15:22 +00:00
|
|
|
COGL_EXPORT CoglPrimitive *
|
2012-02-06 17:08:58 +00:00
|
|
|
cogl_primitive_new_p2 (CoglContext *context,
|
|
|
|
CoglVerticesMode mode,
|
2010-11-04 16:42:11 +00:00
|
|
|
int n_vertices,
|
2011-01-20 12:29:49 +00:00
|
|
|
const CoglVertexP2 *data);
|
2010-11-04 16:42:11 +00:00
|
|
|
|
2010-11-04 13:23:23 +00:00
|
|
|
/**
|
2016-06-15 19:57:36 +00:00
|
|
|
* cogl_primitive_new_p3: (skip)
|
2012-02-06 17:08:58 +00:00
|
|
|
* @context: A #CoglContext
|
2010-11-04 13:23:23 +00:00
|
|
|
* @mode: A #CoglVerticesMode defining how to draw the vertices
|
2011-10-25 21:34:59 +00:00
|
|
|
* @n_vertices: The number of vertices to read from @data and also
|
|
|
|
* the number of vertices to read when later drawing.
|
2013-09-03 13:28:14 +00:00
|
|
|
* @data: (array length=n_vertices): (type Cogl.VertexP3): An array of
|
|
|
|
* #CoglVertexP3 vertices
|
2010-11-04 13:23:23 +00:00
|
|
|
*
|
|
|
|
* Provides a convenient way to describe a primitive, such as a single
|
|
|
|
* triangle strip or a triangle fan, that will internally allocate the
|
2011-03-02 15:01:41 +00:00
|
|
|
* necessary #CoglAttributeBuffer storage, describe the position
|
2011-01-20 19:31:53 +00:00
|
|
|
* attribute with a #CoglAttribute and upload your data.
|
2010-11-04 13:23:23 +00:00
|
|
|
*
|
|
|
|
* For example to draw a convex polygon you can do:
|
|
|
|
* |[
|
2011-01-20 12:29:49 +00:00
|
|
|
* CoglVertexP3 triangle[] =
|
2010-11-04 13:23:23 +00:00
|
|
|
* {
|
|
|
|
* { 0, 300, 0 },
|
|
|
|
* { 150, 0, 0 },
|
|
|
|
* { 300, 300, 0 }
|
|
|
|
* };
|
|
|
|
* prim = cogl_primitive_new_p3 (COGL_VERTICES_MODE_TRIANGLE_FAN,
|
|
|
|
* 3, triangle);
|
|
|
|
* cogl_primitive_draw (prim);
|
|
|
|
* ]|
|
|
|
|
*
|
2011-10-25 21:34:59 +00:00
|
|
|
* The value passed as @n_vertices is initially used to determine how
|
|
|
|
* much can be read from @data but it will also be used to update the
|
2012-12-31 16:12:03 +00:00
|
|
|
* #CoglPrimitive <structfield>n_vertices</structfield> property as if
|
2011-10-25 21:34:59 +00:00
|
|
|
* cogl_primitive_set_n_vertices() were called. This property defines
|
|
|
|
* the number of vertices to read when drawing.
|
|
|
|
|
2010-11-04 13:23:23 +00:00
|
|
|
* <note>The primitive API doesn't support drawing with sliced
|
|
|
|
* textures (since switching between slices implies changing state and
|
2022-03-31 16:11:44 +00:00
|
|
|
* so that implies multiple primitives need to be submitted). If your
|
|
|
|
* hardware doesn't support non-power of two textures (For example you
|
|
|
|
* are using GLES 1.1) then you will need to make sure your assets are
|
|
|
|
* resized to a power-of-two size (though they don't have to be square)
|
|
|
|
* </note>
|
2010-11-04 13:23:23 +00:00
|
|
|
*
|
2013-09-03 13:28:14 +00:00
|
|
|
* Return value: (transfer full): A newly allocated #CoglPrimitive
|
2023-09-19 10:19:17 +00:00
|
|
|
* with a reference of 1. This can be freed using g_object_unref().
|
2010-11-04 13:23:23 +00:00
|
|
|
*/
|
2019-11-21 11:15:22 +00:00
|
|
|
COGL_EXPORT CoglPrimitive *
|
2012-02-06 17:08:58 +00:00
|
|
|
cogl_primitive_new_p3 (CoglContext *context,
|
|
|
|
CoglVerticesMode mode,
|
2010-11-04 13:23:23 +00:00
|
|
|
int n_vertices,
|
2011-01-20 12:29:49 +00:00
|
|
|
const CoglVertexP3 *data);
|
primitive: Adds convenience constructors
This adds convenience primitive constructors named like:
cogl_primitive_new_p3 or
cogl_primitive_new_p3c4 or
cogl_primitive_new_p3t2c4
where the letters correspond to the interleved vertex attributes layouts
such as CoglP3Vertex which is a struct with 3 float x,y,z members for
the [p]osition, or CoglP3T2C4Vertex which is a struct with 3 float x,y,z
members for the [p]osition, 2 float s,t members for the [t]exture
coordinates and 4 unsigned byte r,g,b,a members for the [c]olor.
The hope is that people will find these convenient enough to replace
cogl_polygon.
2010-10-12 14:48:31 +00:00
|
|
|
|
2010-11-04 13:23:23 +00:00
|
|
|
/**
|
2016-06-15 19:57:36 +00:00
|
|
|
* cogl_primitive_new_p2c4: (skip)
|
2012-02-06 17:08:58 +00:00
|
|
|
* @context: A #CoglContext
|
2010-11-04 13:23:23 +00:00
|
|
|
* @mode: A #CoglVerticesMode defining how to draw the vertices
|
2011-10-25 21:34:59 +00:00
|
|
|
* @n_vertices: The number of vertices to read from @data and also
|
|
|
|
* the number of vertices to read when later drawing.
|
2013-09-03 13:28:14 +00:00
|
|
|
* @data: (array length=n_vertices): (type Cogl.VertexP2C4): An array
|
|
|
|
* of #CoglVertexP2C4 vertices
|
2010-11-04 13:23:23 +00:00
|
|
|
*
|
|
|
|
* Provides a convenient way to describe a primitive, such as a single
|
|
|
|
* triangle strip or a triangle fan, that will internally allocate the
|
2011-03-02 15:01:41 +00:00
|
|
|
* necessary #CoglAttributeBuffer storage, describe the position
|
2011-01-20 19:31:53 +00:00
|
|
|
* and color attributes with #CoglAttribute<!-- -->s and upload
|
2010-11-04 13:23:23 +00:00
|
|
|
* your data.
|
|
|
|
*
|
|
|
|
* For example to draw a convex polygon with a linear gradient you
|
|
|
|
* can do:
|
|
|
|
* |[
|
2011-01-20 12:29:49 +00:00
|
|
|
* CoglVertexP2C4 triangle[] =
|
2010-11-04 13:23:23 +00:00
|
|
|
* {
|
|
|
|
* { 0, 300, 0xff, 0x00, 0x00, 0xff },
|
|
|
|
* { 150, 0, 0x00, 0xff, 0x00, 0xff },
|
|
|
|
* { 300, 300, 0xff, 0x00, 0x00, 0xff }
|
|
|
|
* };
|
|
|
|
* prim = cogl_primitive_new_p2c4 (COGL_VERTICES_MODE_TRIANGLE_FAN,
|
|
|
|
* 3, triangle);
|
|
|
|
* cogl_primitive_draw (prim);
|
|
|
|
* ]|
|
|
|
|
*
|
2011-10-25 21:34:59 +00:00
|
|
|
* The value passed as @n_vertices is initially used to determine how
|
|
|
|
* much can be read from @data but it will also be used to update the
|
2012-12-31 16:12:03 +00:00
|
|
|
* #CoglPrimitive <structfield>n_vertices</structfield> property as if
|
2011-10-25 21:34:59 +00:00
|
|
|
* cogl_primitive_set_n_vertices() were called. This property defines
|
|
|
|
* the number of vertices to read when drawing.
|
|
|
|
|
2010-11-04 13:23:23 +00:00
|
|
|
* <note>The primitive API doesn't support drawing with sliced
|
|
|
|
* textures (since switching between slices implies changing state and
|
2022-03-31 16:11:44 +00:00
|
|
|
* so that implies multiple primitives need to be submitted). If your
|
|
|
|
* hardware doesn't support non-power of two textures (For example you
|
|
|
|
* are using GLES 1.1) then you will need to make sure your assets are
|
|
|
|
* resized to a power-of-two size (though they don't have to be square)
|
|
|
|
* </note>
|
2010-11-04 13:23:23 +00:00
|
|
|
*
|
2013-09-03 13:28:14 +00:00
|
|
|
* Return value: (transfer full): A newly allocated #CoglPrimitive
|
2023-09-19 10:19:17 +00:00
|
|
|
* with a reference of 1. This can be freed using g_object_unref().
|
2010-11-04 13:23:23 +00:00
|
|
|
*/
|
2019-11-21 11:15:22 +00:00
|
|
|
COGL_EXPORT CoglPrimitive *
|
2012-02-06 17:08:58 +00:00
|
|
|
cogl_primitive_new_p2c4 (CoglContext *context,
|
|
|
|
CoglVerticesMode mode,
|
2010-11-04 13:23:23 +00:00
|
|
|
int n_vertices,
|
2011-01-20 12:29:49 +00:00
|
|
|
const CoglVertexP2C4 *data);
|
primitive: Adds convenience constructors
This adds convenience primitive constructors named like:
cogl_primitive_new_p3 or
cogl_primitive_new_p3c4 or
cogl_primitive_new_p3t2c4
where the letters correspond to the interleved vertex attributes layouts
such as CoglP3Vertex which is a struct with 3 float x,y,z members for
the [p]osition, or CoglP3T2C4Vertex which is a struct with 3 float x,y,z
members for the [p]osition, 2 float s,t members for the [t]exture
coordinates and 4 unsigned byte r,g,b,a members for the [c]olor.
The hope is that people will find these convenient enough to replace
cogl_polygon.
2010-10-12 14:48:31 +00:00
|
|
|
|
2010-11-04 13:23:23 +00:00
|
|
|
/**
|
2016-06-15 19:57:36 +00:00
|
|
|
* cogl_primitive_new_p3c4: (skip)
|
2012-02-06 17:08:58 +00:00
|
|
|
* @context: A #CoglContext
|
2010-11-04 13:23:23 +00:00
|
|
|
* @mode: A #CoglVerticesMode defining how to draw the vertices
|
2011-10-25 21:34:59 +00:00
|
|
|
* @n_vertices: The number of vertices to read from @data and also
|
|
|
|
* the number of vertices to read when later drawing.
|
2013-09-03 13:28:14 +00:00
|
|
|
* @data: (array length=n_vertices): (type Cogl.VertexP3C4): An array
|
|
|
|
* of #CoglVertexP3C4 vertices
|
2010-11-04 13:23:23 +00:00
|
|
|
*
|
|
|
|
* Provides a convenient way to describe a primitive, such as a single
|
|
|
|
* triangle strip or a triangle fan, that will internally allocate the
|
2011-03-02 15:01:41 +00:00
|
|
|
* necessary #CoglAttributeBuffer storage, describe the position
|
2011-01-20 19:31:53 +00:00
|
|
|
* and color attributes with #CoglAttribute<!-- -->s and upload
|
2010-11-04 13:23:23 +00:00
|
|
|
* your data.
|
|
|
|
*
|
|
|
|
* For example to draw a convex polygon with a linear gradient you
|
|
|
|
* can do:
|
|
|
|
* |[
|
2011-01-20 12:29:49 +00:00
|
|
|
* CoglVertexP3C4 triangle[] =
|
2010-11-04 13:23:23 +00:00
|
|
|
* {
|
|
|
|
* { 0, 300, 0, 0xff, 0x00, 0x00, 0xff },
|
|
|
|
* { 150, 0, 0, 0x00, 0xff, 0x00, 0xff },
|
|
|
|
* { 300, 300, 0, 0xff, 0x00, 0x00, 0xff }
|
|
|
|
* };
|
|
|
|
* prim = cogl_primitive_new_p3c4 (COGL_VERTICES_MODE_TRIANGLE_FAN,
|
|
|
|
* 3, triangle);
|
|
|
|
* cogl_primitive_draw (prim);
|
|
|
|
* ]|
|
|
|
|
*
|
2011-10-25 21:34:59 +00:00
|
|
|
* The value passed as @n_vertices is initially used to determine how
|
|
|
|
* much can be read from @data but it will also be used to update the
|
2012-12-31 16:12:03 +00:00
|
|
|
* #CoglPrimitive <structfield>n_vertices</structfield> property as if
|
2011-10-25 21:34:59 +00:00
|
|
|
* cogl_primitive_set_n_vertices() were called. This property defines
|
|
|
|
* the number of vertices to read when drawing.
|
|
|
|
|
2010-11-04 13:23:23 +00:00
|
|
|
* <note>The primitive API doesn't support drawing with sliced
|
|
|
|
* textures (since switching between slices implies changing state and
|
2022-03-31 16:11:44 +00:00
|
|
|
* so that implies multiple primitives need to be submitted). If your
|
|
|
|
* hardware doesn't support non-power of two textures (For example you
|
|
|
|
* are using GLES 1.1) then you will need to make sure your assets are
|
|
|
|
* resized to a power-of-two size (though they don't have to be square)
|
|
|
|
* </note>
|
2010-11-04 13:23:23 +00:00
|
|
|
*
|
2013-09-03 13:28:14 +00:00
|
|
|
* Return value: (transfer full): A newly allocated #CoglPrimitive
|
2023-09-19 10:19:17 +00:00
|
|
|
* with a reference of 1. This can be freed using g_object_unref().
|
2010-11-04 13:23:23 +00:00
|
|
|
*/
|
2019-11-21 11:15:22 +00:00
|
|
|
COGL_EXPORT CoglPrimitive *
|
2012-02-06 17:08:58 +00:00
|
|
|
cogl_primitive_new_p3c4 (CoglContext *context,
|
|
|
|
CoglVerticesMode mode,
|
2010-11-04 13:23:23 +00:00
|
|
|
int n_vertices,
|
2011-01-20 12:29:49 +00:00
|
|
|
const CoglVertexP3C4 *data);
|
primitive: Adds convenience constructors
This adds convenience primitive constructors named like:
cogl_primitive_new_p3 or
cogl_primitive_new_p3c4 or
cogl_primitive_new_p3t2c4
where the letters correspond to the interleved vertex attributes layouts
such as CoglP3Vertex which is a struct with 3 float x,y,z members for
the [p]osition, or CoglP3T2C4Vertex which is a struct with 3 float x,y,z
members for the [p]osition, 2 float s,t members for the [t]exture
coordinates and 4 unsigned byte r,g,b,a members for the [c]olor.
The hope is that people will find these convenient enough to replace
cogl_polygon.
2010-10-12 14:48:31 +00:00
|
|
|
|
2010-11-04 13:23:23 +00:00
|
|
|
/**
|
2016-06-15 19:57:36 +00:00
|
|
|
* cogl_primitive_new_p2t2: (skip)
|
2012-02-06 17:08:58 +00:00
|
|
|
* @context: A #CoglContext
|
2010-11-04 13:23:23 +00:00
|
|
|
* @mode: A #CoglVerticesMode defining how to draw the vertices
|
2011-10-25 21:34:59 +00:00
|
|
|
* @n_vertices: The number of vertices to read from @data and also
|
|
|
|
* the number of vertices to read when later drawing.
|
2013-09-03 13:28:14 +00:00
|
|
|
* @data: (array length=n_vertices): (type Cogl.VertexP2T2): An array
|
|
|
|
* of #CoglVertexP2T2 vertices
|
2010-11-04 13:23:23 +00:00
|
|
|
*
|
|
|
|
* Provides a convenient way to describe a primitive, such as a single
|
|
|
|
* triangle strip or a triangle fan, that will internally allocate the
|
2011-03-02 15:01:41 +00:00
|
|
|
* necessary #CoglAttributeBuffer storage, describe the position and
|
2011-01-20 19:31:53 +00:00
|
|
|
* texture coordinate attributes with #CoglAttribute<!-- -->s and
|
2010-11-04 13:23:23 +00:00
|
|
|
* upload your data.
|
|
|
|
*
|
|
|
|
* For example to draw a convex polygon with texture mapping you can
|
|
|
|
* do:
|
|
|
|
* |[
|
2011-01-20 12:29:49 +00:00
|
|
|
* CoglVertexP2T2 triangle[] =
|
2010-11-04 13:23:23 +00:00
|
|
|
* {
|
|
|
|
* { 0, 300, 0.0, 1.0},
|
|
|
|
* { 150, 0, 0.5, 0.0},
|
|
|
|
* { 300, 300, 1.0, 1.0}
|
|
|
|
* };
|
|
|
|
* prim = cogl_primitive_new_p2t2 (COGL_VERTICES_MODE_TRIANGLE_FAN,
|
|
|
|
* 3, triangle);
|
|
|
|
* cogl_primitive_draw (prim);
|
|
|
|
* ]|
|
|
|
|
*
|
2011-10-25 21:34:59 +00:00
|
|
|
* The value passed as @n_vertices is initially used to determine how
|
|
|
|
* much can be read from @data but it will also be used to update the
|
2012-12-31 16:12:03 +00:00
|
|
|
* #CoglPrimitive <structfield>n_vertices</structfield> property as if
|
2011-10-25 21:34:59 +00:00
|
|
|
* cogl_primitive_set_n_vertices() were called. This property defines
|
|
|
|
* the number of vertices to read when drawing.
|
|
|
|
|
2010-11-04 13:23:23 +00:00
|
|
|
* <note>The primitive API doesn't support drawing with sliced
|
|
|
|
* textures (since switching between slices implies changing state and
|
2022-03-31 16:11:44 +00:00
|
|
|
* so that implies multiple primitives need to be submitted). If your
|
|
|
|
* hardware doesn't support non-power of two textures (For example you
|
|
|
|
* are using GLES 1.1) then you will need to make sure your assets are
|
|
|
|
* resized to a power-of-two size (though they don't have to be square)
|
|
|
|
* </note>
|
2010-11-04 13:23:23 +00:00
|
|
|
*
|
2013-09-03 13:28:14 +00:00
|
|
|
* Return value: (transfer full): A newly allocated #CoglPrimitive
|
2023-09-19 10:19:17 +00:00
|
|
|
* with a reference of 1. This can be freed using g_object_unref().
|
2010-11-04 13:23:23 +00:00
|
|
|
*/
|
2019-11-21 11:15:22 +00:00
|
|
|
COGL_EXPORT CoglPrimitive *
|
2012-02-06 17:08:58 +00:00
|
|
|
cogl_primitive_new_p2t2 (CoglContext *context,
|
|
|
|
CoglVerticesMode mode,
|
2010-11-04 13:23:23 +00:00
|
|
|
int n_vertices,
|
2011-01-20 12:29:49 +00:00
|
|
|
const CoglVertexP2T2 *data);
|
primitive: Adds convenience constructors
This adds convenience primitive constructors named like:
cogl_primitive_new_p3 or
cogl_primitive_new_p3c4 or
cogl_primitive_new_p3t2c4
where the letters correspond to the interleved vertex attributes layouts
such as CoglP3Vertex which is a struct with 3 float x,y,z members for
the [p]osition, or CoglP3T2C4Vertex which is a struct with 3 float x,y,z
members for the [p]osition, 2 float s,t members for the [t]exture
coordinates and 4 unsigned byte r,g,b,a members for the [c]olor.
The hope is that people will find these convenient enough to replace
cogl_polygon.
2010-10-12 14:48:31 +00:00
|
|
|
|
2010-11-04 13:23:23 +00:00
|
|
|
/**
|
2016-06-15 19:57:36 +00:00
|
|
|
* cogl_primitive_new_p3t2: (skip)
|
2012-02-06 17:08:58 +00:00
|
|
|
* @context: A #CoglContext
|
2010-11-04 13:23:23 +00:00
|
|
|
* @mode: A #CoglVerticesMode defining how to draw the vertices
|
2011-10-25 21:34:59 +00:00
|
|
|
* @n_vertices: The number of vertices to read from @data and also
|
|
|
|
* the number of vertices to read when later drawing.
|
2013-09-03 13:28:14 +00:00
|
|
|
* @data: (array length=n_vertices): (type Cogl.VertexP3T2): An array
|
|
|
|
* of #CoglVertexP3T2 vertices
|
2010-11-04 13:23:23 +00:00
|
|
|
*
|
|
|
|
* Provides a convenient way to describe a primitive, such as a single
|
|
|
|
* triangle strip or a triangle fan, that will internally allocate the
|
2011-03-02 15:01:41 +00:00
|
|
|
* necessary #CoglAttributeBuffer storage, describe the position and
|
2011-01-20 19:31:53 +00:00
|
|
|
* texture coordinate attributes with #CoglAttribute<!-- -->s and
|
2010-11-04 13:23:23 +00:00
|
|
|
* upload your data.
|
|
|
|
*
|
|
|
|
* For example to draw a convex polygon with texture mapping you can
|
|
|
|
* do:
|
|
|
|
* |[
|
2011-01-20 12:29:49 +00:00
|
|
|
* CoglVertexP3T2 triangle[] =
|
2010-11-04 13:23:23 +00:00
|
|
|
* {
|
|
|
|
* { 0, 300, 0, 0.0, 1.0},
|
|
|
|
* { 150, 0, 0, 0.5, 0.0},
|
|
|
|
* { 300, 300, 0, 1.0, 1.0}
|
|
|
|
* };
|
|
|
|
* prim = cogl_primitive_new_p3t2 (COGL_VERTICES_MODE_TRIANGLE_FAN,
|
|
|
|
* 3, triangle);
|
|
|
|
* cogl_primitive_draw (prim);
|
|
|
|
* ]|
|
|
|
|
*
|
2011-10-25 21:34:59 +00:00
|
|
|
* The value passed as @n_vertices is initially used to determine how
|
|
|
|
* much can be read from @data but it will also be used to update the
|
2012-12-31 16:12:03 +00:00
|
|
|
* #CoglPrimitive <structfield>n_vertices</structfield> property as if
|
2011-10-25 21:34:59 +00:00
|
|
|
* cogl_primitive_set_n_vertices() were called. This property defines
|
|
|
|
* the number of vertices to read when drawing.
|
|
|
|
|
2010-11-04 13:23:23 +00:00
|
|
|
* <note>The primitive API doesn't support drawing with sliced
|
|
|
|
* textures (since switching between slices implies changing state and
|
2022-03-31 16:11:44 +00:00
|
|
|
* so that implies multiple primitives need to be submitted). If your
|
|
|
|
* hardware doesn't support non-power of two textures (For example you
|
|
|
|
* are using GLES 1.1) then you will need to make sure your assets are
|
|
|
|
* resized to a power-of-two size (though they don't have to be square)
|
|
|
|
* </note>
|
2010-11-04 13:23:23 +00:00
|
|
|
*
|
2013-09-03 13:28:14 +00:00
|
|
|
* Return value: (transfer full): A newly allocated #CoglPrimitive
|
2023-09-19 10:19:17 +00:00
|
|
|
* with a reference of 1. This can be freed using g_object_unref().
|
2010-11-04 13:23:23 +00:00
|
|
|
*/
|
2019-11-21 11:15:22 +00:00
|
|
|
COGL_EXPORT CoglPrimitive *
|
2012-02-06 17:08:58 +00:00
|
|
|
cogl_primitive_new_p3t2 (CoglContext *context,
|
|
|
|
CoglVerticesMode mode,
|
2010-11-04 13:23:23 +00:00
|
|
|
int n_vertices,
|
2011-01-20 12:29:49 +00:00
|
|
|
const CoglVertexP3T2 *data);
|
primitive: Adds convenience constructors
This adds convenience primitive constructors named like:
cogl_primitive_new_p3 or
cogl_primitive_new_p3c4 or
cogl_primitive_new_p3t2c4
where the letters correspond to the interleved vertex attributes layouts
such as CoglP3Vertex which is a struct with 3 float x,y,z members for
the [p]osition, or CoglP3T2C4Vertex which is a struct with 3 float x,y,z
members for the [p]osition, 2 float s,t members for the [t]exture
coordinates and 4 unsigned byte r,g,b,a members for the [c]olor.
The hope is that people will find these convenient enough to replace
cogl_polygon.
2010-10-12 14:48:31 +00:00
|
|
|
|
2010-11-04 13:23:23 +00:00
|
|
|
/**
|
2016-06-15 19:57:36 +00:00
|
|
|
* cogl_primitive_new_p2t2c4: (skip)
|
2012-02-06 17:08:58 +00:00
|
|
|
* @context: A #CoglContext
|
2010-11-04 13:23:23 +00:00
|
|
|
* @mode: A #CoglVerticesMode defining how to draw the vertices
|
2011-10-25 21:34:59 +00:00
|
|
|
* @n_vertices: The number of vertices to read from @data and also
|
|
|
|
* the number of vertices to read when later drawing.
|
2013-09-03 13:28:14 +00:00
|
|
|
* @data: (array length=n_vertices): (type Cogl.VertexP2T2C4): An
|
|
|
|
* array of #CoglVertexP2T2C4 vertices
|
2010-11-04 13:23:23 +00:00
|
|
|
*
|
|
|
|
* Provides a convenient way to describe a primitive, such as a single
|
|
|
|
* triangle strip or a triangle fan, that will internally allocate the
|
2011-03-02 15:01:41 +00:00
|
|
|
* necessary #CoglAttributeBuffer storage, describe the position, texture
|
2011-01-20 19:31:53 +00:00
|
|
|
* coordinate and color attributes with #CoglAttribute<!-- -->s and
|
2010-11-04 13:23:23 +00:00
|
|
|
* upload your data.
|
|
|
|
*
|
|
|
|
* For example to draw a convex polygon with texture mapping and a
|
|
|
|
* linear gradient you can do:
|
|
|
|
* |[
|
2011-01-20 12:29:49 +00:00
|
|
|
* CoglVertexP2T2C4 triangle[] =
|
2010-11-04 13:23:23 +00:00
|
|
|
* {
|
|
|
|
* { 0, 300, 0.0, 1.0, 0xff, 0x00, 0x00, 0xff},
|
|
|
|
* { 150, 0, 0.5, 0.0, 0x00, 0xff, 0x00, 0xff},
|
|
|
|
* { 300, 300, 1.0, 1.0, 0xff, 0x00, 0x00, 0xff}
|
|
|
|
* };
|
|
|
|
* prim = cogl_primitive_new_p2t2c4 (COGL_VERTICES_MODE_TRIANGLE_FAN,
|
|
|
|
* 3, triangle);
|
|
|
|
* cogl_primitive_draw (prim);
|
|
|
|
* ]|
|
|
|
|
*
|
2011-10-25 21:34:59 +00:00
|
|
|
* The value passed as @n_vertices is initially used to determine how
|
|
|
|
* much can be read from @data but it will also be used to update the
|
2012-12-31 16:12:03 +00:00
|
|
|
* #CoglPrimitive <structfield>n_vertices</structfield> property as if
|
2011-10-25 21:34:59 +00:00
|
|
|
* cogl_primitive_set_n_vertices() were called. This property defines
|
|
|
|
* the number of vertices to read when drawing.
|
|
|
|
|
2010-11-04 13:23:23 +00:00
|
|
|
* <note>The primitive API doesn't support drawing with sliced
|
|
|
|
* textures (since switching between slices implies changing state and
|
2022-03-31 16:11:44 +00:00
|
|
|
* so that implies multiple primitives need to be submitted). If your
|
|
|
|
* hardware doesn't support non-power of two textures (For example you
|
|
|
|
* are using GLES 1.1) then you will need to make sure your assets are
|
|
|
|
* resized to a power-of-two size (though they don't have to be square)
|
|
|
|
* </note>
|
2010-11-04 13:23:23 +00:00
|
|
|
*
|
2013-09-03 13:28:14 +00:00
|
|
|
* Return value: (transfer full): A newly allocated #CoglPrimitive
|
2023-09-19 10:19:17 +00:00
|
|
|
* with a reference of 1. This can be freed using g_object_unref().
|
2010-11-04 13:23:23 +00:00
|
|
|
*/
|
2019-11-21 11:15:22 +00:00
|
|
|
COGL_EXPORT CoglPrimitive *
|
2012-02-06 17:08:58 +00:00
|
|
|
cogl_primitive_new_p2t2c4 (CoglContext *context,
|
|
|
|
CoglVerticesMode mode,
|
2010-11-04 13:23:23 +00:00
|
|
|
int n_vertices,
|
2011-01-20 12:29:49 +00:00
|
|
|
const CoglVertexP2T2C4 *data);
|
primitive: Adds convenience constructors
This adds convenience primitive constructors named like:
cogl_primitive_new_p3 or
cogl_primitive_new_p3c4 or
cogl_primitive_new_p3t2c4
where the letters correspond to the interleved vertex attributes layouts
such as CoglP3Vertex which is a struct with 3 float x,y,z members for
the [p]osition, or CoglP3T2C4Vertex which is a struct with 3 float x,y,z
members for the [p]osition, 2 float s,t members for the [t]exture
coordinates and 4 unsigned byte r,g,b,a members for the [c]olor.
The hope is that people will find these convenient enough to replace
cogl_polygon.
2010-10-12 14:48:31 +00:00
|
|
|
|
2010-11-04 13:23:23 +00:00
|
|
|
/**
|
2016-06-15 19:57:36 +00:00
|
|
|
* cogl_primitive_new_p3t2c4: (skip)
|
2012-02-06 17:08:58 +00:00
|
|
|
* @context: A #CoglContext
|
2010-11-04 13:23:23 +00:00
|
|
|
* @mode: A #CoglVerticesMode defining how to draw the vertices
|
2011-10-25 21:34:59 +00:00
|
|
|
* @n_vertices: The number of vertices to read from @data and also
|
|
|
|
* the number of vertices to read when later drawing.
|
2013-09-03 13:28:14 +00:00
|
|
|
* @data: (array length=n_vertices): (type Cogl.VertexP3T2C4): An
|
|
|
|
* array of #CoglVertexP3T2C4 vertices
|
2010-11-04 13:23:23 +00:00
|
|
|
*
|
|
|
|
* Provides a convenient way to describe a primitive, such as a single
|
|
|
|
* triangle strip or a triangle fan, that will internally allocate the
|
2011-03-02 15:01:41 +00:00
|
|
|
* necessary #CoglAttributeBuffer storage, describe the position, texture
|
2011-01-20 19:31:53 +00:00
|
|
|
* coordinate and color attributes with #CoglAttribute<!-- -->s and
|
2010-11-04 13:23:23 +00:00
|
|
|
* upload your data.
|
|
|
|
*
|
|
|
|
* For example to draw a convex polygon with texture mapping and a
|
|
|
|
* linear gradient you can do:
|
|
|
|
* |[
|
2011-01-20 12:29:49 +00:00
|
|
|
* CoglVertexP3T2C4 triangle[] =
|
2010-11-04 13:23:23 +00:00
|
|
|
* {
|
|
|
|
* { 0, 300, 0, 0.0, 1.0, 0xff, 0x00, 0x00, 0xff},
|
|
|
|
* { 150, 0, 0, 0.5, 0.0, 0x00, 0xff, 0x00, 0xff},
|
|
|
|
* { 300, 300, 0, 1.0, 1.0, 0xff, 0x00, 0x00, 0xff}
|
|
|
|
* };
|
|
|
|
* prim = cogl_primitive_new_p3t2c4 (COGL_VERTICES_MODE_TRIANGLE_FAN,
|
|
|
|
* 3, triangle);
|
|
|
|
* cogl_primitive_draw (prim);
|
|
|
|
* ]|
|
|
|
|
*
|
2011-10-25 21:34:59 +00:00
|
|
|
* The value passed as @n_vertices is initially used to determine how
|
|
|
|
* much can be read from @data but it will also be used to update the
|
2012-12-31 16:12:03 +00:00
|
|
|
* #CoglPrimitive <structfield>n_vertices</structfield> property as if
|
2011-10-25 21:34:59 +00:00
|
|
|
* cogl_primitive_set_n_vertices() were called. This property defines
|
|
|
|
* the number of vertices to read when drawing.
|
|
|
|
|
2010-11-04 13:23:23 +00:00
|
|
|
* <note>The primitive API doesn't support drawing with sliced
|
|
|
|
* textures (since switching between slices implies changing state and
|
2022-03-31 16:11:44 +00:00
|
|
|
* so that implies multiple primitives need to be submitted). If your
|
|
|
|
* hardware doesn't support non-power of two textures (For example you
|
|
|
|
* are using GLES 1.1) then you will need to make sure your assets are
|
|
|
|
* resized to a power-of-two size (though they don't have to be square)
|
|
|
|
* </note>
|
2010-11-04 13:23:23 +00:00
|
|
|
*
|
2013-09-03 13:28:14 +00:00
|
|
|
* Return value: (transfer full): A newly allocated #CoglPrimitive
|
2023-09-19 10:19:17 +00:00
|
|
|
* with a reference of 1. This can be freed using g_object_unref().
|
2010-11-04 13:23:23 +00:00
|
|
|
*/
|
2019-11-21 11:15:22 +00:00
|
|
|
COGL_EXPORT CoglPrimitive *
|
2012-02-06 17:08:58 +00:00
|
|
|
cogl_primitive_new_p3t2c4 (CoglContext *context,
|
|
|
|
CoglVerticesMode mode,
|
2010-11-04 13:23:23 +00:00
|
|
|
int n_vertices,
|
2011-01-20 12:29:49 +00:00
|
|
|
const CoglVertexP3T2C4 *data);
|
2019-11-21 11:15:22 +00:00
|
|
|
COGL_EXPORT int
|
2010-10-12 11:54:07 +00:00
|
|
|
cogl_primitive_get_first_vertex (CoglPrimitive *primitive);
|
|
|
|
|
2019-11-21 11:15:22 +00:00
|
|
|
COGL_EXPORT void
|
2010-10-12 11:54:07 +00:00
|
|
|
cogl_primitive_set_first_vertex (CoglPrimitive *primitive,
|
|
|
|
int first_vertex);
|
|
|
|
|
2011-10-25 21:34:59 +00:00
|
|
|
/**
|
|
|
|
* cogl_primitive_get_n_vertices:
|
|
|
|
* @primitive: A #CoglPrimitive object
|
|
|
|
*
|
|
|
|
* Queries the number of vertices to read when drawing the given
|
|
|
|
* @primitive. Usually this value is implicitly set when associating
|
|
|
|
* vertex data or indices with a #CoglPrimitive.
|
|
|
|
*
|
|
|
|
* If cogl_primitive_set_indices() has been used to associate a
|
|
|
|
* sequence of #CoglIndices with the given @primitive then the
|
|
|
|
* number of vertices to read can also be phrased as the number
|
|
|
|
* of indices to read.
|
|
|
|
*
|
|
|
|
* <note>To be clear; it doesn't refer to the number of vertices - in
|
|
|
|
* terms of data - associated with the primitive it's just the number
|
|
|
|
* of vertices to read and draw.</note>
|
|
|
|
*
|
|
|
|
* Returns: The number of vertices to read when drawing.
|
|
|
|
*/
|
2019-11-21 11:15:22 +00:00
|
|
|
COGL_EXPORT int
|
2010-10-12 11:54:07 +00:00
|
|
|
cogl_primitive_get_n_vertices (CoglPrimitive *primitive);
|
|
|
|
|
2011-10-25 21:34:59 +00:00
|
|
|
/**
|
|
|
|
* cogl_primitive_set_n_vertices:
|
|
|
|
* @primitive: A #CoglPrimitive object
|
|
|
|
* @n_vertices: The number of vertices to read when drawing.
|
|
|
|
*
|
|
|
|
* Specifies how many vertices should be read when drawing the given
|
|
|
|
* @primitive.
|
|
|
|
*
|
|
|
|
* Usually this value is set implicitly when associating vertex data
|
|
|
|
* or indices with a #CoglPrimitive.
|
|
|
|
*
|
|
|
|
* <note>To be clear; it doesn't refer to the number of vertices - in
|
|
|
|
* terms of data - associated with the primitive it's just the number
|
|
|
|
* of vertices to read and draw.</note>
|
|
|
|
*/
|
2019-11-21 11:15:22 +00:00
|
|
|
COGL_EXPORT void
|
2010-10-12 11:54:07 +00:00
|
|
|
cogl_primitive_set_n_vertices (CoglPrimitive *primitive,
|
|
|
|
int n_vertices);
|
|
|
|
|
2019-11-21 11:15:22 +00:00
|
|
|
COGL_EXPORT CoglVerticesMode
|
2010-10-12 11:54:07 +00:00
|
|
|
cogl_primitive_get_mode (CoglPrimitive *primitive);
|
|
|
|
|
2019-11-21 11:15:22 +00:00
|
|
|
COGL_EXPORT void
|
2010-10-12 11:54:07 +00:00
|
|
|
cogl_primitive_set_mode (CoglPrimitive *primitive,
|
|
|
|
CoglVerticesMode mode);
|
|
|
|
|
2011-10-25 21:34:59 +00:00
|
|
|
/**
|
2016-06-15 19:57:36 +00:00
|
|
|
* cogl_primitive_set_indices: (skip)
|
2011-10-25 21:34:59 +00:00
|
|
|
* @primitive: A #CoglPrimitive
|
|
|
|
* @indices: A #CoglIndices array
|
|
|
|
* @n_indices: The number of indices to reference when drawing
|
|
|
|
*
|
|
|
|
* Associates a sequence of #CoglIndices with the given @primitive.
|
|
|
|
*
|
|
|
|
* #CoglIndices provide a way to virtualize your real vertex data by
|
|
|
|
* providing a sequence of indices that index into your real vertex
|
|
|
|
* data. The GPU will walk though the index values to indirectly
|
|
|
|
* lookup the data for each vertex instead of sequentially walking
|
|
|
|
* through the data directly. This lets you save memory by indexing
|
|
|
|
* shared data multiple times instead of duplicating the data.
|
|
|
|
*
|
|
|
|
* The value passed as @n_indices will simply update the
|
2012-12-31 16:12:03 +00:00
|
|
|
* #CoglPrimitive <structfield>n_vertices</structfield> property as if
|
2011-10-25 21:34:59 +00:00
|
|
|
* cogl_primitive_set_n_vertices() were called. This property defines
|
|
|
|
* the number of vertices to draw or, put another way, how many
|
|
|
|
* indices should be read from @indices when drawing.
|
|
|
|
*
|
2012-12-31 16:12:03 +00:00
|
|
|
* <note>The #CoglPrimitive <structfield>first_vertex</structfield> property
|
|
|
|
* also affects drawing with indices by defining the first entry of the
|
|
|
|
* indices to start drawing from.</note>
|
2011-10-25 21:34:59 +00:00
|
|
|
*/
|
2019-11-21 11:15:22 +00:00
|
|
|
COGL_EXPORT void
|
2010-10-12 11:54:07 +00:00
|
|
|
cogl_primitive_set_indices (CoglPrimitive *primitive,
|
2011-10-25 21:34:59 +00:00
|
|
|
CoglIndices *indices,
|
|
|
|
int n_indices);
|
2010-10-12 11:54:07 +00:00
|
|
|
|
2012-02-06 14:01:24 +00:00
|
|
|
/**
|
2016-06-15 19:57:36 +00:00
|
|
|
* cogl_primitive_get_indices: (skip)
|
2012-02-06 14:01:24 +00:00
|
|
|
* @primitive: A #CoglPrimitive
|
|
|
|
*
|
2013-09-03 13:28:14 +00:00
|
|
|
* Return value: (transfer none): the indices that were set with
|
2012-02-06 14:01:24 +00:00
|
|
|
* cogl_primitive_set_indices() or %NULL if no indices were set.
|
|
|
|
*/
|
2019-11-21 11:15:22 +00:00
|
|
|
COGL_EXPORT CoglIndices *
|
2012-02-06 14:01:24 +00:00
|
|
|
cogl_primitive_get_indices (CoglPrimitive *primitive);
|
|
|
|
|
2012-02-06 12:52:18 +00:00
|
|
|
/**
|
|
|
|
* cogl_primitive_copy:
|
|
|
|
* @primitive: A primitive copy
|
|
|
|
*
|
|
|
|
* Makes a copy of an existing #CoglPrimitive. Note that the primitive
|
|
|
|
* is a shallow copy which means it will use the same attributes and
|
|
|
|
* attribute buffers as the original primitive.
|
|
|
|
*
|
2013-09-03 13:28:14 +00:00
|
|
|
* Return value: (transfer full): the new primitive
|
2012-02-06 12:52:18 +00:00
|
|
|
*/
|
2019-11-21 11:15:22 +00:00
|
|
|
COGL_EXPORT CoglPrimitive *
|
2012-02-06 12:52:18 +00:00
|
|
|
cogl_primitive_copy (CoglPrimitive *primitive);
|
|
|
|
|
2012-02-06 13:29:35 +00:00
|
|
|
/**
|
|
|
|
* CoglPrimitiveAttributeCallback:
|
|
|
|
* @primitive: The #CoglPrimitive whose attributes are being iterated
|
|
|
|
* @attribute: The #CoglAttribute
|
|
|
|
* @user_data: The private data passed to cogl_primitive_foreach_attribute()
|
|
|
|
*
|
|
|
|
* The callback prototype used with cogl_primitive_foreach_attribute()
|
|
|
|
* for iterating all the attributes of a #CoglPrimitive.
|
|
|
|
*
|
|
|
|
* The function should return TRUE to continue iteration or FALSE to
|
|
|
|
* stop.
|
|
|
|
*/
|
2018-11-24 12:04:47 +00:00
|
|
|
typedef gboolean (* CoglPrimitiveAttributeCallback) (CoglPrimitive *primitive,
|
2012-02-06 13:29:35 +00:00
|
|
|
CoglAttribute *attribute,
|
|
|
|
void *user_data);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* cogl_primitive_foreach_attribute:
|
|
|
|
* @primitive: A #CoglPrimitive object
|
2013-09-03 21:01:00 +00:00
|
|
|
* @callback: (scope call): A #CoglPrimitiveAttributeCallback to be
|
|
|
|
* called for each attribute
|
|
|
|
* @user_data: (closure): Private data that will be passed to the
|
|
|
|
* callback
|
2012-02-06 13:29:35 +00:00
|
|
|
*
|
|
|
|
* Iterates all the attributes of the given #CoglPrimitive.
|
|
|
|
*/
|
2019-11-21 11:15:22 +00:00
|
|
|
COGL_EXPORT void
|
2012-02-06 13:29:35 +00:00
|
|
|
cogl_primitive_foreach_attribute (CoglPrimitive *primitive,
|
|
|
|
CoglPrimitiveAttributeCallback callback,
|
|
|
|
void *user_data);
|
|
|
|
|
2013-07-09 22:47:29 +00:00
|
|
|
/**
|
2016-06-15 19:57:36 +00:00
|
|
|
* cogl_primitive_draw: (skip)
|
2013-07-09 22:47:29 +00:00
|
|
|
* @primitive: A #CoglPrimitive geometry object
|
|
|
|
* @framebuffer: A destination #CoglFramebuffer
|
|
|
|
* @pipeline: A #CoglPipeline state object
|
|
|
|
*
|
|
|
|
* Draws the given @primitive geometry to the specified destination
|
|
|
|
* @framebuffer using the graphics processing state described by @pipeline.
|
|
|
|
*
|
|
|
|
* This drawing api doesn't support high-level meta texture types such
|
|
|
|
* as #CoglTexture2DSliced so it is the user's responsibility to
|
|
|
|
* ensure that only low-level textures that can be directly sampled by
|
2019-03-08 17:16:44 +00:00
|
|
|
* a GPU such as #CoglTexture2D are associated with layers of the given
|
|
|
|
* @pipeline.
|
2013-07-09 22:47:29 +00:00
|
|
|
*/
|
2019-11-21 11:15:22 +00:00
|
|
|
COGL_EXPORT void
|
2013-07-09 22:47:29 +00:00
|
|
|
cogl_primitive_draw (CoglPrimitive *primitive,
|
|
|
|
CoglFramebuffer *framebuffer,
|
|
|
|
CoglPipeline *pipeline);
|
|
|
|
|
|
|
|
|
2018-11-23 07:42:05 +00:00
|
|
|
G_END_DECLS
|