mirror of
https://github.com/brl/mutter.git
synced 2024-11-26 18:11:05 -05:00
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.
This commit is contained in:
parent
0cd077dc7e
commit
2d58d3f1b6
@ -96,6 +96,252 @@ cogl_primitive_new (CoglVerticesMode mode,
|
||||
attributes);
|
||||
}
|
||||
|
||||
CoglPrimitive *
|
||||
cogl_primitive_new_p3 (CoglVerticesMode mode,
|
||||
int n_vertices,
|
||||
const CoglP3Vertex *data)
|
||||
{
|
||||
CoglVertexArray *array =
|
||||
cogl_vertex_array_new (n_vertices * sizeof (CoglP3Vertex));
|
||||
CoglBuffer *buffer = COGL_BUFFER (array);
|
||||
CoglVertexAttribute *attributes[2];
|
||||
CoglPrimitive *prim;
|
||||
|
||||
cogl_buffer_set_data (buffer, 0, (guint8 *)data,
|
||||
n_vertices * sizeof (CoglP3Vertex));
|
||||
attributes[0] =
|
||||
cogl_vertex_attribute_new (array,
|
||||
"cogl_position_in",
|
||||
sizeof (CoglP3Vertex),
|
||||
offsetof (CoglP3Vertex, x),
|
||||
3,
|
||||
COGL_VERTEX_ATTRIBUTE_TYPE_FLOAT);
|
||||
attributes[1] = NULL;
|
||||
prim = cogl_primitive_new_with_attributes_array (mode, n_vertices,
|
||||
attributes);
|
||||
cogl_object_unref (prim);
|
||||
return prim;
|
||||
}
|
||||
|
||||
CoglPrimitive *
|
||||
cogl_primitive_new_p2c4 (CoglVerticesMode mode,
|
||||
int n_vertices,
|
||||
const CoglP2C4Vertex *data)
|
||||
{
|
||||
CoglVertexArray *array =
|
||||
cogl_vertex_array_new (n_vertices * sizeof (CoglP2C4Vertex));
|
||||
CoglBuffer *buffer = COGL_BUFFER (array);
|
||||
CoglVertexAttribute *attributes[3];
|
||||
CoglPrimitive *prim;
|
||||
|
||||
cogl_buffer_set_data (buffer, 0, (guint8 *)data,
|
||||
n_vertices * sizeof (CoglP2C4Vertex));
|
||||
attributes[0] =
|
||||
cogl_vertex_attribute_new (array,
|
||||
"cogl_position_in",
|
||||
sizeof (CoglP2C4Vertex),
|
||||
offsetof (CoglP2C4Vertex, x),
|
||||
2,
|
||||
COGL_VERTEX_ATTRIBUTE_TYPE_FLOAT);
|
||||
attributes[1] =
|
||||
cogl_vertex_attribute_new (array,
|
||||
"cogl_color_in",
|
||||
sizeof (CoglP2C4Vertex),
|
||||
offsetof (CoglP2C4Vertex, r),
|
||||
4,
|
||||
COGL_VERTEX_ATTRIBUTE_TYPE_UNSIGNED_BYTE);
|
||||
attributes[2] = NULL;
|
||||
prim = cogl_primitive_new_with_attributes_array (mode, n_vertices,
|
||||
attributes);
|
||||
cogl_object_unref (prim);
|
||||
return prim;
|
||||
}
|
||||
|
||||
CoglPrimitive *
|
||||
cogl_primitive_new_p3c4 (CoglVerticesMode mode,
|
||||
int n_vertices,
|
||||
const CoglP3C4Vertex *data)
|
||||
{
|
||||
CoglVertexArray *array =
|
||||
cogl_vertex_array_new (n_vertices * sizeof (CoglP3C4Vertex));
|
||||
CoglBuffer *buffer = COGL_BUFFER (array);
|
||||
CoglVertexAttribute *attributes[3];
|
||||
CoglPrimitive *prim;
|
||||
|
||||
cogl_buffer_set_data (buffer, 0, (guint8 *)data,
|
||||
n_vertices * sizeof (CoglP3C4Vertex));
|
||||
attributes[0] =
|
||||
cogl_vertex_attribute_new (array,
|
||||
"cogl_position_in",
|
||||
sizeof (CoglP3C4Vertex),
|
||||
offsetof (CoglP3C4Vertex, x),
|
||||
3,
|
||||
COGL_VERTEX_ATTRIBUTE_TYPE_FLOAT);
|
||||
attributes[1] =
|
||||
cogl_vertex_attribute_new (array,
|
||||
"cogl_color_in",
|
||||
sizeof (CoglP3C4Vertex),
|
||||
offsetof (CoglP3C4Vertex, r),
|
||||
4,
|
||||
COGL_VERTEX_ATTRIBUTE_TYPE_UNSIGNED_BYTE);
|
||||
attributes[2] = NULL;
|
||||
prim = cogl_primitive_new_with_attributes_array (mode, n_vertices,
|
||||
attributes);
|
||||
cogl_object_unref (prim);
|
||||
return prim;
|
||||
}
|
||||
|
||||
CoglPrimitive *
|
||||
cogl_primitive_new_p2t2 (CoglVerticesMode mode,
|
||||
int n_vertices,
|
||||
const CoglP2T2Vertex *data)
|
||||
{
|
||||
CoglVertexArray *array =
|
||||
cogl_vertex_array_new (n_vertices * sizeof (CoglP2T2Vertex));
|
||||
CoglBuffer *buffer = COGL_BUFFER (array);
|
||||
CoglVertexAttribute *attributes[3];
|
||||
CoglPrimitive *prim;
|
||||
|
||||
cogl_buffer_set_data (buffer, 0, (guint8 *)data,
|
||||
n_vertices * sizeof (CoglP2T2Vertex));
|
||||
attributes[0] =
|
||||
cogl_vertex_attribute_new (array,
|
||||
"cogl_position_in",
|
||||
sizeof (CoglP2T2Vertex),
|
||||
offsetof (CoglP2T2Vertex, x),
|
||||
2,
|
||||
COGL_VERTEX_ATTRIBUTE_TYPE_FLOAT);
|
||||
attributes[1] =
|
||||
cogl_vertex_attribute_new (array,
|
||||
"cogl_tex_coord0_in",
|
||||
sizeof (CoglP2T2Vertex),
|
||||
offsetof (CoglP2T2Vertex, x),
|
||||
2,
|
||||
COGL_VERTEX_ATTRIBUTE_TYPE_FLOAT);
|
||||
attributes[2] = NULL;
|
||||
prim = cogl_primitive_new_with_attributes_array (mode, n_vertices,
|
||||
attributes);
|
||||
cogl_object_unref (array);
|
||||
return prim;
|
||||
}
|
||||
|
||||
CoglPrimitive *
|
||||
cogl_primitive_new_p3t2 (CoglVerticesMode mode,
|
||||
int n_vertices,
|
||||
const CoglP3T2Vertex *data)
|
||||
{
|
||||
CoglVertexArray *array =
|
||||
cogl_vertex_array_new (n_vertices * sizeof (CoglP3T2Vertex));
|
||||
CoglBuffer *buffer = COGL_BUFFER (array);
|
||||
CoglVertexAttribute *attributes[3];
|
||||
CoglPrimitive *prim;
|
||||
|
||||
cogl_buffer_set_data (buffer, 0, (guint8 *)data,
|
||||
n_vertices * sizeof (CoglP3T2Vertex));
|
||||
attributes[0] =
|
||||
cogl_vertex_attribute_new (array,
|
||||
"cogl_position_in",
|
||||
sizeof (CoglP3T2Vertex),
|
||||
offsetof (CoglP3T2Vertex, x),
|
||||
3,
|
||||
COGL_VERTEX_ATTRIBUTE_TYPE_FLOAT);
|
||||
attributes[1] =
|
||||
cogl_vertex_attribute_new (array,
|
||||
"cogl_tex_coord0_in",
|
||||
sizeof (CoglP3T2Vertex),
|
||||
offsetof (CoglP3T2Vertex, x),
|
||||
2,
|
||||
COGL_VERTEX_ATTRIBUTE_TYPE_FLOAT);
|
||||
attributes[2] = NULL;
|
||||
prim = cogl_primitive_new_with_attributes_array (mode, n_vertices,
|
||||
attributes);
|
||||
cogl_object_unref (prim);
|
||||
return prim;
|
||||
|
||||
}
|
||||
|
||||
CoglPrimitive *
|
||||
cogl_primitive_new_p2t2c4 (CoglVerticesMode mode,
|
||||
int n_vertices,
|
||||
const CoglP2T2C4Vertex *data)
|
||||
{
|
||||
CoglVertexArray *array =
|
||||
cogl_vertex_array_new (n_vertices * sizeof (CoglP2T2C4Vertex));
|
||||
CoglBuffer *buffer = COGL_BUFFER (array);
|
||||
CoglVertexAttribute *attributes[4];
|
||||
CoglPrimitive *prim;
|
||||
|
||||
cogl_buffer_set_data (buffer, 0, (guint8 *)data,
|
||||
n_vertices * sizeof (CoglP2T2C4Vertex));
|
||||
attributes[0] =
|
||||
cogl_vertex_attribute_new (array,
|
||||
"cogl_position_in",
|
||||
sizeof (CoglP2T2C4Vertex),
|
||||
offsetof (CoglP2T2C4Vertex, x),
|
||||
2,
|
||||
COGL_VERTEX_ATTRIBUTE_TYPE_FLOAT);
|
||||
attributes[1] =
|
||||
cogl_vertex_attribute_new (array,
|
||||
"cogl_tex_coord0_in",
|
||||
sizeof (CoglP2T2C4Vertex),
|
||||
offsetof (CoglP2T2C4Vertex, x),
|
||||
2,
|
||||
COGL_VERTEX_ATTRIBUTE_TYPE_FLOAT);
|
||||
attributes[2] =
|
||||
cogl_vertex_attribute_new (array,
|
||||
"cogl_color_in",
|
||||
sizeof (CoglP2T2C4Vertex),
|
||||
offsetof (CoglP2T2C4Vertex, r),
|
||||
4,
|
||||
COGL_VERTEX_ATTRIBUTE_TYPE_UNSIGNED_BYTE);
|
||||
attributes[3] = NULL;
|
||||
prim = cogl_primitive_new_with_attributes_array (mode, n_vertices,
|
||||
attributes);
|
||||
cogl_object_unref (prim);
|
||||
return prim;
|
||||
}
|
||||
|
||||
CoglPrimitive *
|
||||
cogl_primitive_new_p3t2c4 (CoglVerticesMode mode,
|
||||
int n_vertices,
|
||||
const CoglP3T2C4Vertex *data)
|
||||
{
|
||||
CoglVertexArray *array =
|
||||
cogl_vertex_array_new (n_vertices * sizeof (CoglP3T2C4Vertex));
|
||||
CoglBuffer *buffer = COGL_BUFFER (array);
|
||||
CoglVertexAttribute *attributes[4];
|
||||
CoglPrimitive *prim;
|
||||
|
||||
cogl_buffer_set_data (buffer, 0, (guint8 *)data,
|
||||
n_vertices * sizeof (CoglP3T2C4Vertex));
|
||||
attributes[0] =
|
||||
cogl_vertex_attribute_new (array,
|
||||
"cogl_position_in",
|
||||
sizeof (CoglP3T2C4Vertex),
|
||||
offsetof (CoglP3T2C4Vertex, x),
|
||||
3,
|
||||
COGL_VERTEX_ATTRIBUTE_TYPE_FLOAT);
|
||||
attributes[1] =
|
||||
cogl_vertex_attribute_new (array,
|
||||
"cogl_tex_coord0_in",
|
||||
sizeof (CoglP3T2C4Vertex),
|
||||
offsetof (CoglP3T2C4Vertex, x),
|
||||
2,
|
||||
COGL_VERTEX_ATTRIBUTE_TYPE_FLOAT);
|
||||
attributes[2] =
|
||||
cogl_vertex_attribute_new (array,
|
||||
"cogl_color_in",
|
||||
sizeof (CoglP3T2C4Vertex),
|
||||
offsetof (CoglP3T2C4Vertex, r),
|
||||
4,
|
||||
COGL_VERTEX_ATTRIBUTE_TYPE_UNSIGNED_BYTE);
|
||||
attributes[3] = NULL;
|
||||
prim = cogl_primitive_new_with_attributes_array (mode, n_vertices,
|
||||
attributes);
|
||||
cogl_object_unref (prim);
|
||||
return prim;
|
||||
}
|
||||
|
||||
static void
|
||||
free_attributes_list (CoglPrimitive *primitive)
|
||||
{
|
||||
|
@ -47,7 +47,7 @@ G_BEGIN_DECLS
|
||||
typedef struct _CoglPrimitive CoglPrimitive;
|
||||
|
||||
/**
|
||||
* CoglV2Vertex:
|
||||
* CoglP2Vertex:
|
||||
* @x: The x component of a position attribute
|
||||
* @y: The y component of a position attribute
|
||||
*
|
||||
@ -60,10 +60,10 @@ typedef struct _CoglPrimitive CoglPrimitive;
|
||||
typedef struct
|
||||
{
|
||||
float x, y;
|
||||
} CoglV2Vertex;
|
||||
} CoglP2Vertex;
|
||||
|
||||
/**
|
||||
* CoglV3Vertex:
|
||||
* CoglP3Vertex:
|
||||
* @x: The x component of a position attribute
|
||||
* @y: The y component of a position attribute
|
||||
* @z: The z component of a position attribute
|
||||
@ -77,10 +77,10 @@ typedef struct
|
||||
typedef struct
|
||||
{
|
||||
float x, y, z;
|
||||
} CoglV3Vertex;
|
||||
} CoglP3Vertex;
|
||||
|
||||
/**
|
||||
* CoglV2C4Vertex:
|
||||
* CoglP2C4Vertex:
|
||||
* @x: The x component of a position attribute
|
||||
* @y: The y component of a position attribute
|
||||
* @r: The red component of a color attribute
|
||||
@ -98,10 +98,10 @@ typedef struct
|
||||
{
|
||||
float x, y;
|
||||
guint8 r, g, b, a;
|
||||
} CoglV2C4Vertex;
|
||||
} CoglP2C4Vertex;
|
||||
|
||||
/**
|
||||
* CoglV3C4Vertex:
|
||||
* CoglP3C4Vertex:
|
||||
* @x: The x component of a position attribute
|
||||
* @y: The y component of a position attribute
|
||||
* @z: The z component of a position attribute
|
||||
@ -120,10 +120,10 @@ typedef struct
|
||||
{
|
||||
float x, y, z;
|
||||
guint8 r, g, b, a;
|
||||
} CoglV3C4Vertex;
|
||||
} CoglP3C4Vertex;
|
||||
|
||||
/**
|
||||
* CoglV2T2Vertex:
|
||||
* CoglP2T2Vertex:
|
||||
* @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
|
||||
@ -139,10 +139,10 @@ typedef struct
|
||||
{
|
||||
float x, y;
|
||||
float s, t;
|
||||
} CoglV2T2Vertex;
|
||||
} CoglP2T2Vertex;
|
||||
|
||||
/**
|
||||
* CoglV3T2Vertex:
|
||||
* CoglP3T2Vertex:
|
||||
* @x: The x component of a position attribute
|
||||
* @y: The y component of a position attribute
|
||||
* @z: The z component of a position attribute
|
||||
@ -159,11 +159,11 @@ typedef struct
|
||||
{
|
||||
float x, y, z;
|
||||
float s, t;
|
||||
} CoglV3T2Vertex;
|
||||
} CoglP3T2Vertex;
|
||||
|
||||
|
||||
/**
|
||||
* CoglV2T2C4Vertex:
|
||||
* CoglP2T2C4Vertex:
|
||||
* @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
|
||||
@ -184,10 +184,10 @@ typedef struct
|
||||
float x, y;
|
||||
float s, t;
|
||||
guint8 r, g, b, a;
|
||||
} CoglV2T2C4Vertex;
|
||||
} CoglP2T2C4Vertex;
|
||||
|
||||
/**
|
||||
* CoglV3T2C4Vertex:
|
||||
* CoglP3T2C4Vertex:
|
||||
* @x: The x component of a position attribute
|
||||
* @y: The y component of a position attribute
|
||||
* @z: The z component of a position attribute
|
||||
@ -209,7 +209,7 @@ typedef struct
|
||||
float x, y, z;
|
||||
float s, t;
|
||||
guint8 r, g, b, a;
|
||||
} CoglV3T2C4Vertex;
|
||||
} CoglP3T2C4Vertex;
|
||||
|
||||
/**
|
||||
* cogl_primitive_new:
|
||||
@ -237,6 +237,40 @@ cogl_primitive_new_with_attributes_array (CoglVerticesMode mode,
|
||||
int n_vertices,
|
||||
CoglVertexAttribute **attributes);
|
||||
|
||||
CoglPrimitive *
|
||||
cogl_primitive_new_with_v3_attributes (CoglVerticesMode mode,
|
||||
int n_vertices,
|
||||
const CoglP3Vertex *data);
|
||||
|
||||
CoglPrimitive *
|
||||
cogl_primitive_new_with_v2c4_attributes (CoglVerticesMode mode,
|
||||
int n_vertices,
|
||||
const CoglP2C4Vertex *data);
|
||||
|
||||
CoglPrimitive *
|
||||
cogl_primitive_new_with_v3c4_attributes (CoglVerticesMode mode,
|
||||
int n_vertices,
|
||||
const CoglP3C4Vertex *data);
|
||||
|
||||
CoglPrimitive *
|
||||
cogl_primitive_new_with_v2t2_attributes (CoglVerticesMode mode,
|
||||
int n_vertices,
|
||||
const CoglP2T2Vertex *data);
|
||||
|
||||
CoglPrimitive *
|
||||
cogl_primitive_new_with_v3t2_attributes (CoglVerticesMode mode,
|
||||
int n_vertices,
|
||||
const CoglP3T2Vertex *data);
|
||||
|
||||
CoglPrimitive *
|
||||
cogl_primitive_new_with_v2t2c4_attributes (CoglVerticesMode mode,
|
||||
int n_vertices,
|
||||
const CoglP2T2C4Vertex *data);
|
||||
|
||||
CoglPrimitive *
|
||||
cogl_primitive_new_with_v3t2c4_attributes (CoglVerticesMode mode,
|
||||
int n_vertices,
|
||||
const CoglP3T2C4Vertex *data);
|
||||
int
|
||||
cogl_primitive_get_first_vertex (CoglPrimitive *primitive);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user