[mutter] cogl: Add CoglFramebufferDriver base type
- From: Marge Bot <marge-bot src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] cogl: Add CoglFramebufferDriver base type
- Date: Sat, 30 Jan 2021 09:39:49 +0000 (UTC)
commit 5be55292699e15ff9cbcc39750564e636b867b47
Author: Jonas Ã…dahl <jadahl gmail com>
Date: Mon Oct 19 17:43:06 2020 +0200
cogl: Add CoglFramebufferDriver base type
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1514>
cogl/cogl/cogl-framebuffer-driver.c | 123 ++++++++++++++++++++++
cogl/cogl/cogl-framebuffer-driver.h | 47 +++++++++
cogl/cogl/driver/gl/cogl-framebuffer-gl-private.h | 7 +-
cogl/cogl/driver/gl/cogl-framebuffer-gl.c | 8 +-
cogl/cogl/meson.build | 2 +
5 files changed, 183 insertions(+), 4 deletions(-)
---
diff --git a/cogl/cogl/cogl-framebuffer-driver.c b/cogl/cogl/cogl-framebuffer-driver.c
new file mode 100644
index 0000000000..1559de0f63
--- /dev/null
+++ b/cogl/cogl/cogl-framebuffer-driver.c
@@ -0,0 +1,123 @@
+/*
+ * Copyright (C) 2007,2008,2009,2012 Intel Corporation.
+ * Copyright (C) 2019 DisplayLink (UK) Ltd.
+ * Copyright (C) 2020 Red Hat
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy,
+ * modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#include "cogl-config.h"
+
+#include "cogl-framebuffer-driver.h"
+
+enum
+{
+ PROP_0,
+
+ PROP_FRAMEBUFFER,
+
+ N_PROPS
+};
+
+static GParamSpec *obj_props[N_PROPS];
+
+typedef struct _CoglFramebufferDriverPrivate
+{
+ CoglFramebuffer *framebuffer;
+} CoglFramebufferDriverPrivate;
+
+G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (CoglFramebufferDriver,
+ cogl_framebuffer_driver,
+ G_TYPE_OBJECT)
+
+CoglFramebuffer *
+cogl_framebuffer_driver_get_framebuffer (CoglFramebufferDriver *driver)
+{
+ CoglFramebufferDriverPrivate *priv =
+ cogl_framebuffer_driver_get_instance_private (driver);
+
+ return priv->framebuffer;
+}
+
+static void
+cogl_framebuffer_driver_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ CoglFramebufferDriver *driver = COGL_FRAMEBUFFER_DRIVER (object);
+ CoglFramebufferDriverPrivate *priv =
+ cogl_framebuffer_driver_get_instance_private (driver);
+
+ switch (prop_id)
+ {
+ case PROP_FRAMEBUFFER:
+ g_value_set_object (value, priv->framebuffer);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ }
+}
+
+static void
+cogl_framebuffer_driver_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ CoglFramebufferDriver *driver = COGL_FRAMEBUFFER_DRIVER (object);
+ CoglFramebufferDriverPrivate *priv =
+ cogl_framebuffer_driver_get_instance_private (driver);
+
+ switch (prop_id)
+ {
+ case PROP_FRAMEBUFFER:
+ priv->framebuffer = g_value_get_object (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ }
+}
+
+static void
+cogl_framebuffer_driver_init (CoglFramebufferDriver *driver)
+{
+}
+
+static void
+cogl_framebuffer_driver_class_init (CoglFramebufferDriverClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->get_property = cogl_framebuffer_driver_get_property;
+ object_class->set_property = cogl_framebuffer_driver_set_property;
+
+ obj_props[PROP_FRAMEBUFFER] =
+ g_param_spec_object ("framebuffer",
+ "framebuffer",
+ "CoglFramebuffer",
+ COGL_TYPE_FRAMEBUFFER,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS);
+ g_object_class_install_properties (object_class, N_PROPS, obj_props);
+}
diff --git a/cogl/cogl/cogl-framebuffer-driver.h b/cogl/cogl/cogl-framebuffer-driver.h
new file mode 100644
index 0000000000..1ef6ce058c
--- /dev/null
+++ b/cogl/cogl/cogl-framebuffer-driver.h
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2007,2008,2009,2012 Intel Corporation.
+ * Copyright (C) 2019 DisplayLink (UK) Ltd.
+ * Copyright (C) 2020 Red Hat
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy,
+ * modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#ifndef COGL_FRAMEBUFFER_DRIVER_H
+#define COGL_FRAMEBUFFER_DRIVER_H
+
+#include "cogl-framebuffer.h"
+
+#define COGL_TYPE_FRAMEBUFFER_DRIVER (cogl_framebuffer_driver_get_type ())
+G_DECLARE_DERIVABLE_TYPE (CoglFramebufferDriver,
+ cogl_framebuffer_driver,
+ COGL, FRAMEBUFFER_DRIVER,
+ GObject)
+
+struct _CoglFramebufferDriverClass
+{
+ GObjectClass parent_cleass;
+};
+
+CoglFramebuffer *
+cogl_framebuffer_driver_get_framebuffer (CoglFramebufferDriver *driver);
+
+#endif /* COGL_FRAMEBUFFER_DRIVER_H */
diff --git a/cogl/cogl/driver/gl/cogl-framebuffer-gl-private.h
b/cogl/cogl/driver/gl/cogl-framebuffer-gl-private.h
index 08acf814b6..10fb7fff9d 100644
--- a/cogl/cogl/driver/gl/cogl-framebuffer-gl-private.h
+++ b/cogl/cogl/driver/gl/cogl-framebuffer-gl-private.h
@@ -34,10 +34,15 @@
#ifndef __COGL_FRAMEBUFFER_GL_PRIVATE_H__
#define __COGL_FRAMEBUFFER_GL_PRIVATE_H__
+#include "cogl-framebuffer-driver.h"
+
#define COGL_TYPE_GL_FRAMEBUFFER (cogl_gl_framebuffer_get_type ())
G_DECLARE_FINAL_TYPE (CoglGlFramebuffer, cogl_gl_framebuffer,
COGL, GL_FRAMEBUFFER,
- GObject)
+ CoglFramebufferDriver)
+
+CoglGlFramebuffer *
+cogl_gl_framebuffer_from_framebuffer (CoglFramebuffer *framebuffer);
gboolean
_cogl_offscreen_gl_allocate (CoglOffscreen *offscreen,
diff --git a/cogl/cogl/driver/gl/cogl-framebuffer-gl.c b/cogl/cogl/driver/gl/cogl-framebuffer-gl.c
index d57de6203e..9aaca0d2cd 100644
--- a/cogl/cogl/driver/gl/cogl-framebuffer-gl.c
+++ b/cogl/cogl/driver/gl/cogl-framebuffer-gl.c
@@ -137,7 +137,7 @@ typedef struct _CoglGlFbo
struct _CoglGlFramebuffer
{
- GObject parent;
+ CoglFramebufferDriver parent;
CoglGlFbo gl_fbo;
@@ -146,7 +146,7 @@ struct _CoglGlFramebuffer
};
G_DEFINE_TYPE (CoglGlFramebuffer, cogl_gl_framebuffer,
- G_TYPE_OBJECT)
+ COGL_TYPE_FRAMEBUFFER_DRIVER)
static CoglGlFramebuffer *
ensure_gl_framebuffer (CoglFramebuffer *framebuffer);
@@ -910,7 +910,9 @@ ensure_gl_framebuffer (CoglFramebuffer *framebuffer)
gl_framebuffer = cogl_framebuffer_get_driver_private (framebuffer);
if (!gl_framebuffer)
{
- gl_framebuffer = g_object_new (COGL_TYPE_GL_FRAMEBUFFER, NULL);
+ gl_framebuffer = g_object_new (COGL_TYPE_GL_FRAMEBUFFER,
+ "framebuffer", framebuffer,
+ NULL);
cogl_framebuffer_set_driver_private (framebuffer,
gl_framebuffer,
g_object_unref);
diff --git a/cogl/cogl/meson.build b/cogl/cogl/meson.build
index 2aa0bfbacc..5a361b42d7 100644
--- a/cogl/cogl/meson.build
+++ b/cogl/cogl/meson.build
@@ -312,6 +312,8 @@ cogl_sources = [
'cogl-offscreen.c',
'cogl-frame-info-private.h',
'cogl-frame-info.c',
+ 'cogl-framebuffer-driver.c',
+ 'cogl-framebuffer-driver.h',
'cogl-framebuffer-private.h',
'cogl-framebuffer.c',
'cogl-onscreen-private.h',
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]