mirror of
https://github.com/brl/mutter.git
synced 2024-11-26 18:11:05 -05:00
cogl: Port Renderer away from CoglObject
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3193>
This commit is contained in:
parent
4792db371a
commit
75023d96bc
@ -253,7 +253,7 @@ clutter_backend_do_real_create_context (ClutterBackend *backend,
|
|||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
/* the display owns the renderer and the swap chain */
|
/* the display owns the renderer and the swap chain */
|
||||||
cogl_object_unref (backend->cogl_renderer);
|
g_object_unref (backend->cogl_renderer);
|
||||||
g_object_unref (swap_chain);
|
g_object_unref (swap_chain);
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
@ -267,7 +267,7 @@ error:
|
|||||||
|
|
||||||
if (backend->cogl_renderer != NULL)
|
if (backend->cogl_renderer != NULL)
|
||||||
{
|
{
|
||||||
cogl_object_unref (backend->cogl_renderer);
|
g_object_unref (backend->cogl_renderer);
|
||||||
backend->cogl_renderer = NULL;
|
backend->cogl_renderer = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -230,13 +230,13 @@ cogl_context_new (CoglDisplay *display,
|
|||||||
CoglRenderer *renderer = cogl_renderer_new ();
|
CoglRenderer *renderer = cogl_renderer_new ();
|
||||||
if (!cogl_renderer_connect (renderer, error))
|
if (!cogl_renderer_connect (renderer, error))
|
||||||
{
|
{
|
||||||
cogl_object_unref (renderer);
|
g_object_unref (renderer);
|
||||||
g_object_unref (context);
|
g_object_unref (context);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
display = cogl_display_new (renderer, NULL);
|
display = cogl_display_new (renderer, NULL);
|
||||||
cogl_object_unref (renderer);
|
g_object_unref (renderer);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
g_object_ref (display);
|
g_object_ref (display);
|
||||||
|
@ -64,7 +64,7 @@ cogl_display_dispose (GObject *object)
|
|||||||
|
|
||||||
if (display->renderer)
|
if (display->renderer)
|
||||||
{
|
{
|
||||||
cogl_object_unref (display->renderer);
|
g_object_unref (display->renderer);
|
||||||
display->renderer = NULL;
|
display->renderer = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -101,7 +101,7 @@ cogl_display_new (CoglRenderer *renderer,
|
|||||||
|
|
||||||
display->renderer = renderer;
|
display->renderer = renderer;
|
||||||
if (renderer)
|
if (renderer)
|
||||||
cogl_object_ref (renderer);
|
g_object_ref (renderer);
|
||||||
else
|
else
|
||||||
display->renderer = cogl_renderer_new ();
|
display->renderer = cogl_renderer_new ();
|
||||||
|
|
||||||
|
@ -53,7 +53,7 @@ cogl_poll_renderer_get_info (CoglRenderer *renderer,
|
|||||||
{
|
{
|
||||||
GList *l, *next;
|
GList *l, *next;
|
||||||
|
|
||||||
g_return_val_if_fail (cogl_is_renderer (renderer), 0);
|
g_return_val_if_fail (COGL_IS_RENDERER (renderer), 0);
|
||||||
g_return_val_if_fail (poll_fds != NULL, 0);
|
g_return_val_if_fail (poll_fds != NULL, 0);
|
||||||
g_return_val_if_fail (n_poll_fds != NULL, 0);
|
g_return_val_if_fail (n_poll_fds != NULL, 0);
|
||||||
g_return_val_if_fail (timeout != NULL, 0);
|
g_return_val_if_fail (timeout != NULL, 0);
|
||||||
@ -95,7 +95,7 @@ cogl_poll_renderer_dispatch (CoglRenderer *renderer,
|
|||||||
{
|
{
|
||||||
GList *l, *next;
|
GList *l, *next;
|
||||||
|
|
||||||
g_return_if_fail (cogl_is_renderer (renderer));
|
g_return_if_fail (COGL_IS_RENDERER (renderer));
|
||||||
|
|
||||||
_cogl_closure_list_invoke_no_args (&renderer->idle_closures);
|
_cogl_closure_list_invoke_no_args (&renderer->idle_closures);
|
||||||
|
|
||||||
|
@ -32,7 +32,6 @@
|
|||||||
|
|
||||||
#include <gmodule.h>
|
#include <gmodule.h>
|
||||||
|
|
||||||
#include "cogl/cogl-object-private.h"
|
|
||||||
#include "cogl/cogl-driver.h"
|
#include "cogl/cogl-driver.h"
|
||||||
#include "cogl/cogl-texture-driver.h"
|
#include "cogl/cogl-texture-driver.h"
|
||||||
#include "cogl/cogl-context.h"
|
#include "cogl/cogl-context.h"
|
||||||
@ -43,7 +42,7 @@ typedef const CoglWinsysVtable *(*CoglCustomWinsysVtableGetter) (CoglRenderer *r
|
|||||||
|
|
||||||
struct _CoglRenderer
|
struct _CoglRenderer
|
||||||
{
|
{
|
||||||
CoglObject _parent;
|
GObject parent_instance;
|
||||||
gboolean connected;
|
gboolean connected;
|
||||||
CoglDriver driver_override;
|
CoglDriver driver_override;
|
||||||
const CoglDriverVtable *driver_vtable;
|
const CoglDriverVtable *driver_vtable;
|
||||||
|
@ -37,14 +37,12 @@
|
|||||||
|
|
||||||
#include "cogl/cogl-util.h"
|
#include "cogl/cogl-util.h"
|
||||||
#include "cogl/cogl-private.h"
|
#include "cogl/cogl-private.h"
|
||||||
#include "cogl/cogl-object.h"
|
|
||||||
#include "cogl/cogl-context-private.h"
|
#include "cogl/cogl-context-private.h"
|
||||||
#include "cogl/cogl-mutter.h"
|
#include "cogl/cogl-mutter.h"
|
||||||
|
|
||||||
#include "cogl/cogl-renderer.h"
|
#include "cogl/cogl-renderer.h"
|
||||||
#include "cogl/cogl-renderer-private.h"
|
#include "cogl/cogl-renderer-private.h"
|
||||||
#include "cogl/cogl-display-private.h"
|
#include "cogl/cogl-display-private.h"
|
||||||
#include "cogl/cogl-gtype-private.h"
|
|
||||||
|
|
||||||
#include "cogl/winsys/cogl-winsys-private.h"
|
#include "cogl/winsys/cogl-winsys-private.h"
|
||||||
|
|
||||||
@ -129,10 +127,11 @@ static CoglWinsysVtableGetter _cogl_winsys_vtable_getters[] =
|
|||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
static void _cogl_renderer_free (CoglRenderer *renderer);
|
static const CoglWinsysVtable *
|
||||||
|
_cogl_renderer_get_winsys (CoglRenderer *renderer)
|
||||||
COGL_OBJECT_DEFINE (Renderer, renderer);
|
{
|
||||||
COGL_GTYPE_DEFINE_CLASS (Renderer, renderer);
|
return renderer->winsys_vtable;
|
||||||
|
}
|
||||||
|
|
||||||
typedef struct _CoglNativeFilterClosure
|
typedef struct _CoglNativeFilterClosure
|
||||||
{
|
{
|
||||||
@ -140,27 +139,19 @@ typedef struct _CoglNativeFilterClosure
|
|||||||
void *data;
|
void *data;
|
||||||
} CoglNativeFilterClosure;
|
} CoglNativeFilterClosure;
|
||||||
|
|
||||||
uint32_t
|
|
||||||
cogl_renderer_error_quark (void)
|
|
||||||
{
|
|
||||||
return g_quark_from_static_string ("cogl-renderer-error-quark");
|
|
||||||
}
|
|
||||||
|
|
||||||
static const CoglWinsysVtable *
|
|
||||||
_cogl_renderer_get_winsys (CoglRenderer *renderer)
|
|
||||||
{
|
|
||||||
return renderer->winsys_vtable;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
native_filter_closure_free (CoglNativeFilterClosure *closure)
|
native_filter_closure_free (CoglNativeFilterClosure *closure)
|
||||||
{
|
{
|
||||||
g_free (closure);
|
g_free (closure);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
G_DEFINE_TYPE (CoglRenderer, cogl_renderer, G_TYPE_OBJECT);
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_cogl_renderer_free (CoglRenderer *renderer)
|
cogl_renderer_dispose (GObject *object)
|
||||||
{
|
{
|
||||||
|
CoglRenderer *renderer = COGL_RENDERER (object);
|
||||||
|
|
||||||
const CoglWinsysVtable *winsys = _cogl_renderer_get_winsys (renderer);
|
const CoglWinsysVtable *winsys = _cogl_renderer_get_winsys (renderer);
|
||||||
|
|
||||||
_cogl_closure_list_disconnect_all (&renderer->idle_closures);
|
_cogl_closure_list_disconnect_all (&renderer->idle_closures);
|
||||||
@ -176,13 +167,32 @@ _cogl_renderer_free (CoglRenderer *renderer)
|
|||||||
|
|
||||||
g_array_free (renderer->poll_fds, TRUE);
|
g_array_free (renderer->poll_fds, TRUE);
|
||||||
|
|
||||||
g_free (renderer);
|
G_OBJECT_CLASS (cogl_renderer_parent_class)->dispose (object);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
cogl_renderer_init (CoglRenderer *renderer)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
cogl_renderer_class_init (CoglRendererClass *class)
|
||||||
|
{
|
||||||
|
GObjectClass *object_class = G_OBJECT_CLASS (class);
|
||||||
|
|
||||||
|
object_class->dispose = cogl_renderer_dispose;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t
|
||||||
|
cogl_renderer_error_quark (void)
|
||||||
|
{
|
||||||
|
return g_quark_from_static_string ("cogl-renderer-error-quark");
|
||||||
}
|
}
|
||||||
|
|
||||||
CoglRenderer *
|
CoglRenderer *
|
||||||
cogl_renderer_new (void)
|
cogl_renderer_new (void)
|
||||||
{
|
{
|
||||||
CoglRenderer *renderer = g_new0 (CoglRenderer, 1);
|
CoglRenderer *renderer = g_object_new (COGL_TYPE_RENDERER, NULL);
|
||||||
|
|
||||||
_cogl_init ();
|
_cogl_init ();
|
||||||
|
|
||||||
@ -197,7 +207,7 @@ cogl_renderer_new (void)
|
|||||||
renderer->xlib_enable_event_retrieval = TRUE;
|
renderer->xlib_enable_event_retrieval = TRUE;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return _cogl_renderer_object_new (renderer);
|
return renderer;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef COGL_HAS_XLIB
|
#ifdef COGL_HAS_XLIB
|
||||||
@ -205,7 +215,7 @@ void
|
|||||||
cogl_xlib_renderer_set_foreign_display (CoglRenderer *renderer,
|
cogl_xlib_renderer_set_foreign_display (CoglRenderer *renderer,
|
||||||
Display *xdisplay)
|
Display *xdisplay)
|
||||||
{
|
{
|
||||||
g_return_if_fail (cogl_is_renderer (renderer));
|
g_return_if_fail (COGL_IS_RENDERER (renderer));
|
||||||
|
|
||||||
/* NB: Renderers are considered immutable once connected */
|
/* NB: Renderers are considered immutable once connected */
|
||||||
g_return_if_fail (!renderer->connected);
|
g_return_if_fail (!renderer->connected);
|
||||||
@ -220,7 +230,7 @@ cogl_xlib_renderer_set_foreign_display (CoglRenderer *renderer,
|
|||||||
Display *
|
Display *
|
||||||
cogl_xlib_renderer_get_foreign_display (CoglRenderer *renderer)
|
cogl_xlib_renderer_get_foreign_display (CoglRenderer *renderer)
|
||||||
{
|
{
|
||||||
g_return_val_if_fail (cogl_is_renderer (renderer), NULL);
|
g_return_val_if_fail (COGL_IS_RENDERER (renderer), NULL);
|
||||||
|
|
||||||
return renderer->foreign_xdpy;
|
return renderer->foreign_xdpy;
|
||||||
}
|
}
|
||||||
@ -229,7 +239,7 @@ void
|
|||||||
cogl_xlib_renderer_request_reset_on_video_memory_purge (CoglRenderer *renderer,
|
cogl_xlib_renderer_request_reset_on_video_memory_purge (CoglRenderer *renderer,
|
||||||
gboolean enable)
|
gboolean enable)
|
||||||
{
|
{
|
||||||
g_return_if_fail (cogl_is_renderer (renderer));
|
g_return_if_fail (COGL_IS_RENDERER (renderer));
|
||||||
g_return_if_fail (!renderer->connected);
|
g_return_if_fail (!renderer->connected);
|
||||||
|
|
||||||
renderer->xlib_want_reset_on_video_memory_purge = enable;
|
renderer->xlib_want_reset_on_video_memory_purge = enable;
|
||||||
|
@ -42,8 +42,9 @@
|
|||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* SECTION:cogl-renderer
|
* CoglRenderer:
|
||||||
* @short_description: Choosing a means to render
|
*
|
||||||
|
* Choosing a means to render
|
||||||
*
|
*
|
||||||
* A #CoglRenderer represents a means to render. It encapsulates the
|
* A #CoglRenderer represents a means to render. It encapsulates the
|
||||||
* selection of an underlying driver, such as OpenGL or OpenGL-ES and
|
* selection of an underlying driver, such as OpenGL or OpenGL-ES and
|
||||||
@ -85,24 +86,15 @@ cogl_renderer_error_quark (void);
|
|||||||
|
|
||||||
typedef struct _CoglRenderer CoglRenderer;
|
typedef struct _CoglRenderer CoglRenderer;
|
||||||
|
|
||||||
/**
|
#define COGL_TYPE_RENDERER (cogl_renderer_get_type ())
|
||||||
* cogl_renderer_get_gtype:
|
|
||||||
*
|
COGL_EXPORT
|
||||||
* Returns: a #GType that can be used with the GLib type system.
|
G_DECLARE_FINAL_TYPE (CoglRenderer,
|
||||||
*/
|
cogl_renderer,
|
||||||
COGL_EXPORT
|
COGL,
|
||||||
GType cogl_renderer_get_gtype (void);
|
RENDERER,
|
||||||
|
GObject)
|
||||||
|
|
||||||
/**
|
|
||||||
* cogl_is_renderer:
|
|
||||||
* @object: A #CoglObject pointer
|
|
||||||
*
|
|
||||||
* Determines if the given @object is a #CoglRenderer
|
|
||||||
*
|
|
||||||
* Return value: %TRUE if @object is a #CoglRenderer, else %FALSE.
|
|
||||||
*/
|
|
||||||
COGL_EXPORT gboolean
|
|
||||||
cogl_is_renderer (void *object);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* cogl_renderer_new:
|
* cogl_renderer_new:
|
||||||
|
@ -497,7 +497,7 @@ cogl_xlib_renderer_get_display (CoglRenderer *renderer)
|
|||||||
{
|
{
|
||||||
CoglXlibRenderer *xlib_renderer;
|
CoglXlibRenderer *xlib_renderer;
|
||||||
|
|
||||||
g_return_val_if_fail (cogl_is_renderer (renderer), NULL);
|
g_return_val_if_fail (COGL_IS_RENDERER (renderer), NULL);
|
||||||
|
|
||||||
xlib_renderer = _cogl_xlib_renderer_get_data (renderer);
|
xlib_renderer = _cogl_xlib_renderer_get_data (renderer);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user