cogl-atlas: Convert to be a CoglObject subclass
To implement multiple atlases it will be useful to have ref-counting on the CoglAtlas so it makes sense to convert it to be a CoglObject.
This commit is contained in:
parent
03d33a6f4d
commit
0f0f763570
@ -63,6 +63,10 @@
|
|||||||
#define GL_FRAMEBUFFER_COMPLETE 0x8CD5
|
#define GL_FRAMEBUFFER_COMPLETE 0x8CD5
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static void _cogl_atlas_free (CoglAtlas *atlas);
|
||||||
|
|
||||||
|
COGL_OBJECT_INTERNAL_DEFINE (Atlas, atlas);
|
||||||
|
|
||||||
/* If we want to do mulitple blits from a texture (such as when
|
/* If we want to do mulitple blits from a texture (such as when
|
||||||
reorganizing the atlas) then it's quicker to download all of the
|
reorganizing the atlas) then it's quicker to download all of the
|
||||||
data once and upload multiple times from that. This struct is used
|
data once and upload multiple times from that. This struct is used
|
||||||
@ -209,12 +213,14 @@ _cogl_atlas_new (CoglPixelFormat texture_format,
|
|||||||
atlas->texture_format = texture_format;
|
atlas->texture_format = texture_format;
|
||||||
_cogl_callback_list_init (&atlas->reorganize_callbacks);
|
_cogl_callback_list_init (&atlas->reorganize_callbacks);
|
||||||
|
|
||||||
return atlas;
|
return _cogl_atlas_object_new (atlas);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
static void
|
||||||
_cogl_atlas_free (CoglAtlas *atlas)
|
_cogl_atlas_free (CoglAtlas *atlas)
|
||||||
{
|
{
|
||||||
|
COGL_NOTE (ATLAS, "%p: Atlas destroyed", atlas);
|
||||||
|
|
||||||
if (atlas->texture)
|
if (atlas->texture)
|
||||||
cogl_handle_unref (atlas->texture);
|
cogl_handle_unref (atlas->texture);
|
||||||
if (atlas->map)
|
if (atlas->map)
|
||||||
|
@ -26,6 +26,7 @@
|
|||||||
|
|
||||||
#include "cogl-rectangle-map.h"
|
#include "cogl-rectangle-map.h"
|
||||||
#include "cogl-callback-list.h"
|
#include "cogl-callback-list.h"
|
||||||
|
#include "cogl-object-private.h"
|
||||||
|
|
||||||
typedef void
|
typedef void
|
||||||
(* CoglAtlasUpdatePositionCallback) (void *user_data,
|
(* CoglAtlasUpdatePositionCallback) (void *user_data,
|
||||||
@ -40,8 +41,12 @@ typedef enum
|
|||||||
|
|
||||||
typedef struct _CoglAtlas CoglAtlas;
|
typedef struct _CoglAtlas CoglAtlas;
|
||||||
|
|
||||||
|
#define COGL_ATLAS(object) ((CoglAtlas *) object)
|
||||||
|
|
||||||
struct _CoglAtlas
|
struct _CoglAtlas
|
||||||
{
|
{
|
||||||
|
CoglObject _parent;
|
||||||
|
|
||||||
CoglRectangleMap *map;
|
CoglRectangleMap *map;
|
||||||
|
|
||||||
CoglHandle texture;
|
CoglHandle texture;
|
||||||
@ -68,9 +73,6 @@ void
|
|||||||
_cogl_atlas_remove (CoglAtlas *atlas,
|
_cogl_atlas_remove (CoglAtlas *atlas,
|
||||||
const CoglRectangleMapEntry *rectangle);
|
const CoglRectangleMapEntry *rectangle);
|
||||||
|
|
||||||
void
|
|
||||||
_cogl_atlas_free (CoglAtlas *atlas);
|
|
||||||
|
|
||||||
CoglHandle
|
CoglHandle
|
||||||
_cogl_atlas_copy_rectangle (CoglAtlas *atlas,
|
_cogl_atlas_copy_rectangle (CoglAtlas *atlas,
|
||||||
unsigned int x,
|
unsigned int x,
|
||||||
|
@ -363,7 +363,7 @@ _cogl_destroy_context (void)
|
|||||||
_cogl_clip_stack_unref (_context->current_clip_stack);
|
_cogl_clip_stack_unref (_context->current_clip_stack);
|
||||||
|
|
||||||
if (_context->atlas)
|
if (_context->atlas)
|
||||||
_cogl_atlas_free (_context->atlas);
|
cogl_object_unref (_context->atlas);
|
||||||
|
|
||||||
_cogl_bitmask_destroy (&_context->arrays_enabled);
|
_cogl_bitmask_destroy (&_context->arrays_enabled);
|
||||||
_cogl_bitmask_destroy (&_context->temp_bitmask);
|
_cogl_bitmask_destroy (&_context->temp_bitmask);
|
||||||
|
@ -125,7 +125,7 @@ cogl_pango_glyph_cache_new (void)
|
|||||||
void
|
void
|
||||||
cogl_pango_glyph_cache_clear (CoglPangoGlyphCache *cache)
|
cogl_pango_glyph_cache_clear (CoglPangoGlyphCache *cache)
|
||||||
{
|
{
|
||||||
g_slist_foreach (cache->atlases, (GFunc) _cogl_atlas_free, NULL);
|
g_slist_foreach (cache->atlases, (GFunc) cogl_object_unref, NULL);
|
||||||
g_slist_free (cache->atlases);
|
g_slist_free (cache->atlases);
|
||||||
cache->atlases = NULL;
|
cache->atlases = NULL;
|
||||||
cache->has_dirty_glyphs = FALSE;
|
cache->has_dirty_glyphs = FALSE;
|
||||||
@ -234,7 +234,7 @@ cogl_pango_glyph_cache_lookup (CoglPangoGlyphCache *cache,
|
|||||||
ink_rect.width + 1,
|
ink_rect.width + 1,
|
||||||
ink_rect.height + 1, value))
|
ink_rect.height + 1, value))
|
||||||
{
|
{
|
||||||
_cogl_atlas_free (atlas);
|
cogl_object_unref (atlas);
|
||||||
cogl_pango_glyph_cache_value_free (value);
|
cogl_pango_glyph_cache_value_free (value);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user