cogl: Add function cogl_2d_primitives_immediate
For use in batching multiple primitives as a single GL upload. https://gitlab.gnome.org/GNOME/mutter/merge_requests/969
This commit is contained in:
parent
67d9995280
commit
99cc435730
2 changed files with 40 additions and 21 deletions
|
@ -47,6 +47,13 @@ _cogl_rectangle_immediate (CoglFramebuffer *framebuffer,
|
|||
float x_2,
|
||||
float y_2);
|
||||
|
||||
void
|
||||
cogl_2d_primitives_immediate (CoglFramebuffer *framebuffer,
|
||||
CoglPipeline *pipeline,
|
||||
CoglVerticesMode mode,
|
||||
const CoglVertexP2 *vertices,
|
||||
unsigned int n_vertices);
|
||||
|
||||
typedef struct _CoglMultiTexturedRect
|
||||
{
|
||||
const float *position; /* x0,y0,x1,y1 */
|
||||
|
|
|
@ -708,42 +708,31 @@ _cogl_framebuffer_draw_multitextured_rectangles (
|
|||
}
|
||||
|
||||
void
|
||||
_cogl_rectangle_immediate (CoglFramebuffer *framebuffer,
|
||||
CoglPipeline *pipeline,
|
||||
float x_1,
|
||||
float y_1,
|
||||
float x_2,
|
||||
float y_2)
|
||||
cogl_2d_primitives_immediate (CoglFramebuffer *framebuffer,
|
||||
CoglPipeline *pipeline,
|
||||
CoglVerticesMode mode,
|
||||
const CoglVertexP2 *vertices,
|
||||
unsigned int n_vertices)
|
||||
{
|
||||
/* Draw a rectangle using the vertex array API to avoid going
|
||||
through the journal. This should only be used in cases where the
|
||||
code might be called while the journal is already being flushed
|
||||
such as when flushing the clip state */
|
||||
CoglContext *ctx = framebuffer->context;
|
||||
float vertices[8] =
|
||||
{
|
||||
x_1, y_1,
|
||||
x_1, y_2,
|
||||
x_2, y_1,
|
||||
x_2, y_2
|
||||
};
|
||||
CoglAttributeBuffer *attribute_buffer;
|
||||
CoglAttribute *attributes[1];
|
||||
size_t vertices_size = sizeof (CoglVertexP2) * n_vertices;
|
||||
|
||||
attribute_buffer =
|
||||
cogl_attribute_buffer_new (ctx, sizeof (vertices), vertices);
|
||||
cogl_attribute_buffer_new (ctx, vertices_size, vertices);
|
||||
attributes[0] = cogl_attribute_new (attribute_buffer,
|
||||
"cogl_position_in",
|
||||
sizeof (float) * 2, /* stride */
|
||||
sizeof (CoglVertexP2), /* stride */
|
||||
0, /* offset */
|
||||
2, /* n_components */
|
||||
COGL_ATTRIBUTE_TYPE_FLOAT);
|
||||
|
||||
_cogl_framebuffer_draw_attributes (framebuffer,
|
||||
pipeline,
|
||||
COGL_VERTICES_MODE_TRIANGLE_STRIP,
|
||||
mode,
|
||||
0, /* first_index */
|
||||
4, /* n_vertices */
|
||||
n_vertices,
|
||||
attributes,
|
||||
1,
|
||||
COGL_DRAW_SKIP_JOURNAL_FLUSH |
|
||||
|
@ -754,3 +743,26 @@ _cogl_rectangle_immediate (CoglFramebuffer *framebuffer,
|
|||
cogl_object_unref (attributes[0]);
|
||||
cogl_object_unref (attribute_buffer);
|
||||
}
|
||||
|
||||
void
|
||||
_cogl_rectangle_immediate (CoglFramebuffer *framebuffer,
|
||||
CoglPipeline *pipeline,
|
||||
float x_1,
|
||||
float y_1,
|
||||
float x_2,
|
||||
float y_2)
|
||||
{
|
||||
CoglVertexP2 vertices[4] =
|
||||
{
|
||||
{x_1, y_1},
|
||||
{x_1, y_2},
|
||||
{x_2, y_1},
|
||||
{x_2, y_2}
|
||||
};
|
||||
|
||||
cogl_2d_primitives_immediate (framebuffer,
|
||||
pipeline,
|
||||
COGL_VERTICES_MODE_TRIANGLE_STRIP,
|
||||
vertices,
|
||||
4);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue