cogl-atlas-texture: Add a callback for when any atlas reorganizes
This adds cogl_atlas_texture_* functions to register a callback that will get invoked whenever any of the CoglAtlas's the textures use get reorganized. The callback is global and is not tied to any particular atlas texture.
This commit is contained in:
parent
e3c57941bd
commit
241c3c0d43
@ -69,4 +69,12 @@ _cogl_atlas_texture_new_with_size (unsigned int width,
|
||||
CoglTextureFlags flags,
|
||||
CoglPixelFormat internal_format);
|
||||
|
||||
void
|
||||
_cogl_atlas_texture_add_reorganize_callback (GHookFunc callback,
|
||||
void *user_data);
|
||||
|
||||
void
|
||||
_cogl_atlas_texture_remove_reorganize_callback (GHookFunc callback,
|
||||
void *user_data);
|
||||
|
||||
#endif /* __COGL_ATLAS_TEXTURE_H */
|
||||
|
@ -142,6 +142,8 @@ _cogl_atlas_texture_post_reorganize_cb (void *user_data)
|
||||
{
|
||||
CoglAtlas *atlas = user_data;
|
||||
|
||||
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
|
||||
|
||||
if (atlas->map)
|
||||
{
|
||||
CoglAtlasTextureGetRectanglesData data;
|
||||
@ -171,6 +173,9 @@ _cogl_atlas_texture_post_reorganize_cb (void *user_data)
|
||||
|
||||
g_free (data.textures);
|
||||
}
|
||||
|
||||
/* Notify any listeners that an atlas has changed */
|
||||
g_hook_list_invoke (&ctx->atlas_reorganize_callbacks, FALSE);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -746,6 +751,37 @@ _cogl_atlas_texture_new_from_bitmap (CoglBitmap *bmp,
|
||||
return atlas_tex_handle;
|
||||
}
|
||||
|
||||
void
|
||||
_cogl_atlas_texture_add_reorganize_callback (GHookFunc callback,
|
||||
void *user_data)
|
||||
{
|
||||
GHook *hook;
|
||||
|
||||
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
|
||||
|
||||
hook = g_hook_alloc (&ctx->atlas_reorganize_callbacks);
|
||||
hook->func = callback;
|
||||
hook->data = user_data;
|
||||
g_hook_prepend (&ctx->atlas_reorganize_callbacks, hook);
|
||||
}
|
||||
|
||||
void
|
||||
_cogl_atlas_texture_remove_reorganize_callback (GHookFunc callback,
|
||||
void *user_data)
|
||||
{
|
||||
GHook *hook;
|
||||
|
||||
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
|
||||
|
||||
hook = g_hook_find_func_data (&ctx->atlas_reorganize_callbacks,
|
||||
FALSE,
|
||||
callback,
|
||||
user_data);
|
||||
|
||||
if (hook)
|
||||
g_hook_destroy_link (&ctx->atlas_reorganize_callbacks, hook);
|
||||
}
|
||||
|
||||
static const CoglTextureVtable
|
||||
cogl_atlas_texture_vtable =
|
||||
{
|
||||
|
@ -186,6 +186,7 @@ struct _CoglContext
|
||||
CoglPipeline *blit_texture_pipeline;
|
||||
|
||||
GSList *atlases;
|
||||
GHookList atlas_reorganize_callbacks;
|
||||
|
||||
/* This debugging variable is used to pick a colour for visually
|
||||
displaying the quad batches. It needs to be global so that it can
|
||||
|
@ -353,6 +353,7 @@ cogl_context_new (CoglDisplay *display,
|
||||
_cogl_flush_face_winding ();
|
||||
|
||||
context->atlases = NULL;
|
||||
g_hook_list_init (&context->atlas_reorganize_callbacks, sizeof (GHook));
|
||||
|
||||
_context->buffer_map_fallback_array = g_byte_array_new ();
|
||||
_context->buffer_map_fallback_in_use = FALSE;
|
||||
@ -433,6 +434,7 @@ _cogl_context_free (CoglContext *context)
|
||||
_cogl_clip_stack_unref (context->current_clip_stack);
|
||||
|
||||
g_slist_free (context->atlases);
|
||||
g_hook_list_clear (&context->atlas_reorganize_callbacks);
|
||||
|
||||
_cogl_bitmask_destroy (&context->arrays_enabled);
|
||||
_cogl_bitmask_destroy (&context->temp_bitmask);
|
||||
|
Loading…
Reference in New Issue
Block a user