mirror of
https://github.com/brl/mutter.git
synced 2025-06-14 01:09:30 +00:00
[cogl-handle] Optimize how we define cogl handles
The cogl_is_* functions were showing up quite high on profiles due to iterating through arrays of cogl handles. This does away with all the handle arrays and implements a simple struct inheritance scheme. All cogl objects now add a CoglHandleObject _parent; member to their main structures. The base object includes 2 members a.t.m; a ref_count, and a klass pointer. The klass in turn gives you a type and virtual function for freeing objects of that type. Each handle type has a _cogl_##handle_type##_get_type () function automatically defined which returns a GQuark of the handle type, so now implementing the cogl_is_* funcs is just a case of comparing with obj->klass->type. Another outcome of the re-work is that cogl_handle_{ref,unref} are also much more efficient, and no longer need extending for each handle type added to cogl. The cogl_##handle_type##_{ref,unref} functions are now deprecated and are no longer used internally to Clutter or Cogl. Potentially we can remove them completely before 1.0.
This commit is contained in:
@ -26,11 +26,13 @@
|
||||
#ifndef __COGL_SHADER_H
|
||||
#define __COGL_SHADER_H
|
||||
|
||||
#include "cogl-handle.h"
|
||||
|
||||
typedef struct _CoglShader CoglShader;
|
||||
|
||||
struct _CoglShader
|
||||
{
|
||||
guint ref_count;
|
||||
CoglHandleObject _parent;
|
||||
GLhandleARB gl_handle;
|
||||
};
|
||||
|
||||
|
Reference in New Issue
Block a user