2010-10-12 07:53:10 -04:00
|
|
|
/*
|
|
|
|
* Cogl
|
|
|
|
*
|
2014-02-21 20:28:54 -05:00
|
|
|
* A Low Level GPU Graphics and Utilities API
|
2010-10-12 07:53:10 -04:00
|
|
|
*
|
|
|
|
* Copyright (C) 2010 Intel Corporation.
|
|
|
|
*
|
2014-02-21 20:28:54 -05: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 07:53:10 -04:00
|
|
|
*
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* Authors:
|
|
|
|
* Robert Bragg <robert@linux.intel.com>
|
|
|
|
*/
|
|
|
|
|
2012-06-20 13:49:08 -04:00
|
|
|
#if !defined(__COGL_H_INSIDE__) && !defined(COGL_COMPILATION)
|
2010-10-12 07:53:10 -04:00
|
|
|
#error "Only <cogl/cogl.h> can be included directly."
|
|
|
|
#endif
|
|
|
|
|
2011-01-20 14:31:53 -05:00
|
|
|
#ifndef __COGL_ATTRIBUTE_H__
|
|
|
|
#define __COGL_ATTRIBUTE_H__
|
2010-10-12 07:53:10 -04:00
|
|
|
|
2012-02-17 16:46:39 -05:00
|
|
|
/* We forward declare the CoglAttribute type here to avoid some circular
|
|
|
|
* dependency issues with the following headers.
|
|
|
|
*/
|
|
|
|
typedef struct _CoglAttribute CoglAttribute;
|
|
|
|
|
2011-03-02 10:01:41 -05:00
|
|
|
#include <cogl/cogl-attribute-buffer.h>
|
2010-10-12 07:53:10 -04:00
|
|
|
#include <cogl/cogl-indices.h>
|
|
|
|
|
2012-11-22 13:01:10 -05:00
|
|
|
COGL_BEGIN_DECLS
|
2010-10-12 07:53:10 -04:00
|
|
|
|
|
|
|
/**
|
2011-01-20 14:31:53 -05:00
|
|
|
* SECTION:cogl-attribute
|
|
|
|
* @short_description: Functions for declaring and drawing vertex
|
2010-10-12 07:53:10 -04:00
|
|
|
* attributes
|
|
|
|
*
|
|
|
|
* FIXME
|
|
|
|
*/
|
|
|
|
|
|
|
|
/**
|
2013-09-03 15:54:25 -04:00
|
|
|
* cogl_attribute_new: (constructor)
|
2011-03-02 10:01:41 -05:00
|
|
|
* @attribute_buffer: The #CoglAttributeBuffer containing the actual
|
|
|
|
* attribute data
|
2010-10-12 07:53:10 -04:00
|
|
|
* @name: The name of the attribute (used to reference it from GLSL)
|
|
|
|
* @stride: The number of bytes to jump to get to the next attribute
|
|
|
|
* value for the next vertex. (Usually
|
2012-06-20 09:30:03 -04:00
|
|
|
* <literal>sizeof (MyVertex)</literal>)
|
2011-03-02 10:01:41 -05:00
|
|
|
* @offset: The byte offset from the start of @attribute_buffer for
|
|
|
|
* the first attribute value. (Usually
|
2012-06-20 09:30:03 -04:00
|
|
|
* <literal>offsetof (MyVertex, component0)</literal>
|
2010-10-12 07:53:10 -04:00
|
|
|
* @components: The number of components (e.g. 4 for an rgba color or
|
|
|
|
* 3 for and (x,y,z) position)
|
2010-11-08 11:01:19 -05:00
|
|
|
* @type: FIXME
|
2010-10-12 07:53:10 -04:00
|
|
|
*
|
|
|
|
* Describes the layout for a list of vertex attribute values (For
|
|
|
|
* example, a list of texture coordinates or colors).
|
|
|
|
*
|
|
|
|
* The @name is used to access the attribute inside a GLSL vertex
|
|
|
|
* shader and there are some special names you should use if they are
|
|
|
|
* applicable:
|
|
|
|
* <itemizedlist>
|
|
|
|
* <listitem>"cogl_position_in" (used for vertex positions)</listitem>
|
|
|
|
* <listitem>"cogl_color_in" (used for vertex colors)</listitem>
|
|
|
|
* <listitem>"cogl_tex_coord0_in", "cogl_tex_coord1", ...
|
|
|
|
* (used for vertex texture coordinates)</listitem>
|
|
|
|
* <listitem>"cogl_normal_in" (used for vertex normals)</listitem>
|
2012-11-08 11:56:02 -05:00
|
|
|
* <listitem>"cogl_point_size_in" (used to set the size of points
|
|
|
|
* per-vertex. Note this can only be used if
|
|
|
|
* %COGL_FEATURE_ID_POINT_SIZE_ATTRIBUTE is advertised and
|
|
|
|
* cogl_pipeline_set_per_vertex_point_size() is called on the pipeline.
|
|
|
|
* </listitem>
|
2010-10-12 07:53:10 -04:00
|
|
|
* </itemizedlist>
|
|
|
|
*
|
|
|
|
* The attribute values corresponding to different vertices can either
|
|
|
|
* be tightly packed or interleaved with other attribute values. For
|
|
|
|
* example it's common to define a structure for a single vertex like:
|
|
|
|
* |[
|
|
|
|
* typedef struct
|
|
|
|
* {
|
|
|
|
* float x, y, z; /<!-- -->* position attribute *<!-- -->/
|
|
|
|
* float s, t; /<!-- -->* texture coordinate attribute *<!-- -->/
|
|
|
|
* } MyVertex;
|
|
|
|
* ]|
|
|
|
|
*
|
|
|
|
* And then create an array of vertex data something like:
|
|
|
|
* |[
|
|
|
|
* MyVertex vertices[100] = { .... }
|
|
|
|
* ]|
|
|
|
|
*
|
|
|
|
* In this case, to describe either the position or texture coordinate
|
2012-06-20 09:30:03 -04:00
|
|
|
* attribute you have to move <literal>sizeof (MyVertex)</literal> bytes to
|
2010-10-12 07:53:10 -04:00
|
|
|
* move from one vertex to the next. This is called the attribute
|
|
|
|
* @stride. If you weren't interleving attributes and you instead had
|
|
|
|
* a packed array of float x, y pairs then the attribute stride would
|
2012-06-20 09:30:03 -04:00
|
|
|
* be <literal>(2 * sizeof (float))</literal>. So the @stride is the number of
|
2010-10-12 07:53:10 -04:00
|
|
|
* bytes to move to find the attribute value of the next vertex.
|
|
|
|
*
|
|
|
|
* Normally a list of attributes starts at the beginning of an array.
|
2012-06-20 09:30:03 -04:00
|
|
|
* So for the <literal>MyVertex</literal> example above the @offset is the
|
|
|
|
* offset inside the <literal>MyVertex</literal> structure to the first
|
2010-10-12 07:53:10 -04:00
|
|
|
* component of the attribute. For the texture coordinate attribute
|
2012-06-20 09:30:03 -04:00
|
|
|
* the offset would be <literal>offsetof (MyVertex, s)</literal> or instead of
|
|
|
|
* using the offsetof macro you could use <literal>sizeof (float) *
|
|
|
|
* 3</literal>. If you've divided your @array into blocks of non-interleved
|
|
|
|
* attributes then you will need to calculate the @offset as the number of
|
|
|
|
* bytes in blocks preceding the attribute you're describing.
|
2010-10-12 07:53:10 -04:00
|
|
|
*
|
|
|
|
* An attribute often has more than one component. For example a color
|
|
|
|
* is often comprised of 4 red, green, blue and alpha @components, and a
|
|
|
|
* position may be comprised of 2 x and y @components. You should aim
|
|
|
|
* to keep the number of components to a minimum as more components
|
|
|
|
* means more data needs to be mapped into the GPU which can be a
|
|
|
|
* bottlneck when dealing with a large number of vertices.
|
|
|
|
*
|
|
|
|
* Finally you need to specify the component data type. Here you
|
|
|
|
* should aim to use the smallest type that meets your precision
|
|
|
|
* requirements. Again the larger the type then more data needs to be
|
|
|
|
* mapped into the GPU which can be a bottlneck when dealing with
|
|
|
|
* a large number of vertices.
|
|
|
|
*
|
2013-09-03 09:35:54 -04:00
|
|
|
* Return value: (transfer full): A newly allocated #CoglAttribute
|
|
|
|
* describing the layout for a list of attribute values
|
|
|
|
* stored in @array.
|
2010-10-12 07:53:10 -04:00
|
|
|
*
|
|
|
|
* Since: 1.4
|
|
|
|
* Stability: Unstable
|
|
|
|
*/
|
|
|
|
/* XXX: look for a precedent to see if the stride/offset args should
|
|
|
|
* have a different order. */
|
2011-01-20 14:31:53 -05:00
|
|
|
CoglAttribute *
|
2011-03-02 10:01:41 -05:00
|
|
|
cogl_attribute_new (CoglAttributeBuffer *attribute_buffer,
|
2011-01-20 14:31:53 -05:00
|
|
|
const char *name,
|
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 16:56:40 -04:00
|
|
|
size_t stride,
|
|
|
|
size_t offset,
|
2011-01-20 14:31:53 -05:00
|
|
|
int components,
|
|
|
|
CoglAttributeType type);
|
2010-10-12 07:53:10 -04:00
|
|
|
|
2012-08-06 16:19:27 -04:00
|
|
|
/**
|
|
|
|
* cogl_attribute_new_const_1f:
|
|
|
|
* @context: A #CoglContext
|
|
|
|
* @name: The name of the attribute (used to reference it from GLSL)
|
|
|
|
* @value: The constant value for the attribute
|
|
|
|
*
|
|
|
|
* Creates a new, single component, attribute whose value remains
|
|
|
|
* constant across all the vertices of a primitive without needing to
|
|
|
|
* duplicate the value for each vertex.
|
|
|
|
*
|
|
|
|
* The constant @value is a single precision floating point scalar
|
|
|
|
* which should have a corresponding declaration in GLSL code like:
|
|
|
|
*
|
|
|
|
* [|
|
|
|
|
* attribute float name;
|
|
|
|
* |]
|
|
|
|
*
|
2013-09-03 09:35:54 -04:00
|
|
|
* Return value: (transfer full): A newly allocated #CoglAttribute
|
|
|
|
* representing the given constant @value.
|
2012-08-06 16:19:27 -04:00
|
|
|
*/
|
|
|
|
CoglAttribute *
|
|
|
|
cogl_attribute_new_const_1f (CoglContext *context,
|
|
|
|
const char *name,
|
|
|
|
float value);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* cogl_attribute_new_const_2f:
|
|
|
|
* @context: A #CoglContext
|
|
|
|
* @name: The name of the attribute (used to reference it from GLSL)
|
2013-09-03 09:40:41 -04:00
|
|
|
* @component0: The first component of a 2 component vector
|
|
|
|
* @component1: The second component of a 2 component vector
|
2012-08-06 16:19:27 -04:00
|
|
|
*
|
|
|
|
* Creates a new, 2 component, attribute whose value remains
|
|
|
|
* constant across all the vertices of a primitive without needing to
|
|
|
|
* duplicate the value for each vertex.
|
|
|
|
*
|
|
|
|
* The constants (@component0, @component1) represent a 2 component
|
|
|
|
* float vector which should have a corresponding declaration in GLSL
|
|
|
|
* code like:
|
|
|
|
*
|
|
|
|
* [|
|
|
|
|
* attribute vec2 name;
|
|
|
|
* |]
|
|
|
|
*
|
2013-09-03 09:35:54 -04:00
|
|
|
* Return value: (transfer full): A newly allocated #CoglAttribute
|
|
|
|
* representing the given constant vector.
|
2012-08-06 16:19:27 -04:00
|
|
|
*/
|
|
|
|
CoglAttribute *
|
|
|
|
cogl_attribute_new_const_2f (CoglContext *context,
|
|
|
|
const char *name,
|
|
|
|
float component0,
|
|
|
|
float component1);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* cogl_attribute_new_const_3f:
|
|
|
|
* @context: A #CoglContext
|
|
|
|
* @name: The name of the attribute (used to reference it from GLSL)
|
2013-09-03 09:40:41 -04:00
|
|
|
* @component0: The first component of a 3 component vector
|
|
|
|
* @component1: The second component of a 3 component vector
|
|
|
|
* @component2: The third component of a 3 component vector
|
2012-08-06 16:19:27 -04:00
|
|
|
*
|
|
|
|
* Creates a new, 3 component, attribute whose value remains
|
|
|
|
* constant across all the vertices of a primitive without needing to
|
|
|
|
* duplicate the value for each vertex.
|
|
|
|
*
|
|
|
|
* The constants (@component0, @component1, @component2) represent a 3
|
|
|
|
* component float vector which should have a corresponding
|
|
|
|
* declaration in GLSL code like:
|
|
|
|
*
|
|
|
|
* [|
|
|
|
|
* attribute vec3 name;
|
|
|
|
* |]
|
|
|
|
*
|
|
|
|
* unless the built in name "cogl_normal_in" is being used where no
|
|
|
|
* explicit GLSL declaration need be made.
|
|
|
|
*
|
2013-09-03 09:35:54 -04:00
|
|
|
* Return value: (transfer full): A newly allocated #CoglAttribute
|
|
|
|
* representing the given constant vector.
|
2012-08-06 16:19:27 -04:00
|
|
|
*/
|
|
|
|
CoglAttribute *
|
|
|
|
cogl_attribute_new_const_3f (CoglContext *context,
|
|
|
|
const char *name,
|
|
|
|
float component0,
|
|
|
|
float component1,
|
|
|
|
float component2);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* cogl_attribute_new_const_4f:
|
|
|
|
* @context: A #CoglContext
|
|
|
|
* @name: The name of the attribute (used to reference it from GLSL)
|
2013-09-03 09:40:41 -04:00
|
|
|
* @component0: The first component of a 4 component vector
|
|
|
|
* @component1: The second component of a 4 component vector
|
|
|
|
* @component2: The third component of a 4 component vector
|
|
|
|
* @component3: The fourth component of a 4 component vector
|
2012-08-06 16:19:27 -04:00
|
|
|
*
|
|
|
|
* Creates a new, 4 component, attribute whose value remains
|
|
|
|
* constant across all the vertices of a primitive without needing to
|
|
|
|
* duplicate the value for each vertex.
|
|
|
|
*
|
|
|
|
* The constants (@component0, @component1, @component2, @constant3)
|
|
|
|
* represent a 4 component float vector which should have a
|
|
|
|
* corresponding declaration in GLSL code like:
|
|
|
|
*
|
|
|
|
* [|
|
|
|
|
* attribute vec4 name;
|
|
|
|
* |]
|
|
|
|
*
|
|
|
|
* unless one of the built in names "cogl_color_in",
|
|
|
|
* "cogl_tex_coord0_in or "cogl_tex_coord1_in" etc is being used where
|
|
|
|
* no explicit GLSL declaration need be made.
|
|
|
|
*
|
2013-09-03 09:35:54 -04:00
|
|
|
* Return value: (transfer full): A newly allocated #CoglAttribute
|
|
|
|
* representing the given constant vector.
|
2012-08-06 16:19:27 -04:00
|
|
|
*/
|
|
|
|
CoglAttribute *
|
|
|
|
cogl_attribute_new_const_4f (CoglContext *context,
|
|
|
|
const char *name,
|
|
|
|
float component0,
|
|
|
|
float component1,
|
|
|
|
float component2,
|
|
|
|
float component3);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* cogl_attribute_new_const_2fv:
|
|
|
|
* @context: A #CoglContext
|
|
|
|
* @name: The name of the attribute (used to reference it from GLSL)
|
|
|
|
* @value: A pointer to a 2 component float vector
|
|
|
|
*
|
|
|
|
* Creates a new, 2 component, attribute whose value remains
|
|
|
|
* constant across all the vertices of a primitive without needing to
|
|
|
|
* duplicate the value for each vertex.
|
|
|
|
*
|
|
|
|
* The constants (value[0], value[1]) represent a 2 component float
|
|
|
|
* vector which should have a corresponding declaration in GLSL code
|
|
|
|
* like:
|
|
|
|
*
|
|
|
|
* [|
|
|
|
|
* attribute vec2 name;
|
|
|
|
* |]
|
|
|
|
*
|
2013-09-03 09:35:54 -04:00
|
|
|
* Return value: (transfer full): A newly allocated #CoglAttribute
|
|
|
|
* representing the given constant vector.
|
2012-08-06 16:19:27 -04:00
|
|
|
*/
|
|
|
|
CoglAttribute *
|
|
|
|
cogl_attribute_new_const_2fv (CoglContext *context,
|
|
|
|
const char *name,
|
|
|
|
const float *value);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* cogl_attribute_new_const_3fv:
|
|
|
|
* @context: A #CoglContext
|
|
|
|
* @name: The name of the attribute (used to reference it from GLSL)
|
|
|
|
* @value: A pointer to a 3 component float vector
|
|
|
|
*
|
|
|
|
* Creates a new, 3 component, attribute whose value remains
|
|
|
|
* constant across all the vertices of a primitive without needing to
|
|
|
|
* duplicate the value for each vertex.
|
|
|
|
*
|
|
|
|
* The constants (value[0], value[1], value[2]) represent a 3
|
|
|
|
* component float vector which should have a corresponding
|
|
|
|
* declaration in GLSL code like:
|
|
|
|
*
|
|
|
|
* [|
|
|
|
|
* attribute vec3 name;
|
|
|
|
* |]
|
|
|
|
*
|
|
|
|
* unless the built in name "cogl_normal_in" is being used where no
|
|
|
|
* explicit GLSL declaration need be made.
|
|
|
|
*
|
2013-09-03 09:35:54 -04:00
|
|
|
* Return value: (transfer full): A newly allocated #CoglAttribute
|
|
|
|
* representing the given constant vector.
|
2012-08-06 16:19:27 -04:00
|
|
|
*/
|
|
|
|
CoglAttribute *
|
|
|
|
cogl_attribute_new_const_3fv (CoglContext *context,
|
|
|
|
const char *name,
|
|
|
|
const float *value);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* cogl_attribute_new_const_4fv:
|
|
|
|
* @context: A #CoglContext
|
|
|
|
* @name: The name of the attribute (used to reference it from GLSL)
|
|
|
|
* @value: A pointer to a 4 component float vector
|
|
|
|
*
|
|
|
|
* Creates a new, 4 component, attribute whose value remains
|
|
|
|
* constant across all the vertices of a primitive without needing to
|
|
|
|
* duplicate the value for each vertex.
|
|
|
|
*
|
|
|
|
* The constants (value[0], value[1], value[2], value[3]) represent a
|
|
|
|
* 4 component float vector which should have a corresponding
|
|
|
|
* declaration in GLSL code like:
|
|
|
|
*
|
|
|
|
* [|
|
|
|
|
* attribute vec4 name;
|
|
|
|
* |]
|
|
|
|
*
|
|
|
|
* unless one of the built in names "cogl_color_in",
|
|
|
|
* "cogl_tex_coord0_in or "cogl_tex_coord1_in" etc is being used where
|
|
|
|
* no explicit GLSL declaration need be made.
|
|
|
|
*
|
2013-09-03 09:35:54 -04:00
|
|
|
* Return value: (transfer full): A newly allocated #CoglAttribute
|
|
|
|
* representing the given constant vector.
|
2012-08-06 16:19:27 -04:00
|
|
|
*/
|
|
|
|
CoglAttribute *
|
|
|
|
cogl_attribute_new_const_4fv (CoglContext *context,
|
|
|
|
const char *name,
|
|
|
|
const float *value);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* cogl_attribute_new_const_2x2fv:
|
|
|
|
* @context: A #CoglContext
|
|
|
|
* @name: The name of the attribute (used to reference it from GLSL)
|
|
|
|
* @matrix2x2: A pointer to a 2 by 2 matrix
|
|
|
|
* @transpose: Whether the matrix should be transposed on upload or
|
|
|
|
* not
|
|
|
|
*
|
|
|
|
* Creates a new matrix attribute whose value remains constant
|
|
|
|
* across all the vertices of a primitive without needing to duplicate
|
|
|
|
* the value for each vertex.
|
|
|
|
*
|
|
|
|
* @matrix2x2 represent a square 2 by 2 matrix specified in
|
|
|
|
* column-major order (each pair of consecutive numbers represents a
|
|
|
|
* column) which should have a corresponding declaration in GLSL code
|
|
|
|
* like:
|
|
|
|
*
|
|
|
|
* [|
|
|
|
|
* attribute mat2 name;
|
|
|
|
* |]
|
|
|
|
*
|
|
|
|
* If @transpose is %TRUE then all matrix components are rotated
|
|
|
|
* around the diagonal of the matrix such that the first column
|
|
|
|
* becomes the first row and the second column becomes the second row.
|
|
|
|
*
|
2013-09-03 09:35:54 -04:00
|
|
|
* Return value: (transfer full): A newly allocated #CoglAttribute
|
|
|
|
* representing the given constant matrix.
|
2012-08-06 16:19:27 -04:00
|
|
|
*/
|
|
|
|
CoglAttribute *
|
|
|
|
cogl_attribute_new_const_2x2fv (CoglContext *context,
|
|
|
|
const char *name,
|
|
|
|
const float *matrix2x2,
|
|
|
|
CoglBool transpose);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* cogl_attribute_new_const_3x3fv:
|
|
|
|
* @context: A #CoglContext
|
|
|
|
* @name: The name of the attribute (used to reference it from GLSL)
|
|
|
|
* @matrix3x3: A pointer to a 3 by 3 matrix
|
|
|
|
* @transpose: Whether the matrix should be transposed on upload or
|
|
|
|
* not
|
|
|
|
*
|
|
|
|
* Creates a new matrix attribute whose value remains constant
|
|
|
|
* across all the vertices of a primitive without needing to duplicate
|
|
|
|
* the value for each vertex.
|
|
|
|
*
|
|
|
|
* @matrix3x3 represent a square 3 by 3 matrix specified in
|
|
|
|
* column-major order (each triple of consecutive numbers represents a
|
|
|
|
* column) which should have a corresponding declaration in GLSL code
|
|
|
|
* like:
|
|
|
|
*
|
|
|
|
* [|
|
|
|
|
* attribute mat3 name;
|
|
|
|
* |]
|
|
|
|
*
|
|
|
|
* If @transpose is %TRUE then all matrix components are rotated
|
|
|
|
* around the diagonal of the matrix such that the first column
|
|
|
|
* becomes the first row and the second column becomes the second row
|
|
|
|
* etc.
|
|
|
|
*
|
2013-09-03 09:35:54 -04:00
|
|
|
* Return value: (transfer full): A newly allocated #CoglAttribute
|
|
|
|
* representing the given constant matrix.
|
2012-08-06 16:19:27 -04:00
|
|
|
*/
|
|
|
|
CoglAttribute *
|
|
|
|
cogl_attribute_new_const_3x3fv (CoglContext *context,
|
|
|
|
const char *name,
|
|
|
|
const float *matrix3x3,
|
|
|
|
CoglBool transpose);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* cogl_attribute_new_const_4x4fv:
|
|
|
|
* @context: A #CoglContext
|
|
|
|
* @name: The name of the attribute (used to reference it from GLSL)
|
|
|
|
* @matrix4x4: A pointer to a 4 by 4 matrix
|
|
|
|
* @transpose: Whether the matrix should be transposed on upload or
|
|
|
|
* not
|
|
|
|
*
|
|
|
|
* Creates a new matrix attribute whose value remains constant
|
|
|
|
* across all the vertices of a primitive without needing to duplicate
|
|
|
|
* the value for each vertex.
|
|
|
|
*
|
|
|
|
* @matrix4x4 represent a square 4 by 4 matrix specified in
|
|
|
|
* column-major order (each 4-tuple of consecutive numbers represents a
|
|
|
|
* column) which should have a corresponding declaration in GLSL code
|
|
|
|
* like:
|
|
|
|
*
|
|
|
|
* [|
|
|
|
|
* attribute mat4 name;
|
|
|
|
* |]
|
|
|
|
*
|
|
|
|
* If @transpose is %TRUE then all matrix components are rotated
|
|
|
|
* around the diagonal of the matrix such that the first column
|
|
|
|
* becomes the first row and the second column becomes the second row
|
|
|
|
* etc.
|
|
|
|
*
|
2013-09-03 09:35:54 -04:00
|
|
|
* Return value: (transfer full): A newly allocated #CoglAttribute
|
|
|
|
* representing the given constant matrix.
|
2012-08-06 16:19:27 -04:00
|
|
|
*/
|
|
|
|
CoglAttribute *
|
|
|
|
cogl_attribute_new_const_4x4fv (CoglContext *context,
|
|
|
|
const char *name,
|
|
|
|
const float *matrix4x4,
|
|
|
|
CoglBool transpose);
|
|
|
|
|
2011-12-01 07:33:30 -05:00
|
|
|
/**
|
|
|
|
* cogl_attribute_set_normalized:
|
|
|
|
* @attribute: A #CoglAttribute
|
|
|
|
* @normalized: The new value for the normalized property.
|
|
|
|
*
|
|
|
|
* Sets whether fixed point attribute types are mapped to the range
|
|
|
|
* 0→1. For example when this property is TRUE and a
|
|
|
|
* %COGL_ATTRIBUTE_TYPE_UNSIGNED_BYTE type is used then the value 255
|
|
|
|
* will be mapped to 1.0.
|
|
|
|
*
|
|
|
|
* The default value of this property depends on the name of the
|
|
|
|
* attribute. For the builtin properties cogl_color_in and
|
|
|
|
* cogl_normal_in it will default to TRUE and for all other names it
|
|
|
|
* will default to FALSE.
|
|
|
|
*
|
|
|
|
* Stability: unstable
|
|
|
|
* Since: 1.10
|
|
|
|
*/
|
|
|
|
void
|
|
|
|
cogl_attribute_set_normalized (CoglAttribute *attribute,
|
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 16:56:40 -04:00
|
|
|
CoglBool normalized);
|
2011-12-01 07:33:30 -05:00
|
|
|
|
|
|
|
/**
|
|
|
|
* cogl_attribute_get_normalized:
|
|
|
|
* @attribute: A #CoglAttribute
|
|
|
|
*
|
|
|
|
* Return value: the value of the normalized property set with
|
|
|
|
* cogl_attribute_set_normalized().
|
|
|
|
*
|
|
|
|
* Stability: unstable
|
|
|
|
* Since: 1.10
|
|
|
|
*/
|
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 16:56:40 -04:00
|
|
|
CoglBool
|
2011-12-01 07:33:30 -05:00
|
|
|
cogl_attribute_get_normalized (CoglAttribute *attribute);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* cogl_attribute_get_buffer:
|
|
|
|
* @attribute: A #CoglAttribute
|
|
|
|
*
|
2013-09-03 09:35:54 -04:00
|
|
|
* Return value: (transfer none): the #CoglAttributeBuffer that was
|
|
|
|
* set with cogl_attribute_set_buffer() or cogl_attribute_new().
|
2011-12-01 07:33:30 -05:00
|
|
|
*
|
|
|
|
* Stability: unstable
|
|
|
|
* Since: 1.10
|
|
|
|
*/
|
|
|
|
CoglAttributeBuffer *
|
|
|
|
cogl_attribute_get_buffer (CoglAttribute *attribute);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* cogl_attribute_set_buffer:
|
|
|
|
* @attribute: A #CoglAttribute
|
|
|
|
* @attribute_buffer: A #CoglAttributeBuffer
|
|
|
|
*
|
|
|
|
* Sets a new #CoglAttributeBuffer for the attribute.
|
|
|
|
*
|
|
|
|
* Stability: unstable
|
|
|
|
* Since: 1.10
|
|
|
|
*/
|
|
|
|
void
|
|
|
|
cogl_attribute_set_buffer (CoglAttribute *attribute,
|
|
|
|
CoglAttributeBuffer *attribute_buffer);
|
|
|
|
|
2010-10-12 07:53:10 -04:00
|
|
|
/**
|
2011-01-20 14:31:53 -05:00
|
|
|
* cogl_is_attribute:
|
2010-10-12 07:53:10 -04:00
|
|
|
* @object: A #CoglObject
|
|
|
|
*
|
2011-01-20 14:31:53 -05:00
|
|
|
* Gets whether the given object references a #CoglAttribute.
|
2010-10-12 07:53:10 -04:00
|
|
|
*
|
2012-04-16 09:14:10 -04:00
|
|
|
* Return value: %TRUE if the @object references a #CoglAttribute,
|
2010-10-12 07:53:10 -04:00
|
|
|
* %FALSE otherwise
|
|
|
|
*/
|
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 16:56:40 -04:00
|
|
|
CoglBool
|
2011-01-20 14:31:53 -05:00
|
|
|
cogl_is_attribute (void *object);
|
2010-10-12 07:53:10 -04:00
|
|
|
|
2012-11-22 13:01:10 -05:00
|
|
|
COGL_END_DECLS
|
2010-10-12 07:53:10 -04:00
|
|
|
|
2011-01-20 14:31:53 -05:00
|
|
|
#endif /* __COGL_ATTRIBUTE_H__ */
|
2010-10-12 07:53:10 -04:00
|
|
|
|