[gtk/wip/chergert/glproto] ngl: rename Next to Ngl
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/wip/chergert/glproto] ngl: rename Next to Ngl
- Date: Tue, 23 Feb 2021 22:35:26 +0000 (UTC)
commit a2816f3efe954c23909fc425cf7121f4f1f6a2a1
Author: Christian Hergert <chergert redhat com>
Date: Tue Feb 23 14:33:41 2021 -0800
ngl: rename Next to Ngl
demos/node-editor/node-editor-window.c | 6 +-
gsk/gskglshader.c | 6 +-
gsk/gskrenderer.c | 6 +-
gsk/meson.build | 30 +-
gsk/next/gskglcommandqueueprivate.h | 362 ----
gsk/next/gskglcompilerprivate.h | 69 -
gsk/next/gskgldriverprivate.h | 234 ---
gsk/next/gskglglyphlibraryprivate.h | 119 --
gsk/next/gskgliconlibraryprivate.h | 60 -
gsk/next/gskglprogramprivate.h | 273 ---
gsk/next/gskglprograms.defs | 83 -
gsk/next/gskglrenderer.h | 47 -
gsk/next/gskglrenderjobprivate.h | 39 -
gsk/next/gskglshadowlibraryprivate.h | 44 -
gsk/next/gskgltexturelibrary.c | 315 ---
gsk/next/gskgltexturelibraryprivate.h | 201 --
gsk/next/gskgltexturepoolprivate.h | 102 -
gsk/next/gskgltypesprivate.h | 62 -
gsk/next/gskgluniformstateprivate.h | 685 -------
.../gsknglattachmentstate.c} | 32 +-
.../gsknglattachmentstateprivate.h} | 48 +-
gsk/{next/gskglbuffer.c => ngl/gsknglbuffer.c} | 18 +-
.../gsknglbufferprivate.h} | 34 +-
.../gsknglcommandqueue.c} | 520 ++---
gsk/ngl/gsknglcommandqueueprivate.h | 362 ++++
gsk/{next/gskglcompiler.c => ngl/gsknglcompiler.c} | 186 +-
gsk/ngl/gsknglcompilerprivate.h | 69 +
gsk/{next/gskgldriver.c => ngl/gskngldriver.c} | 687 +++----
gsk/ngl/gskngldriverprivate.h | 234 +++
.../gsknglglyphlibrary.c} | 138 +-
gsk/ngl/gsknglglyphlibraryprivate.h | 119 ++
.../gskgliconlibrary.c => ngl/gskngliconlibrary.c} | 62 +-
gsk/ngl/gskngliconlibraryprivate.h | 60 +
gsk/{next/gskglprogram.c => ngl/gsknglprogram.c} | 78 +-
gsk/ngl/gsknglprogramprivate.h | 273 +++
gsk/ngl/gsknglprograms.defs | 83 +
gsk/{next/gskglrenderer.c => ngl/gsknglrenderer.c} | 152 +-
gsk/ngl/gsknglrenderer.h | 46 +
.../gsknglrendererprivate.h} | 16 +-
.../gskglrenderjob.c => ngl/gsknglrenderjob.c} | 2066 ++++++++++----------
gsk/ngl/gsknglrenderjobprivate.h | 39 +
.../gsknglshadowlibrary.c} | 84 +-
gsk/ngl/gsknglshadowlibraryprivate.h | 44 +
gsk/ngl/gskngltexturelibrary.c | 315 +++
gsk/ngl/gskngltexturelibraryprivate.h | 202 ++
.../gskgltexturepool.c => ngl/gskngltexturepool.c} | 68 +-
gsk/ngl/gskngltexturepoolprivate.h | 102 +
gsk/ngl/gskngltypesprivate.h | 62 +
.../gskngluniformstate.c} | 80 +-
gsk/ngl/gskngluniformstateprivate.h | 685 +++++++
gsk/{next => ngl}/inlinearray.h | 0
gsk/{next => ngl}/ninesliceprivate.h | 20 +-
gtk/gtktestutils.c | 2 +-
gtk/inspector/general.c | 4 +-
54 files changed, 4866 insertions(+), 4867 deletions(-)
---
diff --git a/demos/node-editor/node-editor-window.c b/demos/node-editor/node-editor-window.c
index 84c9141c71..03da8c67bd 100644
--- a/demos/node-editor/node-editor-window.c
+++ b/demos/node-editor/node-editor-window.c
@@ -25,7 +25,7 @@
#include "gsk/gskrendernodeparserprivate.h"
#include "gsk/gl/gskglrenderer.h"
-#include "gsk/next/gskglrenderer.h"
+#include "gsk/ngl/gsknglrenderer.h"
#ifdef GDK_WINDOWING_BROADWAY
#include "gsk/broadway/gskbroadwayrenderer.h"
#endif
@@ -764,8 +764,8 @@ node_editor_window_realize (GtkWidget *widget)
gsk_gl_renderer_new (),
"OpenGL");
node_editor_window_add_renderer (self,
- gsk_next_renderer_new (),
- "Next");
+ gsk_ngl_renderer_new (),
+ "NGL");
#ifdef GDK_RENDERING_VULKAN
node_editor_window_add_renderer (self,
gsk_vulkan_renderer_new (),
diff --git a/gsk/gskglshader.c b/gsk/gskglshader.c
index e5c2786213..081e8ac4a7 100644
--- a/gsk/gskglshader.c
+++ b/gsk/gskglshader.c
@@ -141,7 +141,7 @@
#include "gskdebugprivate.h"
#include "gl/gskglrendererprivate.h"
-#include "next/gskglrendererprivate.h"
+#include "ngl/gsknglrendererprivate.h"
static GskGLUniformType
uniform_type_from_glsl (const char *str)
@@ -545,8 +545,8 @@ gsk_gl_shader_compile (GskGLShader *shader,
if (GSK_IS_GL_RENDERER (renderer))
return gsk_gl_renderer_try_compile_gl_shader (GSK_GL_RENDERER (renderer), shader, error);
- else if (GSK_IS_NEXT_RENDERER (renderer))
- return gsk_next_renderer_try_compile_gl_shader (GSK_NEXT_RENDERER (renderer), shader, error);
+ else if (GSK_IS_NGL_RENDERER (renderer))
+ return gsk_ngl_renderer_try_compile_gl_shader (GSK_NGL_RENDERER (renderer), shader, error);
g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
"The renderer does not support gl shaders");
diff --git a/gsk/gskrenderer.c b/gsk/gskrenderer.c
index 255f92d11a..9d5dbfcb86 100644
--- a/gsk/gskrenderer.c
+++ b/gsk/gskrenderer.c
@@ -39,7 +39,7 @@
#include "gskcairorenderer.h"
#include "gskdebugprivate.h"
#include "gl/gskglrenderer.h"
-#include "next/gskglrenderer.h"
+#include "ngl/gsknglrenderer.h"
#include "gskprofilerprivate.h"
#include "gskrendernodeprivate.h"
@@ -497,8 +497,8 @@ get_renderer_for_name (const char *renderer_name)
else if (g_ascii_strcasecmp (renderer_name, "opengl") == 0
|| g_ascii_strcasecmp (renderer_name, "gl") == 0)
return GSK_TYPE_GL_RENDERER;
- else if (g_ascii_strcasecmp (renderer_name, "next") == 0)
- return GSK_TYPE_NEXT_RENDERER;
+ else if (g_ascii_strcasecmp (renderer_name, "ngl") == 0)
+ return GSK_TYPE_NGL_RENDERER;
#ifdef GDK_RENDERING_VULKAN
else if (g_ascii_strcasecmp (renderer_name, "vulkan") == 0)
return GSK_TYPE_VULKAN_RENDERER;
diff --git a/gsk/meson.build b/gsk/meson.build
index 62193a79da..dd1ac34ff9 100644
--- a/gsk/meson.build
+++ b/gsk/meson.build
@@ -31,7 +31,7 @@ gsk_public_sources = files([
'gskroundedrect.c',
'gsktransform.c',
'gl/gskglrenderer.c',
- 'next/gskglrenderer.c',
+ 'ngl/gsknglrenderer.c',
])
gsk_private_sources = files([
@@ -49,19 +49,19 @@ gsk_private_sources = files([
'gl/gskgliconcache.c',
'gl/opbuffer.c',
'gl/stb_rect_pack.c',
- 'next/gskglattachmentstate.c',
- 'next/gskglbuffer.c',
- 'next/gskglcommandqueue.c',
- 'next/gskglcompiler.c',
- 'next/gskgldriver.c',
- 'next/gskglglyphlibrary.c',
- 'next/gskgliconlibrary.c',
- 'next/gskglprogram.c',
- 'next/gskglrenderjob.c',
- 'next/gskglshadowlibrary.c',
- 'next/gskgltexturelibrary.c',
- 'next/gskgluniformstate.c',
- 'next/gskgltexturepool.c',
+ 'ngl/gsknglattachmentstate.c',
+ 'ngl/gsknglbuffer.c',
+ 'ngl/gsknglcommandqueue.c',
+ 'ngl/gsknglcompiler.c',
+ 'ngl/gskngldriver.c',
+ 'ngl/gsknglglyphlibrary.c',
+ 'ngl/gskngliconlibrary.c',
+ 'ngl/gsknglprogram.c',
+ 'ngl/gsknglrenderjob.c',
+ 'ngl/gsknglshadowlibrary.c',
+ 'ngl/gskngltexturelibrary.c',
+ 'ngl/gskngluniformstate.c',
+ 'ngl/gskngltexturepool.c',
])
gsk_public_headers = files([
@@ -79,7 +79,7 @@ install_headers(gsk_public_headers, 'gsk.h', subdir: 'gtk-4.0/gsk')
gsk_public_gl_headers = files([
'gl/gskglrenderer.h',
- 'next/gskglrenderer.h',
+ 'ngl/gsknglrenderer.h',
])
install_headers(gsk_public_gl_headers, subdir: 'gtk-4.0/gsk/gl')
gsk_public_headers += gsk_public_gl_headers
diff --git a/gsk/next/gskglattachmentstate.c b/gsk/ngl/gsknglattachmentstate.c
similarity index 72%
rename from gsk/next/gskglattachmentstate.c
rename to gsk/ngl/gsknglattachmentstate.c
index b05cc975a1..bf37087a69 100644
--- a/gsk/next/gskglattachmentstate.c
+++ b/gsk/ngl/gsknglattachmentstate.c
@@ -1,4 +1,4 @@
-/* gskglattachmentstate.c
+/* gsknglattachmentstate.c
*
* Copyright 2020 Christian Hergert <chergert redhat com>
*
@@ -20,14 +20,14 @@
#include "config.h"
-#include "gskglattachmentstateprivate.h"
+#include "gsknglattachmentstateprivate.h"
-GskGLAttachmentState *
-gsk_gl_attachment_state_new (void)
+GskNglAttachmentState *
+gsk_ngl_attachment_state_new (void)
{
- GskGLAttachmentState *self;
+ GskNglAttachmentState *self;
- self = g_atomic_rc_box_new0 (GskGLAttachmentState);
+ self = g_atomic_rc_box_new0 (GskNglAttachmentState);
self->fbo.changed = FALSE;
self->fbo.id = 0;
@@ -49,25 +49,25 @@ gsk_gl_attachment_state_new (void)
return self;
}
-GskGLAttachmentState *
-gsk_gl_attachment_state_ref (GskGLAttachmentState *self)
+GskNglAttachmentState *
+gsk_ngl_attachment_state_ref (GskNglAttachmentState *self)
{
return g_atomic_rc_box_acquire (self);
}
void
-gsk_gl_attachment_state_unref (GskGLAttachmentState *self)
+gsk_ngl_attachment_state_unref (GskNglAttachmentState *self)
{
g_atomic_rc_box_release (self);
}
void
-gsk_gl_attachment_state_bind_texture (GskGLAttachmentState *self,
- GLenum target,
- GLenum texture,
- guint id)
+gsk_ngl_attachment_state_bind_texture (GskNglAttachmentState *self,
+ GLenum target,
+ GLenum texture,
+ guint id)
{
- GskGLBindTexture *attach;
+ GskNglBindTexture *attach;
g_assert (self != NULL);
g_assert (target == GL_TEXTURE_1D ||
@@ -93,8 +93,8 @@ gsk_gl_attachment_state_bind_texture (GskGLAttachmentState *self,
}
void
-gsk_gl_attachment_state_bind_framebuffer (GskGLAttachmentState *self,
- guint id)
+gsk_ngl_attachment_state_bind_framebuffer (GskNglAttachmentState *self,
+ guint id)
{
g_assert (self != NULL);
diff --git a/gsk/next/gskglattachmentstateprivate.h b/gsk/ngl/gsknglattachmentstateprivate.h
similarity index 51%
rename from gsk/next/gskglattachmentstateprivate.h
rename to gsk/ngl/gsknglattachmentstateprivate.h
index cc71648d17..b43e91e09c 100644
--- a/gsk/next/gskglattachmentstateprivate.h
+++ b/gsk/ngl/gsknglattachmentstateprivate.h
@@ -1,4 +1,4 @@
-/* gskglattachmentstateprivate.h
+/* gsknglattachmentstateprivate.h
*
* Copyright 2020 Christian Hergert <chergert redhat com>
*
@@ -18,18 +18,18 @@
* SPDX-License-Identifier: LGPL-2.1-or-later
*/
-#ifndef __GSK_GL_ATTACHMENT_STATE_PRIVATE_H__
-#define __GSK_GL_ATTACHMENT_STATE_PRIVATE_H__
+#ifndef __GSK_NGL_ATTACHMENT_STATE_PRIVATE_H__
+#define __GSK_NGL_ATTACHMENT_STATE_PRIVATE_H__
-#include "gskgltypesprivate.h"
+#include "gskngltypesprivate.h"
G_BEGIN_DECLS
-typedef struct _GskGLAttachmentState GskGLAttachmentState;
-typedef struct _GskGLBindFramebuffer GskGLBindFramebuffer;
-typedef struct _GskGLBindTexture GskGLBindTexture;
+typedef struct _GskNglAttachmentState GskNglAttachmentState;
+typedef struct _GskNglBindFramebuffer GskNglBindFramebuffer;
+typedef struct _GskNglBindTexture GskNglBindTexture;
-struct _GskGLBindTexture
+struct _GskNglBindTexture
{
guint changed : 1;
guint initial : 1;
@@ -38,34 +38,34 @@ struct _GskGLBindTexture
guint id;
};
-G_STATIC_ASSERT (sizeof (GskGLBindTexture) == 12);
+G_STATIC_ASSERT (sizeof (GskNglBindTexture) == 12);
-struct _GskGLBindFramebuffer
+struct _GskNglBindFramebuffer
{
guint changed : 1;
guint id : 31;
};
-G_STATIC_ASSERT (sizeof (GskGLBindFramebuffer) == 4);
+G_STATIC_ASSERT (sizeof (GskNglBindFramebuffer) == 4);
-struct _GskGLAttachmentState
+struct _GskNglAttachmentState
{
- GskGLBindFramebuffer fbo;
+ GskNglBindFramebuffer fbo;
/* Increase if shaders add more textures */
- GskGLBindTexture textures[4];
+ GskNglBindTexture textures[4];
guint n_changed;
};
-GskGLAttachmentState *gsk_gl_attachment_state_new (void);
-GskGLAttachmentState *gsk_gl_attachment_state_ref (GskGLAttachmentState *self);
-void gsk_gl_attachment_state_unref (GskGLAttachmentState *self);
-void gsk_gl_attachment_state_bind_texture (GskGLAttachmentState *self,
- GLenum target,
- GLenum texture,
- guint id);
-void gsk_gl_attachment_state_bind_framebuffer (GskGLAttachmentState *self,
- guint id);
+GskNglAttachmentState *gsk_ngl_attachment_state_new (void);
+GskNglAttachmentState *gsk_ngl_attachment_state_ref (GskNglAttachmentState *self);
+void gsk_ngl_attachment_state_unref (GskNglAttachmentState *self);
+void gsk_ngl_attachment_state_bind_texture (GskNglAttachmentState *self,
+ GLenum target,
+ GLenum texture,
+ guint id);
+void gsk_ngl_attachment_state_bind_framebuffer (GskNglAttachmentState *self,
+ guint id);
G_END_DECLS
-#endif /* __GSK_GL_ATTACHMENT_STATE_PRIVATE_H__ */
+#endif /* __GSK_NGL_ATTACHMENT_STATE_PRIVATE_H__ */
diff --git a/gsk/next/gskglbuffer.c b/gsk/ngl/gsknglbuffer.c
similarity index 81%
rename from gsk/next/gskglbuffer.c
rename to gsk/ngl/gsknglbuffer.c
index 299983cde3..f65923d003 100644
--- a/gsk/next/gskglbuffer.c
+++ b/gsk/ngl/gsknglbuffer.c
@@ -1,4 +1,4 @@
-/* gskglbufferprivate.h
+/* gsknglbufferprivate.h
*
* Copyright 2020 Christian Hergert <chergert redhat com>
*
@@ -22,21 +22,21 @@
#include <string.h>
-#include "gskglbufferprivate.h"
+#include "gsknglbufferprivate.h"
/**
- * gsk_gl_buffer_init:
+ * gsk_ngl_buffer_init:
* @target: the target buffer such as %GL_ARRAY_BUFFER or %GL_UNIFORM_BUFFER
* @element_size: the size of elements within the buffer
*
- * Creates a new #GskGLBuffer which can be used to deliver data to shaders
+ * Creates a new #GskNglBuffer which can be used to deliver data to shaders
* within a GLSL program. You can use this to store vertices such as with
* %GL_ARRAY_BUFFER or uniform data with %GL_UNIFORM_BUFFER.
*/
void
-gsk_gl_buffer_init (GskGLBuffer *self,
- GLenum target,
- guint element_size)
+gsk_ngl_buffer_init (GskNglBuffer *self,
+ GLenum target,
+ guint element_size)
{
memset (self, 0, sizeof *self);
@@ -48,7 +48,7 @@ gsk_gl_buffer_init (GskGLBuffer *self,
}
GLuint
-gsk_gl_buffer_submit (GskGLBuffer *buffer)
+gsk_ngl_buffer_submit (GskNglBuffer *buffer)
{
GLuint id;
@@ -63,7 +63,7 @@ gsk_gl_buffer_submit (GskGLBuffer *buffer)
}
void
-gsk_gl_buffer_destroy (GskGLBuffer *buffer)
+gsk_ngl_buffer_destroy (GskNglBuffer *buffer)
{
g_clear_pointer (&buffer->buffer, g_free);
}
diff --git a/gsk/next/gskglbufferprivate.h b/gsk/ngl/gsknglbufferprivate.h
similarity index 67%
rename from gsk/next/gskglbufferprivate.h
rename to gsk/ngl/gsknglbufferprivate.h
index b0315724f9..fc67bc9e0b 100644
--- a/gsk/next/gskglbufferprivate.h
+++ b/gsk/ngl/gsknglbufferprivate.h
@@ -1,4 +1,4 @@
-/* gskglbufferprivate.h
+/* gsknglbufferprivate.h
*
* Copyright 2020 Christian Hergert <chergert redhat com>
*
@@ -18,14 +18,14 @@
* SPDX-License-Identifier: LGPL-2.1-or-later
*/
-#ifndef __GSK_GL_BUFFER_PRIVATE_H__
-#define __GSK_GL_BUFFER_PRIVATE_H__
+#ifndef __GSK_NGL_BUFFER_PRIVATE_H__
+#define __GSK_NGL_BUFFER_PRIVATE_H__
-#include "gskgltypesprivate.h"
+#include "gskngltypesprivate.h"
G_BEGIN_DECLS
-typedef struct _GskGLBuffer
+typedef struct _GskNglBuffer
{
guint8 *buffer;
gsize buffer_pos;
@@ -33,17 +33,17 @@ typedef struct _GskGLBuffer
guint count;
GLenum target;
guint element_size;
-} GskGLBuffer;
+} GskNglBuffer;
-void gsk_gl_buffer_init (GskGLBuffer *self,
- GLenum target,
- guint element_size);
-void gsk_gl_buffer_destroy (GskGLBuffer *buffer);
-GLuint gsk_gl_buffer_submit (GskGLBuffer *buffer);
+void gsk_ngl_buffer_init (GskNglBuffer *self,
+ GLenum target,
+ guint element_size);
+void gsk_ngl_buffer_destroy (GskNglBuffer *buffer);
+GLuint gsk_ngl_buffer_submit (GskNglBuffer *buffer);
static inline gpointer
-gsk_gl_buffer_advance (GskGLBuffer *buffer,
- guint count)
+gsk_ngl_buffer_advance (GskNglBuffer *buffer,
+ guint count)
{
gpointer ret;
gsize to_alloc = count * buffer->element_size;
@@ -63,19 +63,19 @@ gsk_gl_buffer_advance (GskGLBuffer *buffer,
}
static inline void
-gsk_gl_buffer_retract (GskGLBuffer *buffer,
- guint count)
+gsk_ngl_buffer_retract (GskNglBuffer *buffer,
+ guint count)
{
buffer->buffer_pos -= count * buffer->element_size;
buffer->count -= count;
}
static inline guint
-gsk_gl_buffer_get_offset (GskGLBuffer *buffer)
+gsk_ngl_buffer_get_offset (GskNglBuffer *buffer)
{
return buffer->count;
}
G_END_DECLS
-#endif /* __GSK_GL_BUFFER_PRIVATE_H__ */
+#endif /* __GSK_NGL_BUFFER_PRIVATE_H__ */
diff --git a/gsk/next/gskglcommandqueue.c b/gsk/ngl/gsknglcommandqueue.c
similarity index 69%
rename from gsk/next/gskglcommandqueue.c
rename to gsk/ngl/gsknglcommandqueue.c
index 583d43bbdc..9426c199b1 100644
--- a/gsk/next/gskglcommandqueue.c
+++ b/gsk/ngl/gsknglcommandqueue.c
@@ -1,4 +1,4 @@
-/* gskglcommandqueue.c
+/* gsknglcommandqueue.c
*
* Copyright 2017 Timm Bäder <mail baedert org>
* Copyright 2018 Matthias Clasen <mclasen redhat com>
@@ -31,19 +31,19 @@
#include <gsk/gskdebugprivate.h>
#include <gsk/gskroundedrectprivate.h>
-#include "gskglattachmentstateprivate.h"
-#include "gskglbufferprivate.h"
-#include "gskglcommandqueueprivate.h"
-#include "gskgluniformstateprivate.h"
+#include "gsknglattachmentstateprivate.h"
+#include "gsknglbufferprivate.h"
+#include "gsknglcommandqueueprivate.h"
+#include "gskngluniformstateprivate.h"
#include "inlinearray.h"
-G_DEFINE_TYPE (GskGLCommandQueue, gsk_gl_command_queue, G_TYPE_OBJECT)
+G_DEFINE_TYPE (GskNglCommandQueue, gsk_ngl_command_queue, G_TYPE_OBJECT)
G_GNUC_UNUSED static inline void
-print_uniform (GskGLUniformFormat format,
- guint array_count,
- gconstpointer valueptr)
+print_uniform (GskNglUniformFormat format,
+ guint array_count,
+ gconstpointer valueptr)
{
const union {
graphene_matrix_t matrix[0];
@@ -55,46 +55,46 @@ print_uniform (GskGLUniformFormat format,
switch (format)
{
- case GSK_GL_UNIFORM_FORMAT_1F:
+ case GSK_NGL_UNIFORM_FORMAT_1F:
g_printerr ("1f<%f>", data->fval[0]);
break;
- case GSK_GL_UNIFORM_FORMAT_2F:
+ case GSK_NGL_UNIFORM_FORMAT_2F:
g_printerr ("2f<%f,%f>", data->fval[0], data->fval[1]);
break;
- case GSK_GL_UNIFORM_FORMAT_3F:
+ case GSK_NGL_UNIFORM_FORMAT_3F:
g_printerr ("3f<%f,%f,%f>", data->fval[0], data->fval[1], data->fval[2]);
break;
- case GSK_GL_UNIFORM_FORMAT_4F:
+ case GSK_NGL_UNIFORM_FORMAT_4F:
g_printerr ("4f<%f,%f,%f,%f>", data->fval[0], data->fval[1], data->fval[2], data->fval[3]);
break;
- case GSK_GL_UNIFORM_FORMAT_1I:
- case GSK_GL_UNIFORM_FORMAT_TEXTURE:
+ case GSK_NGL_UNIFORM_FORMAT_1I:
+ case GSK_NGL_UNIFORM_FORMAT_TEXTURE:
g_printerr ("1i<%d>", data->ival[0]);
break;
- case GSK_GL_UNIFORM_FORMAT_1UI:
+ case GSK_NGL_UNIFORM_FORMAT_1UI:
g_printerr ("1ui<%u>", data->uval[0]);
break;
- case GSK_GL_UNIFORM_FORMAT_COLOR: {
+ case GSK_NGL_UNIFORM_FORMAT_COLOR: {
char *str = gdk_rgba_to_string (valueptr);
g_printerr ("%s", str);
g_free (str);
break;
}
- case GSK_GL_UNIFORM_FORMAT_ROUNDED_RECT: {
+ case GSK_NGL_UNIFORM_FORMAT_ROUNDED_RECT: {
char *str = gsk_rounded_rect_to_string (valueptr);
g_printerr ("%s", str);
g_free (str);
break;
}
- case GSK_GL_UNIFORM_FORMAT_MATRIX: {
+ case GSK_NGL_UNIFORM_FORMAT_MATRIX: {
float mat[16];
graphene_matrix_to_float (&data->matrix[0], mat);
g_printerr ("matrix<");
@@ -104,10 +104,10 @@ print_uniform (GskGLUniformFormat format,
break;
}
- case GSK_GL_UNIFORM_FORMAT_1FV:
- case GSK_GL_UNIFORM_FORMAT_2FV:
- case GSK_GL_UNIFORM_FORMAT_3FV:
- case GSK_GL_UNIFORM_FORMAT_4FV:
+ case GSK_NGL_UNIFORM_FORMAT_1FV:
+ case GSK_NGL_UNIFORM_FORMAT_2FV:
+ case GSK_NGL_UNIFORM_FORMAT_3FV:
+ case GSK_NGL_UNIFORM_FORMAT_4FV:
/* non-V variants are -4 from V variants */
format -= 4;
g_printerr ("[");
@@ -116,42 +116,42 @@ print_uniform (GskGLUniformFormat format,
print_uniform (format, 0, valueptr);
if (i + 1 != array_count)
g_printerr (",");
- valueptr = ((guint8*)valueptr + gsk_gl_uniform_format_size (format));
+ valueptr = ((guint8*)valueptr + gsk_ngl_uniform_format_size (format));
}
g_printerr ("]");
break;
- case GSK_GL_UNIFORM_FORMAT_2I:
+ case GSK_NGL_UNIFORM_FORMAT_2I:
g_printerr ("2i<%d,%d>", data->ival[0], data->ival[1]);
break;
- case GSK_GL_UNIFORM_FORMAT_3I:
+ case GSK_NGL_UNIFORM_FORMAT_3I:
g_printerr ("3i<%d,%d,%d>", data->ival[0], data->ival[1], data->ival[2]);
break;
- case GSK_GL_UNIFORM_FORMAT_4I:
+ case GSK_NGL_UNIFORM_FORMAT_4I:
g_printerr ("3i<%d,%d,%d,%d>", data->ival[0], data->ival[1], data->ival[2], data->ival[3]);
break;
- case GSK_GL_UNIFORM_FORMAT_LAST:
+ case GSK_NGL_UNIFORM_FORMAT_LAST:
default:
g_assert_not_reached ();
}
}
G_GNUC_UNUSED static inline void
-gsk_gl_command_queue_print_batch (GskGLCommandQueue *self,
- const GskGLCommandBatch *batch)
+gsk_ngl_command_queue_print_batch (GskNglCommandQueue *self,
+ const GskNglCommandBatch *batch)
{
static const char *command_kinds[] = { "Clear", NULL, NULL, "Draw", };
guint framebuffer_id;
- g_assert (GSK_IS_GL_COMMAND_QUEUE (self));
+ g_assert (GSK_IS_NGL_COMMAND_QUEUE (self));
g_assert (batch != NULL);
- if (batch->any.kind == GSK_GL_COMMAND_KIND_CLEAR)
+ if (batch->any.kind == GSK_NGL_COMMAND_KIND_CLEAR)
framebuffer_id = batch->clear.framebuffer;
- else if (batch->any.kind == GSK_GL_COMMAND_KIND_DRAW)
+ else if (batch->any.kind == GSK_NGL_COMMAND_KIND_DRAW)
framebuffer_id = batch->draw.framebuffer;
else
return;
@@ -161,28 +161,28 @@ gsk_gl_command_queue_print_batch (GskGLCommandQueue *self,
g_printerr (" Viewport: %dx%d\n", batch->any.viewport.width, batch->any.viewport.height);
g_printerr (" Framebuffer: %d\n", framebuffer_id);
- if (batch->any.kind == GSK_GL_COMMAND_KIND_DRAW)
+ if (batch->any.kind == GSK_NGL_COMMAND_KIND_DRAW)
{
g_printerr (" Program: %d\n", batch->any.program);
g_printerr (" Vertices: %d\n", batch->draw.vbo_count);
for (guint i = 0; i < batch->draw.bind_count; i++)
{
- const GskGLCommandBind *bind = &self->batch_binds.items[batch->draw.bind_offset + i];
+ const GskNglCommandBind *bind = &self->batch_binds.items[batch->draw.bind_offset + i];
g_print (" Bind[%d]: %u\n", bind->texture, bind->id);
}
for (guint i = 0; i < batch->draw.uniform_count; i++)
{
- const GskGLCommandUniform *uniform = &self->batch_uniforms.items[batch->draw.uniform_offset + i];
+ const GskNglCommandUniform *uniform = &self->batch_uniforms.items[batch->draw.uniform_offset + i];
g_printerr (" Uniform[%02d]: ", uniform->location);
print_uniform (uniform->info.format,
uniform->info.array_count,
- gsk_gl_uniform_state_get_uniform_data (self->uniforms, uniform->info.offset));
+ gsk_ngl_uniform_state_get_uniform_data (self->uniforms, uniform->info.offset));
g_printerr ("\n");
}
}
- else if (batch->any.kind == GSK_GL_COMMAND_KIND_CLEAR)
+ else if (batch->any.kind == GSK_NGL_COMMAND_KIND_CLEAR)
{
g_printerr (" Bits: 0x%x\n", batch->clear.bits);
}
@@ -191,17 +191,17 @@ gsk_gl_command_queue_print_batch (GskGLCommandQueue *self,
}
G_GNUC_UNUSED static inline void
-gsk_gl_command_queue_capture_png (GskGLCommandQueue *self,
- const char *filename,
- guint width,
- guint height,
- gboolean flip_y)
+gsk_ngl_command_queue_capture_png (GskNglCommandQueue *self,
+ const char *filename,
+ guint width,
+ guint height,
+ gboolean flip_y)
{
cairo_surface_t *surface;
guint8 *data;
guint stride;
- g_assert (GSK_IS_GL_COMMAND_QUEUE (self));
+ g_assert (GSK_IS_NGL_COMMAND_QUEUE (self));
g_assert (filename != NULL);
stride = cairo_format_stride_for_width (CAIRO_FORMAT_ARGB32, width);
@@ -230,7 +230,7 @@ gsk_gl_command_queue_capture_png (GskGLCommandQueue *self,
}
static inline gboolean
-will_ignore_batch (GskGLCommandQueue *self)
+will_ignore_batch (GskNglCommandQueue *self)
{
if G_LIKELY (self->batches.len < G_MAXINT16)
return FALSE;
@@ -245,10 +245,10 @@ will_ignore_batch (GskGLCommandQueue *self)
}
static inline guint
-snapshot_attachments (const GskGLAttachmentState *state,
- GskGLCommandBinds *array)
+snapshot_attachments (const GskNglAttachmentState *state,
+ GskNglCommandBinds *array)
{
- GskGLCommandBind *bind = gsk_gl_command_binds_append_n (array, G_N_ELEMENTS (state->textures));
+ GskNglCommandBind *bind = gsk_ngl_command_binds_append_n (array, G_N_ELEMENTS (state->textures));
guint count = 0;
for (guint i = 0; i < G_N_ELEMENTS (state->textures); i++)
@@ -268,17 +268,17 @@ snapshot_attachments (const GskGLAttachmentState *state,
}
static inline guint
-snapshot_uniforms (GskGLUniformState *state,
- GskGLUniformProgram *program,
- GskGLCommandUniforms *array)
+snapshot_uniforms (GskNglUniformState *state,
+ GskNglUniformProgram *program,
+ GskNglCommandUniforms *array)
{
- GskGLCommandUniform *uniform = gsk_gl_command_uniforms_append_n (array, program->n_sparse);
+ GskNglCommandUniform *uniform = gsk_ngl_command_uniforms_append_n (array, program->n_sparse);
guint count = 0;
for (guint i = 0; i < program->n_sparse; i++)
{
guint location = program->sparse[i];
- const GskGLUniformInfo *info = &program->uniforms[location].info;
+ const GskNglUniformInfo *info = &program->uniforms[location].info;
if (!info->initial)
{
@@ -295,9 +295,9 @@ snapshot_uniforms (GskGLUniformState *state,
}
static inline gboolean
-snapshots_equal (GskGLCommandQueue *self,
- GskGLCommandBatch *first,
- GskGLCommandBatch *second)
+snapshots_equal (GskNglCommandQueue *self,
+ GskNglCommandBatch *first,
+ GskNglCommandBatch *second)
{
if (first->draw.bind_count != second->draw.bind_count ||
first->draw.uniform_count != second->draw.uniform_count)
@@ -305,8 +305,8 @@ snapshots_equal (GskGLCommandQueue *self,
for (guint i = 0; i < first->draw.bind_count; i++)
{
- const GskGLCommandBind *fb = &self->batch_binds.items[first->draw.bind_offset+i];
- const GskGLCommandBind *sb = &self->batch_binds.items[second->draw.bind_offset+i];
+ const GskNglCommandBind *fb = &self->batch_binds.items[first->draw.bind_offset+i];
+ const GskNglCommandBind *sb = &self->batch_binds.items[second->draw.bind_offset+i];
if (fb->id != sb->id || fb->texture != sb->texture)
return FALSE;
@@ -314,8 +314,8 @@ snapshots_equal (GskGLCommandQueue *self,
for (guint i = 0; i < first->draw.uniform_count; i++)
{
- const GskGLCommandUniform *fu = &self->batch_uniforms.items[first->draw.uniform_offset+i];
- const GskGLCommandUniform *su = &self->batch_uniforms.items[second->draw.uniform_offset+i];
+ const GskNglCommandUniform *fu = &self->batch_uniforms.items[first->draw.uniform_offset+i];
+ const GskNglCommandUniform *su = &self->batch_uniforms.items[second->draw.uniform_offset+i];
gconstpointer fdata;
gconstpointer sdata;
gsize len;
@@ -328,47 +328,47 @@ snapshots_equal (GskGLCommandQueue *self,
fu->info.array_count != su->info.array_count)
return FALSE;
- fdata = gsk_gl_uniform_state_get_uniform_data (self->uniforms, fu->info.offset);
- sdata = gsk_gl_uniform_state_get_uniform_data (self->uniforms, su->info.offset);
+ fdata = gsk_ngl_uniform_state_get_uniform_data (self->uniforms, fu->info.offset);
+ sdata = gsk_ngl_uniform_state_get_uniform_data (self->uniforms, su->info.offset);
switch (fu->info.format)
{
- case GSK_GL_UNIFORM_FORMAT_1F:
- case GSK_GL_UNIFORM_FORMAT_1FV:
- case GSK_GL_UNIFORM_FORMAT_1I:
- case GSK_GL_UNIFORM_FORMAT_TEXTURE:
- case GSK_GL_UNIFORM_FORMAT_1UI:
+ case GSK_NGL_UNIFORM_FORMAT_1F:
+ case GSK_NGL_UNIFORM_FORMAT_1FV:
+ case GSK_NGL_UNIFORM_FORMAT_1I:
+ case GSK_NGL_UNIFORM_FORMAT_TEXTURE:
+ case GSK_NGL_UNIFORM_FORMAT_1UI:
len = 4;
break;
- case GSK_GL_UNIFORM_FORMAT_2F:
- case GSK_GL_UNIFORM_FORMAT_2FV:
- case GSK_GL_UNIFORM_FORMAT_2I:
+ case GSK_NGL_UNIFORM_FORMAT_2F:
+ case GSK_NGL_UNIFORM_FORMAT_2FV:
+ case GSK_NGL_UNIFORM_FORMAT_2I:
len = 8;
break;
- case GSK_GL_UNIFORM_FORMAT_3F:
- case GSK_GL_UNIFORM_FORMAT_3FV:
- case GSK_GL_UNIFORM_FORMAT_3I:
+ case GSK_NGL_UNIFORM_FORMAT_3F:
+ case GSK_NGL_UNIFORM_FORMAT_3FV:
+ case GSK_NGL_UNIFORM_FORMAT_3I:
len = 12;
break;
- case GSK_GL_UNIFORM_FORMAT_4F:
- case GSK_GL_UNIFORM_FORMAT_4FV:
- case GSK_GL_UNIFORM_FORMAT_4I:
+ case GSK_NGL_UNIFORM_FORMAT_4F:
+ case GSK_NGL_UNIFORM_FORMAT_4FV:
+ case GSK_NGL_UNIFORM_FORMAT_4I:
len = 16;
break;
- case GSK_GL_UNIFORM_FORMAT_MATRIX:
+ case GSK_NGL_UNIFORM_FORMAT_MATRIX:
len = sizeof (float) * 16;
break;
- case GSK_GL_UNIFORM_FORMAT_ROUNDED_RECT:
+ case GSK_NGL_UNIFORM_FORMAT_ROUNDED_RECT:
len = sizeof (float) * 12;
break;
- case GSK_GL_UNIFORM_FORMAT_COLOR:
+ case GSK_NGL_UNIFORM_FORMAT_COLOR:
len = sizeof (float) * 4;
break;
@@ -386,66 +386,66 @@ snapshots_equal (GskGLCommandQueue *self,
}
static void
-gsk_gl_command_queue_dispose (GObject *object)
+gsk_ngl_command_queue_dispose (GObject *object)
{
- GskGLCommandQueue *self = (GskGLCommandQueue *)object;
+ GskNglCommandQueue *self = (GskNglCommandQueue *)object;
- g_assert (GSK_IS_GL_COMMAND_QUEUE (self));
+ g_assert (GSK_IS_NGL_COMMAND_QUEUE (self));
g_clear_object (&self->profiler);
g_clear_object (&self->gl_profiler);
g_clear_object (&self->context);
- g_clear_pointer (&self->attachments, gsk_gl_attachment_state_unref);
- g_clear_pointer (&self->uniforms, gsk_gl_uniform_state_unref);
+ g_clear_pointer (&self->attachments, gsk_ngl_attachment_state_unref);
+ g_clear_pointer (&self->uniforms, gsk_ngl_uniform_state_unref);
- gsk_gl_command_batches_clear (&self->batches);
- gsk_gl_command_binds_clear (&self->batch_binds);
- gsk_gl_command_uniforms_clear (&self->batch_uniforms);
+ gsk_ngl_command_batches_clear (&self->batches);
+ gsk_ngl_command_binds_clear (&self->batch_binds);
+ gsk_ngl_command_uniforms_clear (&self->batch_uniforms);
- gsk_gl_buffer_destroy (&self->vertices);
+ gsk_ngl_buffer_destroy (&self->vertices);
- G_OBJECT_CLASS (gsk_gl_command_queue_parent_class)->dispose (object);
+ G_OBJECT_CLASS (gsk_ngl_command_queue_parent_class)->dispose (object);
}
static void
-gsk_gl_command_queue_class_init (GskGLCommandQueueClass *klass)
+gsk_ngl_command_queue_class_init (GskNglCommandQueueClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
- object_class->dispose = gsk_gl_command_queue_dispose;
+ object_class->dispose = gsk_ngl_command_queue_dispose;
}
static void
-gsk_gl_command_queue_init (GskGLCommandQueue *self)
+gsk_ngl_command_queue_init (GskNglCommandQueue *self)
{
self->max_texture_size = -1;
- gsk_gl_command_batches_init (&self->batches, 128);
- gsk_gl_command_binds_init (&self->batch_binds, 1024);
- gsk_gl_command_uniforms_init (&self->batch_uniforms, 2048);
+ gsk_ngl_command_batches_init (&self->batches, 128);
+ gsk_ngl_command_binds_init (&self->batch_binds, 1024);
+ gsk_ngl_command_uniforms_init (&self->batch_uniforms, 2048);
self->debug_groups = g_string_chunk_new (4096);
- gsk_gl_buffer_init (&self->vertices, GL_ARRAY_BUFFER, sizeof (GskGLDrawVertex));
+ gsk_ngl_buffer_init (&self->vertices, GL_ARRAY_BUFFER, sizeof (GskNglDrawVertex));
}
-GskGLCommandQueue *
-gsk_gl_command_queue_new (GdkGLContext *context,
- GskGLUniformState *uniforms)
+GskNglCommandQueue *
+gsk_ngl_command_queue_new (GdkGLContext *context,
+ GskNglUniformState *uniforms)
{
- GskGLCommandQueue *self;
+ GskNglCommandQueue *self;
g_return_val_if_fail (GDK_IS_GL_CONTEXT (context), NULL);
self = g_object_new (GSK_TYPE_GL_COMMAND_QUEUE, NULL);
self->context = g_object_ref (context);
- self->attachments = gsk_gl_attachment_state_new ();
+ self->attachments = gsk_ngl_attachment_state_new ();
/* Use shared uniform state if we're provided one */
if (uniforms != NULL)
- self->uniforms = gsk_gl_uniform_state_ref (uniforms);
+ self->uniforms = gsk_ngl_uniform_state_ref (uniforms);
else
- self->uniforms = gsk_gl_uniform_state_new ();
+ self->uniforms = gsk_ngl_uniform_state_new ();
/* Determine max texture size immediately and restore context */
gdk_gl_context_make_current (context);
@@ -454,14 +454,14 @@ gsk_gl_command_queue_new (GdkGLContext *context,
return g_steal_pointer (&self);
}
-static inline GskGLCommandBatch *
-begin_next_batch (GskGLCommandQueue *self)
+static inline GskNglCommandBatch *
+begin_next_batch (GskNglCommandQueue *self)
{
- GskGLCommandBatch *batch;
+ GskNglCommandBatch *batch;
- g_assert (GSK_IS_GL_COMMAND_QUEUE (self));
+ g_assert (GSK_IS_NGL_COMMAND_QUEUE (self));
- /* GskGLCommandBatch contains an embedded linked list using integers into the
+ /* GskNglCommandBatch contains an embedded linked list using integers into the
* self->batches array. We can't use pointer because the batches could be
* realloc()'d at runtime.
*
@@ -474,7 +474,7 @@ begin_next_batch (GskGLCommandQueue *self)
* proper order.
*/
- batch = gsk_gl_command_batches_append (&self->batches);
+ batch = gsk_ngl_command_batches_append (&self->batches);
batch->any.next_batch_index = -1;
batch->any.prev_batch_index = self->tail_batch_index;
@@ -482,11 +482,11 @@ begin_next_batch (GskGLCommandQueue *self)
}
static void
-enqueue_batch (GskGLCommandQueue *self)
+enqueue_batch (GskNglCommandQueue *self)
{
guint index;
- g_assert (GSK_IS_GL_COMMAND_QUEUE (self));
+ g_assert (GSK_IS_NGL_COMMAND_QUEUE (self));
g_assert (self->batches.len > 0);
/* Batches are linked lists but using indexes into the batches array instead
@@ -503,7 +503,7 @@ enqueue_batch (GskGLCommandQueue *self)
if (self->tail_batch_index != -1)
{
- GskGLCommandBatch *prev = &self->batches.items[self->tail_batch_index];
+ GskNglCommandBatch *prev = &self->batches.items[self->tail_batch_index];
prev->any.next_batch_index = index;
}
@@ -512,23 +512,23 @@ enqueue_batch (GskGLCommandQueue *self)
}
static void
-discard_batch (GskGLCommandQueue *self)
+discard_batch (GskNglCommandQueue *self)
{
- g_assert (GSK_IS_GL_COMMAND_QUEUE (self));
+ g_assert (GSK_IS_NGL_COMMAND_QUEUE (self));
g_assert (self->batches.len > 0);
self->batches.len--;
}
void
-gsk_gl_command_queue_begin_draw (GskGLCommandQueue *self,
- GskGLUniformProgram *program,
- guint width,
- guint height)
+gsk_ngl_command_queue_begin_draw (GskNglCommandQueue *self,
+ GskNglUniformProgram *program,
+ guint width,
+ guint height)
{
- GskGLCommandBatch *batch;
+ GskNglCommandBatch *batch;
- g_assert (GSK_IS_GL_COMMAND_QUEUE (self));
+ g_assert (GSK_IS_NGL_COMMAND_QUEUE (self));
g_assert (self->in_draw == FALSE);
g_assert (width <= G_MAXUINT16);
g_assert (height <= G_MAXUINT16);
@@ -542,7 +542,7 @@ gsk_gl_command_queue_begin_draw (GskGLCommandQueue *self,
self->program_info = program;
batch = begin_next_batch (self);
- batch->any.kind = GSK_GL_COMMAND_KIND_DRAW;
+ batch->any.kind = GSK_NGL_COMMAND_KIND_DRAW;
batch->any.program = program->program_id;
batch->any.next_batch_index = -1;
batch->any.viewport.width = width;
@@ -553,7 +553,7 @@ gsk_gl_command_queue_begin_draw (GskGLCommandQueue *self,
batch->draw.bind_count = 0;
batch->draw.bind_offset = self->batch_binds.len;
batch->draw.vbo_count = 0;
- batch->draw.vbo_offset = gsk_gl_buffer_get_offset (&self->vertices);
+ batch->draw.vbo_offset = gsk_ngl_buffer_get_offset (&self->vertices);
self->fbo_max = MAX (self->fbo_max, batch->draw.framebuffer);
@@ -561,21 +561,21 @@ gsk_gl_command_queue_begin_draw (GskGLCommandQueue *self,
}
void
-gsk_gl_command_queue_end_draw (GskGLCommandQueue *self)
+gsk_ngl_command_queue_end_draw (GskNglCommandQueue *self)
{
- GskGLCommandBatch *last_batch;
- GskGLCommandBatch *batch;
+ GskNglCommandBatch *last_batch;
+ GskNglCommandBatch *batch;
- g_assert (GSK_IS_GL_COMMAND_QUEUE (self));
+ g_assert (GSK_IS_NGL_COMMAND_QUEUE (self));
g_assert (self->batches.len > 0);
if (will_ignore_batch (self))
return;
- batch = gsk_gl_command_batches_tail (&self->batches);
+ batch = gsk_ngl_command_batches_tail (&self->batches);
g_assert (self->in_draw == TRUE);
- g_assert (batch->any.kind == GSK_GL_COMMAND_KIND_DRAW);
+ g_assert (batch->any.kind == GSK_NGL_COMMAND_KIND_DRAW);
if G_UNLIKELY (batch->draw.vbo_count == 0)
{
@@ -614,7 +614,7 @@ gsk_gl_command_queue_end_draw (GskGLCommandQueue *self)
/* Do simple chaining of draw to last batch. */
if (last_batch != NULL &&
- last_batch->any.kind == GSK_GL_COMMAND_KIND_DRAW &&
+ last_batch->any.kind == GSK_NGL_COMMAND_KIND_DRAW &&
last_batch->any.program == batch->any.program &&
last_batch->any.viewport.width == batch->any.viewport.width &&
last_batch->any.viewport.height == batch->any.viewport.height &&
@@ -635,52 +635,52 @@ gsk_gl_command_queue_end_draw (GskGLCommandQueue *self)
}
/**
- * gsk_gl_command_queue_split_draw:
- * @self a #GskGLCommandQueue
+ * gsk_ngl_command_queue_split_draw:
+ * @self a #GskNglCommandQueue
*
- * This function is like calling gsk_gl_command_queue_end_draw() followed by
- * a gsk_gl_command_queue_begin_draw() with the same parameters as a
+ * This function is like calling gsk_ngl_command_queue_end_draw() followed by
+ * a gsk_ngl_command_queue_begin_draw() with the same parameters as a
* previous begin draw (if shared uniforms where not changed further).
*
* This is useful to avoid comparisons inside of loops where we know shared
* uniforms are not changing.
*
- * This generally should just be called from gsk_gl_program_split_draw()
+ * This generally should just be called from gsk_ngl_program_split_draw()
* as that is where the begin/end flow happens from the render job.
*/
void
-gsk_gl_command_queue_split_draw (GskGLCommandQueue *self)
+gsk_ngl_command_queue_split_draw (GskNglCommandQueue *self)
{
- GskGLCommandBatch *batch;
- GskGLUniformProgram *program;
+ GskNglCommandBatch *batch;
+ GskNglUniformProgram *program;
guint width;
guint height;
- g_assert (GSK_IS_GL_COMMAND_QUEUE (self));
+ g_assert (GSK_IS_NGL_COMMAND_QUEUE (self));
g_assert (self->batches.len > 0);
g_assert (self->in_draw == TRUE);
program = self->program_info;
- batch = gsk_gl_command_batches_tail (&self->batches);
+ batch = gsk_ngl_command_batches_tail (&self->batches);
- g_assert (batch->any.kind == GSK_GL_COMMAND_KIND_DRAW);
+ g_assert (batch->any.kind == GSK_NGL_COMMAND_KIND_DRAW);
width = batch->any.viewport.width;
height = batch->any.viewport.height;
- gsk_gl_command_queue_end_draw (self);
- gsk_gl_command_queue_begin_draw (self, program, width, height);
+ gsk_ngl_command_queue_end_draw (self);
+ gsk_ngl_command_queue_begin_draw (self, program, width, height);
}
void
-gsk_gl_command_queue_clear (GskGLCommandQueue *self,
- guint clear_bits,
- const graphene_rect_t *viewport)
+gsk_ngl_command_queue_clear (GskNglCommandQueue *self,
+ guint clear_bits,
+ const graphene_rect_t *viewport)
{
- GskGLCommandBatch *batch;
+ GskNglCommandBatch *batch;
- g_assert (GSK_IS_GL_COMMAND_QUEUE (self));
+ g_assert (GSK_IS_NGL_COMMAND_QUEUE (self));
g_assert (self->in_draw == FALSE);
if (will_ignore_batch (self))
@@ -690,7 +690,7 @@ gsk_gl_command_queue_clear (GskGLCommandQueue *self,
clear_bits = GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT;
batch = begin_next_batch (self);
- batch->any.kind = GSK_GL_COMMAND_KIND_CLEAR;
+ batch->any.kind = GSK_NGL_COMMAND_KIND_CLEAR;
batch->any.viewport.width = viewport->size.width;
batch->any.viewport.height = viewport->size.height;
batch->clear.bits = clear_bits;
@@ -706,35 +706,35 @@ gsk_gl_command_queue_clear (GskGLCommandQueue *self,
}
GdkGLContext *
-gsk_gl_command_queue_get_context (GskGLCommandQueue *self)
+gsk_ngl_command_queue_get_context (GskNglCommandQueue *self)
{
- g_return_val_if_fail (GSK_IS_GL_COMMAND_QUEUE (self), NULL);
+ g_return_val_if_fail (GSK_IS_NGL_COMMAND_QUEUE (self), NULL);
return self->context;
}
void
-gsk_gl_command_queue_make_current (GskGLCommandQueue *self)
+gsk_ngl_command_queue_make_current (GskNglCommandQueue *self)
{
- g_assert (GSK_IS_GL_COMMAND_QUEUE (self));
+ g_assert (GSK_IS_NGL_COMMAND_QUEUE (self));
g_assert (GDK_IS_GL_CONTEXT (self->context));
gdk_gl_context_make_current (self->context);
}
void
-gsk_gl_command_queue_delete_program (GskGLCommandQueue *self,
- guint program)
+gsk_ngl_command_queue_delete_program (GskNglCommandQueue *self,
+ guint program)
{
- g_assert (GSK_IS_GL_COMMAND_QUEUE (self));
+ g_assert (GSK_IS_NGL_COMMAND_QUEUE (self));
glDeleteProgram (program);
}
static inline void
-apply_uniform (gconstpointer dataptr,
- GskGLUniformInfo info,
- guint location)
+apply_uniform (gconstpointer dataptr,
+ GskNglUniformInfo info,
+ guint location)
{
g_assert (dataptr != NULL);
g_assert (info.format > 0);
@@ -742,60 +742,60 @@ apply_uniform (gconstpointer dataptr,
switch (info.format)
{
- case GSK_GL_UNIFORM_FORMAT_1F:
+ case GSK_NGL_UNIFORM_FORMAT_1F:
glUniform1fv (location, 1, dataptr);
break;
- case GSK_GL_UNIFORM_FORMAT_2F:
+ case GSK_NGL_UNIFORM_FORMAT_2F:
glUniform2fv (location, 1, dataptr);
break;
- case GSK_GL_UNIFORM_FORMAT_3F:
+ case GSK_NGL_UNIFORM_FORMAT_3F:
glUniform3fv (location, 1, dataptr);
break;
- case GSK_GL_UNIFORM_FORMAT_4F:
+ case GSK_NGL_UNIFORM_FORMAT_4F:
glUniform4fv (location, 1, dataptr);
break;
- case GSK_GL_UNIFORM_FORMAT_1FV:
+ case GSK_NGL_UNIFORM_FORMAT_1FV:
glUniform1fv (location, info.array_count, dataptr);
break;
- case GSK_GL_UNIFORM_FORMAT_2FV:
+ case GSK_NGL_UNIFORM_FORMAT_2FV:
glUniform2fv (location, info.array_count, dataptr);
break;
- case GSK_GL_UNIFORM_FORMAT_3FV:
+ case GSK_NGL_UNIFORM_FORMAT_3FV:
glUniform3fv (location, info.array_count, dataptr);
break;
- case GSK_GL_UNIFORM_FORMAT_4FV:
+ case GSK_NGL_UNIFORM_FORMAT_4FV:
glUniform4fv (location, info.array_count, dataptr);
break;
- case GSK_GL_UNIFORM_FORMAT_1I:
- case GSK_GL_UNIFORM_FORMAT_TEXTURE:
+ case GSK_NGL_UNIFORM_FORMAT_1I:
+ case GSK_NGL_UNIFORM_FORMAT_TEXTURE:
glUniform1iv (location, 1, dataptr);
break;
- case GSK_GL_UNIFORM_FORMAT_2I:
+ case GSK_NGL_UNIFORM_FORMAT_2I:
glUniform2iv (location, 1, dataptr);
break;
- case GSK_GL_UNIFORM_FORMAT_3I:
+ case GSK_NGL_UNIFORM_FORMAT_3I:
glUniform3iv (location, 1, dataptr);
break;
- case GSK_GL_UNIFORM_FORMAT_4I:
+ case GSK_NGL_UNIFORM_FORMAT_4I:
glUniform4iv (location, 1, dataptr);
break;
- case GSK_GL_UNIFORM_FORMAT_1UI:
+ case GSK_NGL_UNIFORM_FORMAT_1UI:
glUniform1uiv (location, 1, dataptr);
break;
- case GSK_GL_UNIFORM_FORMAT_MATRIX: {
+ case GSK_NGL_UNIFORM_FORMAT_MATRIX: {
float mat[16];
graphene_matrix_to_float (dataptr, mat);
glUniformMatrix4fv (location, 1, GL_FALSE, mat);
@@ -810,11 +810,11 @@ apply_uniform (gconstpointer dataptr,
}
break;
- case GSK_GL_UNIFORM_FORMAT_COLOR:
+ case GSK_NGL_UNIFORM_FORMAT_COLOR:
glUniform4fv (location, 1, dataptr);
break;
- case GSK_GL_UNIFORM_FORMAT_ROUNDED_RECT:
+ case GSK_NGL_UNIFORM_FORMAT_ROUNDED_RECT:
glUniform4fv (location, 3, dataptr);
break;
@@ -868,8 +868,8 @@ apply_scissor (gboolean *state,
}
static inline gboolean
-apply_framebuffer (int *framebuffer,
- guint new_framebuffer)
+apply_framebuffer (int *framebuffer,
+ guint new_framebuffer)
{
if G_UNLIKELY (new_framebuffer != *framebuffer)
{
@@ -882,8 +882,8 @@ apply_framebuffer (int *framebuffer,
}
static inline void
-gsk_gl_command_queue_unlink (GskGLCommandQueue *self,
- GskGLCommandBatch *batch)
+gsk_ngl_command_queue_unlink (GskNglCommandQueue *self,
+ GskNglCommandBatch *batch)
{
if (batch->any.prev_batch_index == -1)
self->head_batch_index = batch->any.next_batch_index;
@@ -900,9 +900,9 @@ gsk_gl_command_queue_unlink (GskGLCommandQueue *self,
}
static inline void
-gsk_gl_command_queue_insert_before (GskGLCommandQueue *self,
- GskGLCommandBatch *batch,
- GskGLCommandBatch *sibling)
+gsk_ngl_command_queue_insert_before (GskNglCommandQueue *self,
+ GskNglCommandBatch *batch,
+ GskNglCommandBatch *sibling)
{
int sibling_index;
int index;
@@ -912,8 +912,8 @@ gsk_gl_command_queue_insert_before (GskGLCommandQueue *self,
g_assert (sibling >= self->batches.items);
g_assert (sibling < &self->batches.items[self->batches.len]);
- index = gsk_gl_command_batches_index_of (&self->batches, batch);
- sibling_index = gsk_gl_command_batches_index_of (&self->batches, sibling);
+ index = gsk_ngl_command_batches_index_of (&self->batches, batch);
+ sibling_index = gsk_ngl_command_batches_index_of (&self->batches, sibling);
batch->any.next_batch_index = sibling_index;
batch->any.prev_batch_index = sibling->any.prev_batch_index;
@@ -928,13 +928,13 @@ gsk_gl_command_queue_insert_before (GskGLCommandQueue *self,
}
static void
-gsk_gl_command_queue_sort_batches (GskGLCommandQueue *self)
+gsk_ngl_command_queue_sort_batches (GskNglCommandQueue *self)
{
int *seen;
int *seen_free = NULL;
int index;
- g_assert (GSK_IS_GL_COMMAND_QUEUE (self));
+ g_assert (GSK_IS_NGL_COMMAND_QUEUE (self));
g_assert (self->tail_batch_index >= 0);
g_assert (self->fbo_max >= 0);
@@ -959,7 +959,7 @@ gsk_gl_command_queue_sort_batches (GskGLCommandQueue *self)
while (index >= 0)
{
- GskGLCommandBatch *batch = &self->batches.items[index];
+ GskNglCommandBatch *batch = &self->batches.items[index];
int cur_index = index;
int fbo = -1;
@@ -968,11 +968,11 @@ gsk_gl_command_queue_sort_batches (GskGLCommandQueue *self)
switch (batch->any.kind)
{
- case GSK_GL_COMMAND_KIND_DRAW:
+ case GSK_NGL_COMMAND_KIND_DRAW:
fbo = batch->draw.framebuffer;
break;
- case GSK_GL_COMMAND_KIND_CLEAR:
+ case GSK_NGL_COMMAND_KIND_CLEAR:
fbo = batch->clear.framebuffer;
break;
@@ -996,16 +996,16 @@ gsk_gl_command_queue_sort_batches (GskGLCommandQueue *self)
if (seen[fbo] != -1 && seen[fbo] != batch->any.next_batch_index)
{
int mru_index = seen[fbo];
- GskGLCommandBatch *mru = &self->batches.items[mru_index];
+ GskNglCommandBatch *mru = &self->batches.items[mru_index];
g_assert (mru_index > -1);
- gsk_gl_command_queue_unlink (self, batch);
+ gsk_ngl_command_queue_unlink (self, batch);
g_assert (batch->any.prev_batch_index == -1);
g_assert (batch->any.next_batch_index == -1);
- gsk_gl_command_queue_insert_before (self, batch, mru);
+ gsk_ngl_command_queue_insert_before (self, batch, mru);
g_assert (batch->any.prev_batch_index > -1 ||
self->head_batch_index == cur_index);
@@ -1022,8 +1022,8 @@ gsk_gl_command_queue_sort_batches (GskGLCommandQueue *self)
}
/**
- * gsk_gl_command_queue_execute:
- * @self: a #GskGLCommandQueue
+ * gsk_ngl_command_queue_execute:
+ * @self: a #GskNglCommandQueue
* @surface_height: the height of the backing surface
* @scale_factor: the scale factor of the backing surface
* #scissor: (nullable): the scissor clip if any
@@ -1031,10 +1031,10 @@ gsk_gl_command_queue_sort_batches (GskGLCommandQueue *self)
* Executes all of the batches in the command queue.
*/
void
-gsk_gl_command_queue_execute (GskGLCommandQueue *self,
- guint surface_height,
- guint scale_factor,
- const cairo_region_t *scissor)
+gsk_ngl_command_queue_execute (GskNglCommandQueue *self,
+ guint surface_height,
+ guint scale_factor,
+ const cairo_region_t *scissor)
{
G_GNUC_UNUSED guint count = 0;
graphene_rect_t scissor_test;
@@ -1053,7 +1053,7 @@ gsk_gl_command_queue_execute (GskGLCommandQueue *self,
int next_batch_index;
int active = -1;
- g_assert (GSK_IS_GL_COMMAND_QUEUE (self));
+ g_assert (GSK_IS_NGL_COMMAND_QUEUE (self));
g_assert (self->in_draw == FALSE);
if (self->batches.len == 0)
@@ -1062,9 +1062,9 @@ gsk_gl_command_queue_execute (GskGLCommandQueue *self,
for (guint i = 0; i < G_N_ELEMENTS (textures); i++)
textures[i] = -1;
- gsk_gl_command_queue_sort_batches (self);
+ gsk_ngl_command_queue_sort_batches (self);
- gsk_gl_command_queue_make_current (self);
+ gsk_ngl_command_queue_make_current (self);
#ifdef G_ENABLE_DEBUG
gsk_gl_profiler_begin_gpu_region (self->gl_profiler);
@@ -1082,19 +1082,19 @@ gsk_gl_command_queue_execute (GskGLCommandQueue *self,
glGenVertexArrays (1, &vao_id);
glBindVertexArray (vao_id);
- vbo_id = gsk_gl_buffer_submit (&self->vertices);
+ vbo_id = gsk_ngl_buffer_submit (&self->vertices);
/* 0 = position location */
glEnableVertexAttribArray (0);
glVertexAttribPointer (0, 2, GL_FLOAT, GL_FALSE,
- sizeof (GskGLDrawVertex),
- (void *) G_STRUCT_OFFSET (GskGLDrawVertex, position));
+ sizeof (GskNglDrawVertex),
+ (void *) G_STRUCT_OFFSET (GskNglDrawVertex, position));
/* 1 = texture coord location */
glEnableVertexAttribArray (1);
glVertexAttribPointer (1, 2, GL_FLOAT, GL_FALSE,
- sizeof (GskGLDrawVertex),
- (void *) G_STRUCT_OFFSET (GskGLDrawVertex, uv));
+ sizeof (GskNglDrawVertex),
+ (void *) G_STRUCT_OFFSET (GskNglDrawVertex, uv));
/* Setup initial scissor clip */
if (scissor != NULL)
@@ -1114,7 +1114,7 @@ gsk_gl_command_queue_execute (GskGLCommandQueue *self,
while (next_batch_index >= 0)
{
- const GskGLCommandBatch *batch = &self->batches.items[next_batch_index];
+ const GskNglCommandBatch *batch = &self->batches.items[next_batch_index];
g_assert (next_batch_index >= 0);
g_assert (next_batch_index < self->batches.len);
@@ -1124,7 +1124,7 @@ gsk_gl_command_queue_execute (GskGLCommandQueue *self,
switch (batch->any.kind)
{
- case GSK_GL_COMMAND_KIND_CLEAR:
+ case GSK_NGL_COMMAND_KIND_CLEAR:
if (apply_framebuffer (&framebuffer, batch->clear.framebuffer))
{
apply_scissor (&scissor_state, framebuffer, &scissor_test, has_scissor);
@@ -1140,7 +1140,7 @@ gsk_gl_command_queue_execute (GskGLCommandQueue *self,
glClear (batch->clear.bits);
break;
- case GSK_GL_COMMAND_KIND_DRAW:
+ case GSK_NGL_COMMAND_KIND_DRAW:
if (batch->any.program != program)
{
program = batch->any.program;
@@ -1160,7 +1160,7 @@ gsk_gl_command_queue_execute (GskGLCommandQueue *self,
if G_UNLIKELY (batch->draw.bind_count > 0)
{
- const GskGLCommandBind *bind = &self->batch_binds.items[batch->draw.bind_offset];
+ const GskNglCommandBind *bind = &self->batch_binds.items[batch->draw.bind_offset];
for (guint i = 0; i < batch->draw.bind_count; i++)
{
@@ -1184,10 +1184,10 @@ gsk_gl_command_queue_execute (GskGLCommandQueue *self,
if (batch->draw.uniform_count > 0)
{
- const GskGLCommandUniform *u = &self->batch_uniforms.items[batch->draw.uniform_offset];
+ const GskNglCommandUniform *u = &self->batch_uniforms.items[batch->draw.uniform_offset];
for (guint i = 0; i < batch->draw.uniform_count; i++, u++)
- apply_uniform (gsk_gl_uniform_state_get_uniform_data (self->uniforms, u->info.offset),
+ apply_uniform (gsk_ngl_uniform_state_get_uniform_data (self->uniforms, u->info.offset),
u->info, u->location);
n_uniforms += batch->draw.uniform_count;
@@ -1202,20 +1202,20 @@ gsk_gl_command_queue_execute (GskGLCommandQueue *self,
}
#if 0
- if (batch->any.kind == GSK_GL_COMMAND_KIND_DRAW ||
- batch->any.kind == GSK_GL_COMMAND_KIND_CLEAR)
+ if (batch->any.kind == GSK_NGL_COMMAND_KIND_DRAW ||
+ batch->any.kind == GSK_NGL_COMMAND_KIND_CLEAR)
{
char filename[128];
g_snprintf (filename, sizeof filename,
"capture%03u_batch%03d_kind%u_program%u_u%u_b%u_fb%u_ctx%p.png",
count, next_batch_index,
batch->any.kind, batch->any.program,
- batch->any.kind == GSK_GL_COMMAND_KIND_DRAW ? batch->draw.uniform_count : 0,
- batch->any.kind == GSK_GL_COMMAND_KIND_DRAW ? batch->draw.bind_count : 0,
+ batch->any.kind == GSK_NGL_COMMAND_KIND_DRAW ? batch->draw.uniform_count : 0,
+ batch->any.kind == GSK_NGL_COMMAND_KIND_DRAW ? batch->draw.bind_count : 0,
framebuffer,
gdk_gl_context_get_current ());
- gsk_gl_command_queue_capture_png (self, filename, width, height, TRUE);
- gsk_gl_command_queue_print_batch (self, batch);
+ gsk_ngl_command_queue_capture_png (self, filename, width, height, TRUE);
+ gsk_ngl_command_queue_print_batch (self, batch);
}
#endif
@@ -1247,12 +1247,12 @@ gsk_gl_command_queue_execute (GskGLCommandQueue *self,
}
void
-gsk_gl_command_queue_begin_frame (GskGLCommandQueue *self)
+gsk_ngl_command_queue_begin_frame (GskNglCommandQueue *self)
{
- g_assert (GSK_IS_GL_COMMAND_QUEUE (self));
+ g_assert (GSK_IS_NGL_COMMAND_QUEUE (self));
g_assert (self->batches.len == 0);
- gsk_gl_command_queue_make_current (self);
+ gsk_ngl_command_queue_make_current (self);
self->fbo_max = 0;
self->tail_batch_index = -1;
@@ -1261,8 +1261,8 @@ gsk_gl_command_queue_begin_frame (GskGLCommandQueue *self)
}
/**
- * gsk_gl_command_queue_end_frame:
- * @self: a #GskGLCommandQueue
+ * gsk_ngl_command_queue_end_frame:
+ * @self: a #GskNglCommandQueue
*
* This function performs cleanup steps that need to be done after
* a frame has finished. This is not performed as part of the command
@@ -1273,12 +1273,12 @@ gsk_gl_command_queue_begin_frame (GskGLCommandQueue *self)
* has been called to swap the OpenGL framebuffers.
*/
void
-gsk_gl_command_queue_end_frame (GskGLCommandQueue *self)
+gsk_ngl_command_queue_end_frame (GskNglCommandQueue *self)
{
- g_assert (GSK_IS_GL_COMMAND_QUEUE (self));
+ g_assert (GSK_IS_NGL_COMMAND_QUEUE (self));
- gsk_gl_command_queue_make_current (self);
- gsk_gl_uniform_state_end_frame (self->uniforms);
+ gsk_ngl_command_queue_make_current (self);
+ gsk_ngl_uniform_state_end_frame (self->uniforms);
/* Reset attachments so we don't hold on to any textures
* that might be released after the frame.
@@ -1307,26 +1307,26 @@ gsk_gl_command_queue_end_frame (GskGLCommandQueue *self)
}
gboolean
-gsk_gl_command_queue_create_render_target (GskGLCommandQueue *self,
- int width,
- int height,
- int min_filter,
- int mag_filter,
- guint *out_fbo_id,
- guint *out_texture_id)
+gsk_ngl_command_queue_create_render_target (GskNglCommandQueue *self,
+ int width,
+ int height,
+ int min_filter,
+ int mag_filter,
+ guint *out_fbo_id,
+ guint *out_texture_id)
{
GLuint fbo_id = 0;
GLint texture_id;
- g_assert (GSK_IS_GL_COMMAND_QUEUE (self));
+ g_assert (GSK_IS_NGL_COMMAND_QUEUE (self));
g_assert (width > 0);
g_assert (height > 0);
g_assert (out_fbo_id != NULL);
g_assert (out_texture_id != NULL);
- texture_id = gsk_gl_command_queue_create_texture (self,
- width, height,
- min_filter, mag_filter);
+ texture_id = gsk_ngl_command_queue_create_texture (self,
+ width, height,
+ min_filter, mag_filter);
if (texture_id == -1)
{
@@ -1335,7 +1335,7 @@ gsk_gl_command_queue_create_render_target (GskGLCommandQueue *self,
return FALSE;
}
- fbo_id = gsk_gl_command_queue_create_framebuffer (self);
+ fbo_id = gsk_ngl_command_queue_create_framebuffer (self);
glBindFramebuffer (GL_FRAMEBUFFER, fbo_id);
glFramebufferTexture2D (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture_id, 0);
@@ -1348,15 +1348,15 @@ gsk_gl_command_queue_create_render_target (GskGLCommandQueue *self,
}
int
-gsk_gl_command_queue_create_texture (GskGLCommandQueue *self,
- int width,
- int height,
- int min_filter,
- int mag_filter)
+gsk_ngl_command_queue_create_texture (GskNglCommandQueue *self,
+ int width,
+ int height,
+ int min_filter,
+ int mag_filter)
{
GLuint texture_id = 0;
- g_assert (GSK_IS_GL_COMMAND_QUEUE (self));
+ g_assert (GSK_IS_NGL_COMMAND_QUEUE (self));
if G_UNLIKELY (self->max_texture_size == -1)
glGetIntegerv (GL_MAX_TEXTURE_SIZE, &self->max_texture_size);
@@ -1387,11 +1387,11 @@ gsk_gl_command_queue_create_texture (GskGLCommandQueue *self,
}
guint
-gsk_gl_command_queue_create_framebuffer (GskGLCommandQueue *self)
+gsk_ngl_command_queue_create_framebuffer (GskNglCommandQueue *self)
{
GLuint fbo_id;
- g_assert (GSK_IS_GL_COMMAND_QUEUE (self));
+ g_assert (GSK_IS_NGL_COMMAND_QUEUE (self));
glGenFramebuffers (1, &fbo_id);
@@ -1399,14 +1399,14 @@ gsk_gl_command_queue_create_framebuffer (GskGLCommandQueue *self)
}
int
-gsk_gl_command_queue_upload_texture (GskGLCommandQueue *self,
- GdkTexture *texture,
- guint x_offset,
- guint y_offset,
- guint width,
- guint height,
- int min_filter,
- int mag_filter)
+gsk_ngl_command_queue_upload_texture (GskNglCommandQueue *self,
+ GdkTexture *texture,
+ guint x_offset,
+ guint y_offset,
+ guint width,
+ guint height,
+ int min_filter,
+ int mag_filter)
{
G_GNUC_UNUSED gint64 start_time = GDK_PROFILER_CURRENT_TIME;
cairo_surface_t *surface = NULL;
@@ -1416,7 +1416,7 @@ gsk_gl_command_queue_upload_texture (GskGLCommandQueue *self,
gsize bpp;
int texture_id;
- g_assert (GSK_IS_GL_COMMAND_QUEUE (self));
+ g_assert (GSK_IS_NGL_COMMAND_QUEUE (self));
g_assert (!GDK_IS_GL_TEXTURE (texture));
g_assert (x_offset + width <= gdk_texture_get_width (texture));
g_assert (y_offset + height <= gdk_texture_get_height (texture));
@@ -1432,7 +1432,7 @@ gsk_gl_command_queue_upload_texture (GskGLCommandQueue *self,
height = MAX (height, self->max_texture_size);
}
- texture_id = gsk_gl_command_queue_create_texture (self, width, height, min_filter, mag_filter);
+ texture_id = gsk_ngl_command_queue_create_texture (self, width, height, min_filter, mag_filter);
if (texture_id == -1)
return texture_id;
@@ -1482,11 +1482,11 @@ gsk_gl_command_queue_upload_texture (GskGLCommandQueue *self,
}
void
-gsk_gl_command_queue_set_profiler (GskGLCommandQueue *self,
- GskProfiler *profiler)
+gsk_ngl_command_queue_set_profiler (GskNglCommandQueue *self,
+ GskProfiler *profiler)
{
#ifdef G_ENABLE_DEBUG
- g_assert (GSK_IS_GL_COMMAND_QUEUE (self));
+ g_assert (GSK_IS_NGL_COMMAND_QUEUE (self));
g_assert (GSK_IS_PROFILER (profiler));
if (g_set_object (&self->profiler, profiler))
diff --git a/gsk/ngl/gsknglcommandqueueprivate.h b/gsk/ngl/gsknglcommandqueueprivate.h
new file mode 100644
index 0000000000..9a35326cee
--- /dev/null
+++ b/gsk/ngl/gsknglcommandqueueprivate.h
@@ -0,0 +1,362 @@
+/* gsknglcommandqueueprivate.h
+ *
+ * Copyright 2020 Christian Hergert <chergert redhat com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * SPDX-License-Identifier: LGPL-2.1-or-later
+ */
+
+#ifndef __GSK_NGL_COMMAND_QUEUE_PRIVATE_H__
+#define __GSK_NGL_COMMAND_QUEUE_PRIVATE_H__
+
+#include <gsk/gskprofilerprivate.h>
+
+#include "gskngltypesprivate.h"
+#include "gsknglbufferprivate.h"
+#include "gsknglattachmentstateprivate.h"
+#include "gskngluniformstateprivate.h"
+
+#include "inlinearray.h"
+
+#include "../gl/gskglprofilerprivate.h"
+
+G_BEGIN_DECLS
+
+#define GSK_TYPE_GL_COMMAND_QUEUE (gsk_ngl_command_queue_get_type())
+
+G_DECLARE_FINAL_TYPE (GskNglCommandQueue, gsk_ngl_command_queue, GSK, NGL_COMMAND_QUEUE, GObject)
+
+typedef enum _GskNglCommandKind
+{
+ /* The batch will perform a glClear() */
+ GSK_NGL_COMMAND_KIND_CLEAR,
+
+ /* The batch will perform a glDrawArrays() */
+ GSK_NGL_COMMAND_KIND_DRAW,
+} GskNglCommandKind;
+
+typedef struct _GskNglCommandBind
+{
+ /* @texture is the value passed to glActiveTexture(), the "slot" the
+ * texture will be placed into. We always use GL_TEXTURE_2D so we don't
+ * waste any bits here to indicate that.
+ */
+ guint texture : 5;
+
+ /* The identifier for the texture created with glGenTextures(). */
+ guint id : 27;
+} GskNglCommandBind;
+
+G_STATIC_ASSERT (sizeof (GskNglCommandBind) == 4);
+
+typedef struct _GskNglCommandBatchAny
+{
+ /* A GskNglCommandKind indicating what the batch will do */
+ guint kind : 8;
+
+ /* The program's identifier to use for determining if we can merge two
+ * batches together into a single set of draw operations. We put this
+ * here instead of the GskNglCommandDraw so that we can use the extra
+ * bits here without making the structure larger.
+ */
+ guint program : 24;
+
+ /* The index of the next batch following this one. This is used
+ * as a sort of integer-based linked list to simplify out-of-order
+ * batching without moving memory around. -1 indicates last batch.
+ */
+ gint16 next_batch_index;
+
+ /* Same but for reverse direction as we sort in reverse to get the
+ * batches ordered by framebuffer.
+ */
+ gint16 prev_batch_index;
+
+ /* The viewport size of the batch. We check this as we process
+ * batches to determine if we need to resize the viewport.
+ */
+ struct {
+ guint16 width;
+ guint16 height;
+ } viewport;
+} GskNglCommandBatchAny;
+
+G_STATIC_ASSERT (sizeof (GskNglCommandBatchAny) == 12);
+
+typedef struct _GskNglCommandDraw
+{
+ GskNglCommandBatchAny head;
+
+ /* There doesn't seem to be a limit on the framebuffer identifier that
+ * can be returned, so we have to use a whole unsigned for the framebuffer
+ * we are drawing to. When processing batches, we check to see if this
+ * changes and adjust the render target accordingly. Some sorting is
+ * performed to reduce the amount we change framebuffers.
+ */
+ guint framebuffer;
+
+ /* The number of uniforms to change. This must be less than or equal to
+ * GL_MAX_UNIFORM_LOCATIONS but only guaranteed up to 1024 by any OpenGL
+ * implementation to be conformant.
+ */
+ guint uniform_count : 11;
+
+ /* The number of textures to bind, which is only guaranteed up to 16
+ * by the OpenGL specification to be conformant.
+ */
+ guint bind_count : 5;
+
+ /* GL_MAX_ELEMENTS_VERTICES specifies 33000 for this which requires 16-bit
+ * to address all possible counts <= GL_MAX_ELEMENTS_VERTICES.
+ */
+ guint vbo_count : 16;
+
+ /* The offset within the VBO containing @vbo_count vertices to send with
+ * glDrawArrays().
+ */
+ guint vbo_offset;
+
+ /* The offset within the array of uniform changes to be made containing
+ * @uniform_count #GskNglCommandUniform elements to apply.
+ */
+ guint uniform_offset;
+
+ /* The offset within the array of bind changes to be made containing
+ * @bind_count #GskNglCommandBind elements to apply.
+ */
+ guint bind_offset;
+} GskNglCommandDraw;
+
+G_STATIC_ASSERT (sizeof (GskNglCommandDraw) == 32);
+
+typedef struct _GskNglCommandClear
+{
+ GskNglCommandBatchAny any;
+ guint bits;
+ guint framebuffer;
+} GskNglCommandClear;
+
+G_STATIC_ASSERT (sizeof (GskNglCommandClear) == 20);
+
+typedef struct _GskNglCommandUniform
+{
+ GskNglUniformInfo info;
+ guint location;
+} GskNglCommandUniform;
+
+G_STATIC_ASSERT (sizeof (GskNglCommandUniform) == 8);
+
+typedef union _GskNglCommandBatch
+{
+ GskNglCommandBatchAny any;
+ GskNglCommandDraw draw;
+ GskNglCommandClear clear;
+} GskNglCommandBatch;
+
+G_STATIC_ASSERT (sizeof (GskNglCommandBatch) == 32);
+
+DEFINE_INLINE_ARRAY (GskNglCommandBatches, gsk_ngl_command_batches, GskNglCommandBatch)
+DEFINE_INLINE_ARRAY (GskNglCommandBinds, gsk_ngl_command_binds, GskNglCommandBind)
+DEFINE_INLINE_ARRAY (GskNglCommandUniforms, gsk_ngl_command_uniforms, GskNglCommandUniform)
+
+struct _GskNglCommandQueue
+{
+ GObject parent_instance;
+
+ /* The GdkGLContext we make current before executing GL commands. */
+ GdkGLContext *context;
+
+ /* Array of GskNglCommandBatch which is a fixed size structure that will
+ * point into offsets of other arrays so that all similar data is stored
+ * together. The idea here is that we reduce the need for pointers so that
+ * using g_realloc()'d arrays is fine.
+ */
+ GskNglCommandBatches batches;
+
+ /* Contains array of vertices and some wrapper code to help upload them
+ * to the GL driver. We can also tweak this to use double buffered arrays
+ * if we find that to be faster on some hardware and/or drivers.
+ */
+ GskNglBuffer vertices;
+
+ /* The GskNglAttachmentState contains information about our FBO and texture
+ * attachments as we process incoming operations. We snapshot them into
+ * various batches so that we can compare differences between merge
+ * candidates.
+ */
+ GskNglAttachmentState *attachments;
+
+ /* The uniform state across all programs. We snapshot this into batches so
+ * that we can compare uniform state between batches to give us more
+ * chances at merging draw commands.
+ */
+ GskNglUniformState *uniforms;
+
+ /* Current program if we are in a draw so that we can send commands
+ * to the uniform state as needed.
+ */
+ GskNglUniformProgram *program_info;
+
+ /* The profiler instance to deliver timing/etc data */
+ GskProfiler *profiler;
+ GskGLProfiler *gl_profiler;
+
+ /* Array of GskNglCommandBind which denote what textures need to be attached
+ * to which slot. GskNglCommandDraw.bind_offset and bind_count reference this
+ * array to determine what to attach.
+ */
+ GskNglCommandBinds batch_binds;
+
+ /* Array of GskNglCommandUniform denoting which uniforms must be updated
+ * before the glDrawArrays() may be called. These are referenced from the
+ * GskNglCommandDraw.uniform_offset and uniform_count fields.
+ */
+ GskNglCommandUniforms batch_uniforms;
+
+ /* String storage for debug groups */
+ GStringChunk *debug_groups;
+
+ /* Discovered max texture size when loading the command queue so that we
+ * can either scale down or slice textures to fit within this size. Assumed
+ * to be both height and width.
+ */
+ int max_texture_size;
+
+ /* The index of the last batch in @batches, which may not be the element
+ * at the end of the array, as batches can be reordered. This is used to
+ * update the "next" index when adding a new batch.
+ */
+ gint16 tail_batch_index;
+ gint16 head_batch_index;
+
+ /* Max framebuffer we used, so we can sort items faster */
+ guint fbo_max;
+
+ /* Various GSK and GDK metric counter ids */
+ struct {
+ GQuark n_frames;
+ GQuark cpu_time;
+ GQuark gpu_time;
+ guint n_binds;
+ guint n_fbos;
+ guint n_uniforms;
+ guint n_uploads;
+ guint queue_depth;
+ } metrics;
+
+ /* Counter for uploads on the frame */
+ guint n_uploads;
+
+ /* If we're inside a begin/end_frame pair */
+ guint in_frame : 1;
+
+ /* If we're inside of a begin_draw()/end_draw() pair. */
+ guint in_draw : 1;
+
+ /* If we've warned about truncating batches */
+ guint have_truncated : 1;
+};
+
+GskNglCommandQueue *gsk_ngl_command_queue_new (GdkGLContext *context,
+ GskNglUniformState *uniforms);
+void gsk_ngl_command_queue_set_profiler (GskNglCommandQueue *self,
+ GskProfiler *profiler);
+GdkGLContext *gsk_ngl_command_queue_get_context (GskNglCommandQueue *self);
+void gsk_ngl_command_queue_make_current (GskNglCommandQueue *self);
+void gsk_ngl_command_queue_begin_frame (GskNglCommandQueue *self);
+void gsk_ngl_command_queue_end_frame (GskNglCommandQueue *self);
+void gsk_ngl_command_queue_execute (GskNglCommandQueue *self,
+ guint surface_height,
+ guint scale_factor,
+ const cairo_region_t *scissor);
+int gsk_ngl_command_queue_upload_texture (GskNglCommandQueue *self,
+ GdkTexture *texture,
+ guint x_offset,
+ guint y_offset,
+ guint width,
+ guint height,
+ int min_filter,
+ int mag_filter);
+int gsk_ngl_command_queue_create_texture (GskNglCommandQueue *self,
+ int width,
+ int height,
+ int min_filter,
+ int mag_filter);
+guint gsk_ngl_command_queue_create_framebuffer (GskNglCommandQueue *self);
+gboolean gsk_ngl_command_queue_create_render_target (GskNglCommandQueue *self,
+ int width,
+ int height,
+ int min_filter,
+ int mag_filter,
+ guint *out_fbo_id,
+ guint *out_texture_id);
+void gsk_ngl_command_queue_delete_program (GskNglCommandQueue *self,
+ guint program_id);
+void gsk_ngl_command_queue_clear (GskNglCommandQueue *self,
+ guint clear_bits,
+ const graphene_rect_t *viewport);
+void gsk_ngl_command_queue_begin_draw (GskNglCommandQueue *self,
+ GskNglUniformProgram *program_info,
+ guint width,
+ guint height);
+void gsk_ngl_command_queue_end_draw (GskNglCommandQueue *self);
+void gsk_ngl_command_queue_split_draw (GskNglCommandQueue *self);
+
+static inline GskNglCommandBatch *
+gsk_ngl_command_queue_get_batch (GskNglCommandQueue *self)
+{
+ return gsk_ngl_command_batches_tail (&self->batches);
+}
+
+static inline GskNglDrawVertex *
+gsk_ngl_command_queue_add_vertices (GskNglCommandQueue *self)
+{
+ gsk_ngl_command_queue_get_batch (self)->draw.vbo_count += GSK_NGL_N_VERTICES;
+ return gsk_ngl_buffer_advance (&self->vertices, GSK_NGL_N_VERTICES);
+}
+
+static inline GskNglDrawVertex *
+gsk_ngl_command_queue_add_n_vertices (GskNglCommandQueue *self,
+ guint count)
+{
+ /* This is a batch form of gsk_ngl_command_queue_add_vertices(). Note that
+ * it does *not* add the count to .draw.vbo_count as the caller is responsible
+ * for that.
+ */
+ return gsk_ngl_buffer_advance (&self->vertices, GSK_NGL_N_VERTICES * count);
+}
+
+static inline void
+gsk_ngl_command_queue_retract_n_vertices (GskNglCommandQueue *self,
+ guint count)
+{
+ /* Like gsk_ngl_command_queue_add_n_vertices(), this does not tweak
+ * the draw vbo_count.
+ */
+ gsk_ngl_buffer_retract (&self->vertices, GSK_NGL_N_VERTICES * count);
+}
+
+static inline guint
+gsk_ngl_command_queue_bind_framebuffer (GskNglCommandQueue *self,
+ guint framebuffer)
+{
+ guint ret = self->attachments->fbo.id;
+ gsk_ngl_attachment_state_bind_framebuffer (self->attachments, framebuffer);
+ return ret;
+}
+
+G_END_DECLS
+
+#endif /* __GSK_NGL_COMMAND_QUEUE_PRIVATE_H__ */
diff --git a/gsk/next/gskglcompiler.c b/gsk/ngl/gsknglcompiler.c
similarity index 75%
rename from gsk/next/gskglcompiler.c
rename to gsk/ngl/gsknglcompiler.c
index d51d10fc3a..c033775c48 100644
--- a/gsk/next/gskglcompiler.c
+++ b/gsk/ngl/gsknglcompiler.c
@@ -1,4 +1,4 @@
-/* gskglcompiler.c
+/* gsknglcompiler.c
*
* Copyright 2020 Christian Hergert <chergert redhat com>
*
@@ -24,20 +24,20 @@
#include <gio/gio.h>
#include <string.h>
-#include "gskglcommandqueueprivate.h"
-#include "gskglcompilerprivate.h"
-#include "gskglprogramprivate.h"
+#include "gsknglcommandqueueprivate.h"
+#include "gsknglcompilerprivate.h"
+#include "gsknglprogramprivate.h"
#define SHADER_VERSION_GLES 100
#define SHADER_VERSION_GL2_LEGACY 110
#define SHADER_VERSION_GL3_LEGACY 130
#define SHADER_VERSION_GL3 150
-struct _GskGLCompiler
+struct _GskNglCompiler
{
GObject parent_instance;
- GskNextDriver *driver;
+ GskNglDriver *driver;
GBytes *all_preamble;
GBytes *fragment_preamble;
@@ -57,20 +57,20 @@ struct _GskGLCompiler
guint debug_shaders : 1;
};
-typedef struct _GskGLProgramAttrib
+typedef struct _GskNglProgramAttrib
{
const char *name;
- guint location;
-} GskGLProgramAttrib;
+ guint location;
+} GskNglProgramAttrib;
static GBytes *empty_bytes;
-G_DEFINE_TYPE (GskGLCompiler, gsk_gl_compiler, G_TYPE_OBJECT)
+G_DEFINE_TYPE (GskNglCompiler, gsk_ngl_compiler, G_TYPE_OBJECT)
static void
-gsk_gl_compiler_finalize (GObject *object)
+gsk_ngl_compiler_finalize (GObject *object)
{
- GskGLCompiler *self = (GskGLCompiler *)object;
+ GskNglCompiler *self = (GskNglCompiler *)object;
g_clear_pointer (&self->all_preamble, g_bytes_unref);
g_clear_pointer (&self->fragment_preamble, g_bytes_unref);
@@ -82,24 +82,24 @@ gsk_gl_compiler_finalize (GObject *object)
g_clear_pointer (&self->attrib_locations, g_array_unref);
g_clear_object (&self->driver);
- G_OBJECT_CLASS (gsk_gl_compiler_parent_class)->finalize (object);
+ G_OBJECT_CLASS (gsk_ngl_compiler_parent_class)->finalize (object);
}
static void
-gsk_gl_compiler_class_init (GskGLCompilerClass *klass)
+gsk_ngl_compiler_class_init (GskNglCompilerClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
- object_class->finalize = gsk_gl_compiler_finalize;
+ object_class->finalize = gsk_ngl_compiler_finalize;
empty_bytes = g_bytes_new (NULL, 0);
}
static void
-gsk_gl_compiler_init (GskGLCompiler *self)
+gsk_ngl_compiler_init (GskNglCompiler *self)
{
self->glsl_version = 150;
- self->attrib_locations = g_array_new (FALSE, FALSE, sizeof (GskGLProgramAttrib));
+ self->attrib_locations = g_array_new (FALSE, FALSE, sizeof (GskNglProgramAttrib));
self->all_preamble = g_bytes_ref (empty_bytes);
self->vertex_preamble = g_bytes_ref (empty_bytes);
self->fragment_preamble = g_bytes_ref (empty_bytes);
@@ -109,21 +109,21 @@ gsk_gl_compiler_init (GskGLCompiler *self)
self->fragment_suffix = g_bytes_ref (empty_bytes);
}
-GskGLCompiler *
-gsk_gl_compiler_new (GskNextDriver *driver,
- gboolean debug_shaders)
+GskNglCompiler *
+gsk_ngl_compiler_new (GskNglDriver *driver,
+ gboolean debug_shaders)
{
- GskGLCompiler *self;
+ GskNglCompiler *self;
GdkGLContext *context;
- g_return_val_if_fail (GSK_IS_NEXT_DRIVER (driver), NULL);
+ g_return_val_if_fail (GSK_IS_NGL_DRIVER (driver), NULL);
g_return_val_if_fail (driver->shared_command_queue != NULL, NULL);
self = g_object_new (GSK_TYPE_GL_COMPILER, NULL);
self->driver = g_object_ref (driver);
self->debug_shaders = !!debug_shaders;
- context = gsk_gl_command_queue_get_context (self->driver->shared_command_queue);
+ context = gsk_ngl_command_queue_get_context (self->driver->shared_command_queue);
if (gdk_gl_context_get_use_es (context))
{
@@ -149,19 +149,19 @@ gsk_gl_compiler_new (GskNextDriver *driver,
self->gl3 = TRUE;
}
- gsk_gl_command_queue_make_current (self->driver->shared_command_queue);
+ gsk_ngl_command_queue_make_current (self->driver->shared_command_queue);
return g_steal_pointer (&self);
}
void
-gsk_gl_compiler_bind_attribute (GskGLCompiler *self,
- const char *name,
- guint location)
+gsk_ngl_compiler_bind_attribute (GskNglCompiler *self,
+ const char *name,
+ guint location)
{
- GskGLProgramAttrib attrib;
+ GskNglProgramAttrib attrib;
- g_return_if_fail (GSK_IS_GL_COMPILER (self));
+ g_return_if_fail (GSK_IS_NGL_COMPILER (self));
g_return_if_fail (name != NULL);
g_return_if_fail (location < 32);
@@ -172,28 +172,28 @@ gsk_gl_compiler_bind_attribute (GskGLCompiler *self,
}
void
-gsk_gl_compiler_clear_attributes (GskGLCompiler *self)
+gsk_ngl_compiler_clear_attributes (GskNglCompiler *self)
{
- g_return_if_fail (GSK_IS_GL_COMPILER (self));
+ g_return_if_fail (GSK_IS_NGL_COMPILER (self));
g_array_set_size (self->attrib_locations, 0);
}
void
-gsk_gl_compiler_set_preamble (GskGLCompiler *self,
- GskGLCompilerKind kind,
- GBytes *preamble_bytes)
+gsk_ngl_compiler_set_preamble (GskNglCompiler *self,
+ GskNglCompilerKind kind,
+ GBytes *preamble_bytes)
{
GBytes **loc = NULL;
- g_return_if_fail (GSK_IS_GL_COMPILER (self));
+ g_return_if_fail (GSK_IS_NGL_COMPILER (self));
g_return_if_fail (preamble_bytes != NULL);
- if (kind == GSK_GL_COMPILER_ALL)
+ if (kind == GSK_NGL_COMPILER_ALL)
loc = &self->all_preamble;
- else if (kind == GSK_GL_COMPILER_FRAGMENT)
+ else if (kind == GSK_NGL_COMPILER_FRAGMENT)
loc = &self->fragment_preamble;
- else if (kind == GSK_GL_COMPILER_VERTEX)
+ else if (kind == GSK_NGL_COMPILER_VERTEX)
loc = &self->vertex_preamble;
else
g_return_if_reached ();
@@ -208,17 +208,17 @@ gsk_gl_compiler_set_preamble (GskGLCompiler *self,
}
void
-gsk_gl_compiler_set_preamble_from_resource (GskGLCompiler *self,
- GskGLCompilerKind kind,
- const char *resource_path)
+gsk_ngl_compiler_set_preamble_from_resource (GskNglCompiler *self,
+ GskNglCompilerKind kind,
+ const char *resource_path)
{
GError *error = NULL;
GBytes *bytes;
- g_return_if_fail (GSK_IS_GL_COMPILER (self));
- g_return_if_fail (kind == GSK_GL_COMPILER_ALL ||
- kind == GSK_GL_COMPILER_VERTEX ||
- kind == GSK_GL_COMPILER_FRAGMENT);
+ g_return_if_fail (GSK_IS_NGL_COMPILER (self));
+ g_return_if_fail (kind == GSK_NGL_COMPILER_ALL ||
+ kind == GSK_NGL_COMPILER_VERTEX ||
+ kind == GSK_NGL_COMPILER_FRAGMENT);
g_return_if_fail (resource_path != NULL);
bytes = g_resources_lookup_data (resource_path,
@@ -228,23 +228,23 @@ gsk_gl_compiler_set_preamble_from_resource (GskGLCompiler *self,
if (bytes == NULL)
g_warning ("Cannot set shader from resource: %s", error->message);
else
- gsk_gl_compiler_set_preamble (self, kind, bytes);
+ gsk_ngl_compiler_set_preamble (self, kind, bytes);
g_clear_pointer (&bytes, g_bytes_unref);
g_clear_error (&error);
}
void
-gsk_gl_compiler_set_source (GskGLCompiler *self,
- GskGLCompilerKind kind,
- GBytes *source_bytes)
+gsk_ngl_compiler_set_source (GskNglCompiler *self,
+ GskNglCompilerKind kind,
+ GBytes *source_bytes)
{
GBytes **loc = NULL;
- g_return_if_fail (GSK_IS_GL_COMPILER (self));
- g_return_if_fail (kind == GSK_GL_COMPILER_ALL ||
- kind == GSK_GL_COMPILER_VERTEX ||
- kind == GSK_GL_COMPILER_FRAGMENT);
+ g_return_if_fail (GSK_IS_NGL_COMPILER (self));
+ g_return_if_fail (kind == GSK_NGL_COMPILER_ALL ||
+ kind == GSK_NGL_COMPILER_VERTEX ||
+ kind == GSK_NGL_COMPILER_FRAGMENT);
if (source_bytes == NULL)
source_bytes = empty_bytes;
@@ -256,7 +256,7 @@ gsk_gl_compiler_set_source (GskGLCompiler *self,
* use GBytes which reference the original bytes instead of
* copying them.
*/
- if (kind == GSK_GL_COMPILER_ALL)
+ if (kind == GSK_NGL_COMPILER_ALL)
{
gsize len = 0;
const char *source;
@@ -305,8 +305,8 @@ gsk_gl_compiler_set_source (GskGLCompiler *self,
fragment_shader_start - source,
endpos - fragment_shader_start);
- gsk_gl_compiler_set_source (self, GSK_GL_COMPILER_VERTEX, vertex_bytes);
- gsk_gl_compiler_set_source (self, GSK_GL_COMPILER_FRAGMENT, fragment_bytes);
+ gsk_ngl_compiler_set_source (self, GSK_NGL_COMPILER_VERTEX, vertex_bytes);
+ gsk_ngl_compiler_set_source (self, GSK_NGL_COMPILER_FRAGMENT, fragment_bytes);
g_bytes_unref (fragment_bytes);
g_bytes_unref (vertex_bytes);
@@ -314,9 +314,9 @@ gsk_gl_compiler_set_source (GskGLCompiler *self,
return;
}
- if (kind == GSK_GL_COMPILER_FRAGMENT)
+ if (kind == GSK_NGL_COMPILER_FRAGMENT)
loc = &self->fragment_source;
- else if (kind == GSK_GL_COMPILER_VERTEX)
+ else if (kind == GSK_NGL_COMPILER_VERTEX)
loc = &self->vertex_source;
else
g_return_if_reached ();
@@ -329,17 +329,17 @@ gsk_gl_compiler_set_source (GskGLCompiler *self,
}
void
-gsk_gl_compiler_set_source_from_resource (GskGLCompiler *self,
- GskGLCompilerKind kind,
- const char *resource_path)
+gsk_ngl_compiler_set_source_from_resource (GskNglCompiler *self,
+ GskNglCompilerKind kind,
+ const char *resource_path)
{
GError *error = NULL;
GBytes *bytes;
- g_return_if_fail (GSK_IS_GL_COMPILER (self));
- g_return_if_fail (kind == GSK_GL_COMPILER_ALL ||
- kind == GSK_GL_COMPILER_VERTEX ||
- kind == GSK_GL_COMPILER_FRAGMENT);
+ g_return_if_fail (GSK_IS_NGL_COMPILER (self));
+ g_return_if_fail (kind == GSK_NGL_COMPILER_ALL ||
+ kind == GSK_NGL_COMPILER_VERTEX ||
+ kind == GSK_NGL_COMPILER_FRAGMENT);
g_return_if_fail (resource_path != NULL);
bytes = g_resources_lookup_data (resource_path,
@@ -349,30 +349,30 @@ gsk_gl_compiler_set_source_from_resource (GskGLCompiler *self,
if (bytes == NULL)
g_warning ("Cannot set shader from resource: %s", error->message);
else
- gsk_gl_compiler_set_source (self, kind, bytes);
+ gsk_ngl_compiler_set_source (self, kind, bytes);
g_clear_pointer (&bytes, g_bytes_unref);
g_clear_error (&error);
}
void
-gsk_gl_compiler_set_suffix (GskGLCompiler *self,
- GskGLCompilerKind kind,
- GBytes *suffix_bytes)
+gsk_ngl_compiler_set_suffix (GskNglCompiler *self,
+ GskNglCompilerKind kind,
+ GBytes *suffix_bytes)
{
GBytes **loc;
- g_return_if_fail (GSK_IS_GL_COMPILER (self));
- g_return_if_fail (kind == GSK_GL_COMPILER_VERTEX ||
- kind == GSK_GL_COMPILER_FRAGMENT);
+ g_return_if_fail (GSK_IS_NGL_COMPILER (self));
+ g_return_if_fail (kind == GSK_NGL_COMPILER_VERTEX ||
+ kind == GSK_NGL_COMPILER_FRAGMENT);
g_return_if_fail (suffix_bytes != NULL);
if (suffix_bytes == NULL)
suffix_bytes = empty_bytes;
- if (kind == GSK_GL_COMPILER_FRAGMENT)
+ if (kind == GSK_NGL_COMPILER_FRAGMENT)
loc = &self->fragment_suffix;
- else if (kind == GSK_GL_COMPILER_VERTEX)
+ else if (kind == GSK_NGL_COMPILER_VERTEX)
loc = &self->vertex_suffix;
else
g_return_if_reached ();
@@ -385,16 +385,16 @@ gsk_gl_compiler_set_suffix (GskGLCompiler *self,
}
void
-gsk_gl_compiler_set_suffix_from_resource (GskGLCompiler *self,
- GskGLCompilerKind kind,
- const char *resource_path)
+gsk_ngl_compiler_set_suffix_from_resource (GskNglCompiler *self,
+ GskNglCompilerKind kind,
+ const char *resource_path)
{
GError *error = NULL;
GBytes *bytes;
- g_return_if_fail (GSK_IS_GL_COMPILER (self));
- g_return_if_fail (kind == GSK_GL_COMPILER_VERTEX ||
- kind == GSK_GL_COMPILER_FRAGMENT);
+ g_return_if_fail (GSK_IS_NGL_COMPILER (self));
+ g_return_if_fail (kind == GSK_NGL_COMPILER_VERTEX ||
+ kind == GSK_NGL_COMPILER_FRAGMENT);
g_return_if_fail (resource_path != NULL);
bytes = g_resources_lookup_data (resource_path,
@@ -404,7 +404,7 @@ gsk_gl_compiler_set_suffix_from_resource (GskGLCompiler *self,
if (bytes == NULL)
g_warning ("Cannot set suffix from resource: %s", error->message);
else
- gsk_gl_compiler_set_suffix (self, kind, bytes);
+ gsk_ngl_compiler_set_suffix (self, kind, bytes);
g_clear_pointer (&bytes, g_bytes_unref);
g_clear_error (&error);
@@ -435,7 +435,7 @@ prepend_line_numbers (char *code,
}
static gboolean
-check_shader_error (int shader_id,
+check_shader_error (int shader_id,
GError **error)
{
GLint status;
@@ -520,10 +520,10 @@ get_shader_string (GBytes *bytes)
return str ? str : "";
}
-GskGLProgram *
-gsk_gl_compiler_compile (GskGLCompiler *self,
- const char *name,
- GError **error)
+GskNglProgram *
+gsk_ngl_compiler_compile (GskNglCompiler *self,
+ const char *name,
+ GError **error)
{
char version[32];
const char *debug = "";
@@ -535,7 +535,7 @@ gsk_gl_compiler_compile (GskGLCompiler *self,
int fragment_id;
int status;
- g_return_val_if_fail (GSK_IS_GL_COMPILER (self), NULL);
+ g_return_val_if_fail (GSK_IS_NGL_COMPILER (self), NULL);
g_return_val_if_fail (self->all_preamble != NULL, NULL);
g_return_val_if_fail (self->fragment_preamble != NULL, NULL);
g_return_val_if_fail (self->vertex_preamble != NULL, NULL);
@@ -543,7 +543,7 @@ gsk_gl_compiler_compile (GskGLCompiler *self,
g_return_val_if_fail (self->vertex_source != NULL, NULL);
g_return_val_if_fail (self->driver != NULL, NULL);
- gsk_gl_command_queue_make_current (self->driver->command_queue);
+ gsk_ngl_command_queue_make_current (self->driver->command_queue);
g_snprintf (version, sizeof version, "#version %d\n", self->glsl_version);
@@ -554,10 +554,10 @@ gsk_gl_compiler_compile (GskGLCompiler *self,
legacy = "#define GSK_LEGACY 1\n";
if (self->gles)
- gles = "#define GSK_GLES 1\n";
+ gles = "#define GSK_NGLES 1\n";
if (self->gl3)
- gl3 = "#define GSK_GL3 1\n";
+ gl3 = "#define GSK_NGL3 1\n";
vertex_id = glCreateShader (GL_VERTEX_SHADER);
glShaderSource (vertex_id,
@@ -628,9 +628,9 @@ gsk_gl_compiler_compile (GskGLCompiler *self,
for (guint i = 0; i < self->attrib_locations->len; i++)
{
- const GskGLProgramAttrib *attrib;
+ const GskNglProgramAttrib *attrib;
- attrib = &g_array_index (self->attrib_locations, GskGLProgramAttrib, i);
+ attrib = &g_array_index (self->attrib_locations, GskNglProgramAttrib, i);
glBindAttribLocation (program_id, attrib->location, attrib->name);
}
@@ -674,5 +674,5 @@ gsk_gl_compiler_compile (GskGLCompiler *self,
return NULL;
}
- return gsk_gl_program_new (self->driver, name, program_id);
+ return gsk_ngl_program_new (self->driver, name, program_id);
}
diff --git a/gsk/ngl/gsknglcompilerprivate.h b/gsk/ngl/gsknglcompilerprivate.h
new file mode 100644
index 0000000000..d61dce2697
--- /dev/null
+++ b/gsk/ngl/gsknglcompilerprivate.h
@@ -0,0 +1,69 @@
+/* gsknglcompilerprivate.h
+ *
+ * Copyright 2020 Christian Hergert <chergert redhat com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * SPDX-License-Identifier: LGPL-2.1-or-later
+ */
+
+#ifndef __GSK_NGL_COMPILER_PRIVATE_H__
+#define __GSK_NGL_COMPILER_PRIVATE_H__
+
+#include "gskngltypesprivate.h"
+
+G_BEGIN_DECLS
+
+typedef enum _GskNglCompilerKind
+{
+ GSK_NGL_COMPILER_ALL,
+ GSK_NGL_COMPILER_FRAGMENT,
+ GSK_NGL_COMPILER_VERTEX,
+} GskNglCompilerKind;
+
+#define GSK_TYPE_GL_COMPILER (gsk_ngl_compiler_get_type())
+
+G_DECLARE_FINAL_TYPE (GskNglCompiler, gsk_ngl_compiler, GSK, NGL_COMPILER, GObject)
+
+GskNglCompiler *gsk_ngl_compiler_new (GskNglDriver *driver,
+ gboolean debug);
+void gsk_ngl_compiler_set_preamble (GskNglCompiler *self,
+ GskNglCompilerKind kind,
+ GBytes *preamble_bytes);
+void gsk_ngl_compiler_set_preamble_from_resource (GskNglCompiler *self,
+ GskNglCompilerKind kind,
+ const char *resource_path);
+void gsk_ngl_compiler_set_source (GskNglCompiler *self,
+ GskNglCompilerKind kind,
+ GBytes *source_bytes);
+void gsk_ngl_compiler_set_source_from_resource (GskNglCompiler *self,
+ GskNglCompilerKind kind,
+ const char *resource_path);
+void gsk_ngl_compiler_set_suffix (GskNglCompiler *self,
+ GskNglCompilerKind kind,
+ GBytes *suffix_bytes);
+void gsk_ngl_compiler_set_suffix_from_resource (GskNglCompiler *self,
+ GskNglCompilerKind kind,
+ const char *resource_path);
+void gsk_ngl_compiler_bind_attribute (GskNglCompiler *self,
+ const char *name,
+ guint location);
+void gsk_ngl_compiler_clear_attributes (GskNglCompiler *self);
+GskNglProgram *gsk_ngl_compiler_compile (GskNglCompiler *self,
+ const char *name,
+ GError **error);
+
+G_END_DECLS
+
+#endif /* __GSK_NGL_COMPILER_PRIVATE_H__ */
diff --git a/gsk/next/gskgldriver.c b/gsk/ngl/gskngldriver.c
similarity index 57%
rename from gsk/next/gskgldriver.c
rename to gsk/ngl/gskngldriver.c
index a5eaaedac9..a6720754be 100644
--- a/gsk/next/gskgldriver.c
+++ b/gsk/ngl/gskngldriver.c
@@ -1,4 +1,4 @@
-/* gskgldriver.c
+/* gskngldriver.c
*
* Copyright 2017 Timm Bäder <mail baedert org>
* Copyright 2018 Matthias Clasen <mclasen redhat com>
@@ -29,24 +29,24 @@
#include <gsk/gskglshaderprivate.h>
#include <gsk/gskrendererprivate.h>
-#include "gskglcommandqueueprivate.h"
-#include "gskglcompilerprivate.h"
-#include "gskgldriverprivate.h"
-#include "gskglglyphlibraryprivate.h"
-#include "gskgliconlibraryprivate.h"
-#include "gskglprogramprivate.h"
-#include "gskglshadowlibraryprivate.h"
-#include "gskgltexturepoolprivate.h"
+#include "gsknglcommandqueueprivate.h"
+#include "gsknglcompilerprivate.h"
+#include "gskngldriverprivate.h"
+#include "gsknglglyphlibraryprivate.h"
+#include "gskngliconlibraryprivate.h"
+#include "gsknglprogramprivate.h"
+#include "gsknglshadowlibraryprivate.h"
+#include "gskngltexturepoolprivate.h"
#define ATLAS_SIZE 512
-typedef struct _GskGLTextureState
+typedef struct _GskNglTextureState
{
GdkGLContext *context;
GLuint texture_id;
-} GskGLTextureState;
+} GskNglTextureState;
-G_DEFINE_TYPE (GskNextDriver, gsk_next_driver, G_TYPE_OBJECT)
+G_DEFINE_TYPE (GskNglDriver, gsk_ngl_driver, G_TYPE_OBJECT)
static guint
texture_key_hash (gconstpointer v)
@@ -68,7 +68,8 @@ texture_key_hash (gconstpointer v)
}
static gboolean
-texture_key_equal (gconstpointer v1, gconstpointer v2)
+texture_key_equal (gconstpointer v1,
+ gconstpointer v2)
{
const GskTextureKey *k1 = (const GskTextureKey *)v1;
const GskTextureKey *k2 = (const GskTextureKey *)v2;
@@ -82,12 +83,12 @@ texture_key_equal (gconstpointer v1, gconstpointer v2)
}
static void
-remove_texture_key_for_id (GskNextDriver *self,
- guint texture_id)
+remove_texture_key_for_id (GskNglDriver *self,
+ guint texture_id)
{
GskTextureKey *key;
- g_assert (GSK_IS_NEXT_DRIVER (self));
+ g_assert (GSK_IS_NGL_DRIVER (self));
g_assert (texture_id > 0);
/* g_hash_table_remove() will cause @key to be freed */
@@ -99,28 +100,28 @@ remove_texture_key_for_id (GskNextDriver *self,
}
static void
-gsk_gl_texture_destroyed (gpointer data)
+gsk_ngl_texture_destroyed (gpointer data)
{
- ((GskGLTexture *)data)->user = NULL;
+ ((GskNglTexture *)data)->user = NULL;
}
static guint
-gsk_next_driver_collect_unused_textures (GskNextDriver *self,
- gint64 watermark)
+gsk_ngl_driver_collect_unused_textures (GskNglDriver *self,
+ gint64 watermark)
{
GHashTableIter iter;
gpointer k, v;
guint old_size;
guint collected;
- g_assert (GSK_IS_NEXT_DRIVER (self));
+ g_assert (GSK_IS_NGL_DRIVER (self));
old_size = g_hash_table_size (self->textures);
g_hash_table_iter_init (&iter, self->textures);
while (g_hash_table_iter_next (&iter, &k, &v))
{
- GskGLTexture *t = v;
+ GskNglTexture *t = v;
if (t->user || t->permanent)
continue;
@@ -135,7 +136,7 @@ gsk_next_driver_collect_unused_textures (GskNextDriver *self,
/* Steal this texture and put it back into the pool */
remove_texture_key_for_id (self, t->texture_id);
- gsk_gl_texture_pool_put (&self->texture_pool, t);
+ gsk_ngl_texture_pool_put (&self->texture_pool, t);
}
}
@@ -145,7 +146,7 @@ gsk_next_driver_collect_unused_textures (GskNextDriver *self,
}
static void
-gsk_gl_texture_atlas_free (GskGLTextureAtlas *atlas)
+gsk_ngl_texture_atlas_free (GskNglTextureAtlas *atlas)
{
if (atlas->texture_id != 0)
{
@@ -154,28 +155,28 @@ gsk_gl_texture_atlas_free (GskGLTextureAtlas *atlas)
}
g_clear_pointer (&atlas->nodes, g_free);
- g_slice_free (GskGLTextureAtlas, atlas);
+ g_slice_free (GskNglTextureAtlas, atlas);
}
-GskGLTextureAtlas *
-gsk_next_driver_create_atlas (GskNextDriver *self)
+GskNglTextureAtlas *
+gsk_ngl_driver_create_atlas (GskNglDriver *self)
{
- GskGLTextureAtlas *atlas;
+ GskNglTextureAtlas *atlas;
- g_return_val_if_fail (GSK_IS_NEXT_DRIVER (self), NULL);
+ g_return_val_if_fail (GSK_IS_NGL_DRIVER (self), NULL);
- atlas = g_slice_new0 (GskGLTextureAtlas);
+ atlas = g_slice_new0 (GskNglTextureAtlas);
atlas->width = ATLAS_SIZE;
atlas->height = ATLAS_SIZE;
/* TODO: We might want to change the strategy about the amount of
* nodes here? stb_rect_pack.h says width is optimal. */
atlas->nodes = g_malloc0_n (atlas->width, sizeof (struct stbrp_node));
stbrp_init_target (&atlas->context, atlas->width, atlas->height, atlas->nodes, atlas->width);
- atlas->texture_id = gsk_gl_command_queue_create_texture (self->command_queue,
- atlas->width,
- atlas->height,
- GL_LINEAR,
- GL_LINEAR);
+ atlas->texture_id = gsk_ngl_command_queue_create_texture (self->command_queue,
+ atlas->width,
+ atlas->height,
+ GL_LINEAR,
+ GL_LINEAR);
gdk_gl_context_label_object_printf (gdk_gl_context_get_current (),
GL_TEXTURE, atlas->texture_id,
@@ -190,49 +191,49 @@ gsk_next_driver_create_atlas (GskNextDriver *self)
static void
remove_program (gpointer data)
{
- GskGLProgram *program = data;
+ GskNglProgram *program = data;
- g_assert (!program || GSK_IS_GL_PROGRAM (program));
+ g_assert (!program || GSK_IS_NGL_PROGRAM (program));
if (program != NULL)
{
- gsk_gl_program_delete (program);
+ gsk_ngl_program_delete (program);
g_object_unref (program);
}
}
static void
-gsk_next_driver_shader_weak_cb (gpointer data,
- GObject *where_object_was)
+gsk_ngl_driver_shader_weak_cb (gpointer data,
+ GObject *where_object_was)
{
- GskNextDriver *self = data;
+ GskNglDriver *self = data;
- g_assert (GSK_IS_NEXT_DRIVER (self));
+ g_assert (GSK_IS_NGL_DRIVER (self));
if (self->shader_cache != NULL)
g_hash_table_remove (self->shader_cache, where_object_was);
}
static void
-gsk_next_driver_dispose (GObject *object)
+gsk_ngl_driver_dispose (GObject *object)
{
- GskNextDriver *self = (GskNextDriver *)object;
+ GskNglDriver *self = (GskNglDriver *)object;
- g_assert (GSK_IS_NEXT_DRIVER (self));
+ g_assert (GSK_IS_NGL_DRIVER (self));
g_assert (self->in_frame == FALSE);
-#define GSK_GL_NO_UNIFORMS
-#define GSK_GL_ADD_UNIFORM(pos, KEY, name)
-#define GSK_GL_DEFINE_PROGRAM(name, resource, uniforms) \
+#define GSK_NGL_NO_UNIFORMS
+#define GSK_NGL_ADD_UNIFORM(pos, KEY, name)
+#define GSK_NGL_DEFINE_PROGRAM(name, resource, uniforms) \
G_STMT_START { \
if (self->name) \
- gsk_gl_program_delete (self->name); \
+ gsk_ngl_program_delete (self->name); \
g_clear_object (&self->name); \
} G_STMT_END;
-# include "gskglprograms.defs"
-#undef GSK_GL_NO_UNIFORMS
-#undef GSK_GL_ADD_UNIFORM
-#undef GSK_GL_DEFINE_PROGRAM
+# include "gsknglprograms.defs"
+#undef GSK_NGL_NO_UNIFORMS
+#undef GSK_NGL_ADD_UNIFORM
+#undef GSK_NGL_DEFINE_PROGRAM
if (self->shader_cache != NULL)
{
@@ -244,7 +245,7 @@ gsk_next_driver_dispose (GObject *object)
{
GskGLShader *shader = k;
g_object_weak_unref (G_OBJECT (shader),
- gsk_next_driver_shader_weak_cb,
+ gsk_ngl_driver_shader_weak_cb,
self);
g_hash_table_iter_remove (&iter);
}
@@ -254,8 +255,8 @@ gsk_next_driver_dispose (GObject *object)
if (self->command_queue != NULL)
{
- gsk_gl_command_queue_make_current (self->command_queue);
- gsk_next_driver_collect_unused_textures (self, 0);
+ gsk_ngl_command_queue_make_current (self->command_queue);
+ gsk_ngl_driver_collect_unused_textures (self, 0);
g_clear_object (&self->command_queue);
}
@@ -266,7 +267,7 @@ gsk_next_driver_dispose (GObject *object)
self->autorelease_framebuffers->len = 0;
}
- gsk_gl_texture_pool_clear (&self->texture_pool);
+ gsk_ngl_texture_pool_clear (&self->texture_pool);
g_assert (!self->textures || g_hash_table_size (self->textures) == 0);
g_assert (!self->texture_id_to_key || g_hash_table_size (self->texture_id_to_key) == 0);
@@ -288,96 +289,96 @@ gsk_next_driver_dispose (GObject *object)
g_clear_object (&self->command_queue);
g_clear_object (&self->shared_command_queue);
- G_OBJECT_CLASS (gsk_next_driver_parent_class)->dispose (object);
+ G_OBJECT_CLASS (gsk_ngl_driver_parent_class)->dispose (object);
}
static void
-gsk_next_driver_class_init (GskNextDriverClass *klass)
+gsk_ngl_driver_class_init (GskNglDriverClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
- object_class->dispose = gsk_next_driver_dispose;
+ object_class->dispose = gsk_ngl_driver_dispose;
}
static void
-gsk_next_driver_init (GskNextDriver *self)
+gsk_ngl_driver_init (GskNglDriver *self)
{
self->autorelease_framebuffers = g_array_new (FALSE, FALSE, sizeof (guint));
self->textures = g_hash_table_new_full (NULL, NULL, NULL,
- (GDestroyNotify)gsk_gl_texture_free);
+ (GDestroyNotify)gsk_ngl_texture_free);
self->texture_id_to_key = g_hash_table_new (NULL, NULL);
self->key_to_texture_id = g_hash_table_new_full (texture_key_hash,
texture_key_equal,
g_free,
NULL);
self->shader_cache = g_hash_table_new_full (NULL, NULL, NULL, remove_program);
- gsk_gl_texture_pool_init (&self->texture_pool);
+ gsk_ngl_texture_pool_init (&self->texture_pool);
self->render_targets = g_ptr_array_new ();
- self->atlases = g_ptr_array_new_with_free_func ((GDestroyNotify)gsk_gl_texture_atlas_free);
+ self->atlases = g_ptr_array_new_with_free_func ((GDestroyNotify)gsk_ngl_texture_atlas_free);
}
static gboolean
-gsk_next_driver_load_programs (GskNextDriver *self,
- GError **error)
+gsk_ngl_driver_load_programs (GskNglDriver *self,
+ GError **error)
{
- GskGLCompiler *compiler;
+ GskNglCompiler *compiler;
gboolean ret = FALSE;
- g_assert (GSK_IS_NEXT_DRIVER (self));
- g_assert (GSK_IS_GL_COMMAND_QUEUE (self->command_queue));
+ g_assert (GSK_IS_NGL_DRIVER (self));
+ g_assert (GSK_IS_NGL_COMMAND_QUEUE (self->command_queue));
- compiler = gsk_gl_compiler_new (self, self->debug);
+ compiler = gsk_ngl_compiler_new (self, self->debug);
/* Setup preambles that are shared by all shaders */
- gsk_gl_compiler_set_preamble_from_resource (compiler,
- GSK_GL_COMPILER_ALL,
- "/org/gtk/libgsk/glsl/preamble.glsl");
- gsk_gl_compiler_set_preamble_from_resource (compiler,
- GSK_GL_COMPILER_VERTEX,
- "/org/gtk/libgsk/glsl/preamble.vs.glsl");
- gsk_gl_compiler_set_preamble_from_resource (compiler,
- GSK_GL_COMPILER_FRAGMENT,
- "/org/gtk/libgsk/glsl/preamble.fs.glsl");
+ gsk_ngl_compiler_set_preamble_from_resource (compiler,
+ GSK_NGL_COMPILER_ALL,
+ "/org/gtk/libgsk/glsl/preamble.glsl");
+ gsk_ngl_compiler_set_preamble_from_resource (compiler,
+ GSK_NGL_COMPILER_VERTEX,
+ "/org/gtk/libgsk/glsl/preamble.vs.glsl");
+ gsk_ngl_compiler_set_preamble_from_resource (compiler,
+ GSK_NGL_COMPILER_FRAGMENT,
+ "/org/gtk/libgsk/glsl/preamble.fs.glsl");
/* Setup attributes that are provided via VBO */
- gsk_gl_compiler_bind_attribute (compiler, "aPosition", 0);
- gsk_gl_compiler_bind_attribute (compiler, "aUv", 1);
+ gsk_ngl_compiler_bind_attribute (compiler, "aPosition", 0);
+ gsk_ngl_compiler_bind_attribute (compiler, "aUv", 1);
/* Use XMacros to register all of our programs and their uniforms */
-#define GSK_GL_NO_UNIFORMS
-#define GSK_GL_ADD_UNIFORM(pos, KEY, name) \
- gsk_gl_program_add_uniform (program, #name, UNIFORM_##KEY);
-#define GSK_GL_DEFINE_PROGRAM(name, resource, uniforms) \
+#define GSK_NGL_NO_UNIFORMS
+#define GSK_NGL_ADD_UNIFORM(pos, KEY, name) \
+ gsk_ngl_program_add_uniform (program, #name, UNIFORM_##KEY);
+#define GSK_NGL_DEFINE_PROGRAM(name, resource, uniforms) \
G_STMT_START { \
- GskGLProgram *program; \
+ GskNglProgram *program; \
gboolean have_alpha; \
gboolean have_source; \
\
- gsk_gl_compiler_set_source_from_resource (compiler, GSK_GL_COMPILER_ALL, resource); \
+ gsk_ngl_compiler_set_source_from_resource (compiler, GSK_NGL_COMPILER_ALL, resource); \
\
- if (!(program = gsk_gl_compiler_compile (compiler, #name, error))) \
+ if (!(program = gsk_ngl_compiler_compile (compiler, #name, error))) \
goto failure; \
\
- have_alpha = gsk_gl_program_add_uniform (program, "u_alpha", UNIFORM_SHARED_ALPHA); \
- have_source = gsk_gl_program_add_uniform (program, "u_source", UNIFORM_SHARED_SOURCE); \
- gsk_gl_program_add_uniform (program, "u_clip_rect", UNIFORM_SHARED_CLIP_RECT); \
- gsk_gl_program_add_uniform (program, "u_viewport", UNIFORM_SHARED_VIEWPORT); \
- gsk_gl_program_add_uniform (program, "u_projection", UNIFORM_SHARED_PROJECTION); \
- gsk_gl_program_add_uniform (program, "u_modelview", UNIFORM_SHARED_MODELVIEW); \
+ have_alpha = gsk_ngl_program_add_uniform (program, "u_alpha", UNIFORM_SHARED_ALPHA); \
+ have_source = gsk_ngl_program_add_uniform (program, "u_source", UNIFORM_SHARED_SOURCE); \
+ gsk_ngl_program_add_uniform (program, "u_clip_rect", UNIFORM_SHARED_CLIP_RECT); \
+ gsk_ngl_program_add_uniform (program, "u_viewport", UNIFORM_SHARED_VIEWPORT); \
+ gsk_ngl_program_add_uniform (program, "u_projection", UNIFORM_SHARED_PROJECTION); \
+ gsk_ngl_program_add_uniform (program, "u_modelview", UNIFORM_SHARED_MODELVIEW); \
\
uniforms \
\
- gsk_gl_program_uniforms_added (program, have_source); \
+ gsk_ngl_program_uniforms_added (program, have_source); \
\
if (have_alpha) \
- gsk_gl_program_set_uniform1f (program, UNIFORM_SHARED_ALPHA, 0, 1.0f); \
+ gsk_ngl_program_set_uniform1f (program, UNIFORM_SHARED_ALPHA, 0, 1.0f); \
\
- *(GskGLProgram **)(((guint8 *)self) + G_STRUCT_OFFSET (GskNextDriver, name)) = \
+ *(GskNglProgram **)(((guint8 *)self) + G_STRUCT_OFFSET (GskNglDriver, name)) = \
g_steal_pointer (&program); \
} G_STMT_END;
-# include "gskglprograms.defs"
-#undef GSK_GL_DEFINE_PROGRAM
-#undef GSK_GL_ADD_UNIFORM
+# include "gsknglprograms.defs"
+#undef GSK_NGL_DEFINE_PROGRAM
+#undef GSK_NGL_ADD_UNIFORM
ret = TRUE;
@@ -388,55 +389,55 @@ failure:
}
/**
- * gsk_next_driver_autorelease_framebuffer:
- * @self: a #GskNextDriver
+ * gsk_ngl_driver_autorelease_framebuffer:
+ * @self: a #GskNglDriver
* @framebuffer_id: the id of the OpenGL framebuffer
*
* Marks @framebuffer_id to be deleted when the current frame has cmopleted.
*/
static void
-gsk_next_driver_autorelease_framebuffer (GskNextDriver *self,
- guint framebuffer_id)
+gsk_ngl_driver_autorelease_framebuffer (GskNglDriver *self,
+ guint framebuffer_id)
{
- g_assert (GSK_IS_NEXT_DRIVER (self));
+ g_assert (GSK_IS_NGL_DRIVER (self));
g_array_append_val (self->autorelease_framebuffers, framebuffer_id);
}
-static GskNextDriver *
-gsk_next_driver_new (GskGLCommandQueue *command_queue,
- gboolean debug_shaders,
- GError **error)
+static GskNglDriver *
+gsk_ngl_driver_new (GskNglCommandQueue *command_queue,
+ gboolean debug_shaders,
+ GError **error)
{
- GskNextDriver *self;
+ GskNglDriver *self;
GdkGLContext *context;
- g_return_val_if_fail (GSK_IS_GL_COMMAND_QUEUE (command_queue), NULL);
+ g_return_val_if_fail (GSK_IS_NGL_COMMAND_QUEUE (command_queue), NULL);
- context = gsk_gl_command_queue_get_context (command_queue);
+ context = gsk_ngl_command_queue_get_context (command_queue);
gdk_gl_context_make_current (context);
- self = g_object_new (GSK_TYPE_NEXT_DRIVER, NULL);
+ self = g_object_new (GSK_TYPE_NGL_DRIVER, NULL);
self->command_queue = g_object_ref (command_queue);
self->shared_command_queue = g_object_ref (command_queue);
self->debug = !!debug_shaders;
- if (!gsk_next_driver_load_programs (self, error))
+ if (!gsk_ngl_driver_load_programs (self, error))
{
g_object_unref (self);
return NULL;
}
- self->glyphs = gsk_gl_glyph_library_new (self);
- self->icons = gsk_gl_icon_library_new (self);
- self->shadows = gsk_gl_shadow_library_new (self);
+ self->glyphs = gsk_ngl_glyph_library_new (self);
+ self->icons = gsk_ngl_icon_library_new (self);
+ self->shadows = gsk_ngl_shadow_library_new (self);
return g_steal_pointer (&self);
}
/**
- * gsk_next_driver_from_shared_context:
+ * gsk_ngl_driver_from_shared_context:
* @context: a shared #GdkGLContext retrieved with gdk_gl_context_get_shared_context()
* @debug_shaders: if debug information for shaders should be displayed
* @error: location for error information
@@ -444,20 +445,20 @@ gsk_next_driver_new (GskGLCommandQueue *command_queue,
* Retrieves a driver for a shared context. Generally this is shared across all GL
* contexts for a display so that fewer programs are necessary for driving output.
*
- * Returns: (transfer full): a #GskNextDriver if successful; otherwise %NULL and
+ * Returns: (transfer full): a #GskNglDriver if successful; otherwise %NULL and
* @error is set.
*/
-GskNextDriver *
-gsk_next_driver_from_shared_context (GdkGLContext *context,
- gboolean debug_shaders,
- GError **error)
+GskNglDriver *
+gsk_ngl_driver_from_shared_context (GdkGLContext *context,
+ gboolean debug_shaders,
+ GError **error)
{
- GskGLCommandQueue *command_queue = NULL;
- GskNextDriver *driver;
+ GskNglCommandQueue *command_queue = NULL;
+ GskNglDriver *driver;
g_return_val_if_fail (GDK_IS_GL_CONTEXT (context), NULL);
- if ((driver = g_object_get_data (G_OBJECT (context), "GSK_NEXT_DRIVER")))
+ if ((driver = g_object_get_data (G_OBJECT (context), "GSK_NGL_DRIVER")))
return g_object_ref (driver);
gdk_gl_context_make_current (context);
@@ -468,13 +469,13 @@ gsk_next_driver_from_shared_context (GdkGLContext *context,
* shared context, all other contexts sharing with it will have access
* to those programs.
*/
- command_queue = gsk_gl_command_queue_new (context, NULL);
+ command_queue = gsk_ngl_command_queue_new (context, NULL);
- if (!(driver = gsk_next_driver_new (command_queue, debug_shaders, error)))
+ if (!(driver = gsk_ngl_driver_new (command_queue, debug_shaders, error)))
goto failure;
g_object_set_data_full (G_OBJECT (context),
- "GSK_NEXT_DRIVER",
+ "GSK_NGL_DRIVER",
g_object_ref (driver),
g_object_unref);
@@ -485,9 +486,9 @@ failure:
}
/**
- * gsk_next_driver_begin_frame:
- * @self: a #GskNextDriver
- * @command_queue: A #GskGLCommandQueue from the renderer
+ * gsk_ngl_driver_begin_frame:
+ * @self: a #GskNglDriver
+ * @command_queue: A #GskNglCommandQueue from the renderer
*
* Begin a new frame.
*
@@ -496,13 +497,13 @@ failure:
* target context to be drawn into (the context of the renderer's surface).
*/
void
-gsk_next_driver_begin_frame (GskNextDriver *self,
- GskGLCommandQueue *command_queue)
+gsk_ngl_driver_begin_frame (GskNglDriver *self,
+ GskNglCommandQueue *command_queue)
{
gint64 last_frame_id;
- g_return_if_fail (GSK_IS_NEXT_DRIVER (self));
- g_return_if_fail (GSK_IS_GL_COMMAND_QUEUE (command_queue));
+ g_return_if_fail (GSK_IS_NGL_DRIVER (self));
+ g_return_if_fail (GSK_IS_NGL_COMMAND_QUEUE (command_queue));
g_return_if_fail (self->in_frame == FALSE);
last_frame_id = self->current_frame_id;
@@ -512,46 +513,46 @@ gsk_next_driver_begin_frame (GskNextDriver *self,
g_set_object (&self->command_queue, command_queue);
- gsk_gl_command_queue_begin_frame (self->command_queue);
+ gsk_ngl_command_queue_begin_frame (self->command_queue);
- gsk_gl_texture_library_begin_frame (GSK_GL_TEXTURE_LIBRARY (self->icons));
- gsk_gl_texture_library_begin_frame (GSK_GL_TEXTURE_LIBRARY (self->glyphs));
- gsk_gl_shadow_library_begin_frame (self->shadows);
+ gsk_ngl_texture_library_begin_frame (GSK_NGL_TEXTURE_LIBRARY (self->icons));
+ gsk_ngl_texture_library_begin_frame (GSK_NGL_TEXTURE_LIBRARY (self->glyphs));
+ gsk_ngl_shadow_library_begin_frame (self->shadows);
/* Remove all textures that are from a previous frame or are no
* longer used by linked GdkTexture. We do this at the beginning
* of the following frame instead of the end so that we reduce chances
* we block on any resources while delivering our frames.
*/
- gsk_next_driver_collect_unused_textures (self, last_frame_id - 1);
+ gsk_ngl_driver_collect_unused_textures (self, last_frame_id - 1);
}
/**
- * gsk_next_driver_end_frame:
- * @self: a #GskNextDriver
+ * gsk_ngl_driver_end_frame:
+ * @self: a #GskNglDriver
*
* Clean up resources from drawing the current frame.
*
* Temporary resources used while drawing will be released.
*/
void
-gsk_next_driver_end_frame (GskNextDriver *self)
+gsk_ngl_driver_end_frame (GskNglDriver *self)
{
- g_return_if_fail (GSK_IS_NEXT_DRIVER (self));
+ g_return_if_fail (GSK_IS_NGL_DRIVER (self));
g_return_if_fail (self->in_frame == TRUE);
- gsk_gl_command_queue_make_current (self->command_queue);
- gsk_gl_command_queue_end_frame (self->command_queue);
+ gsk_ngl_command_queue_make_current (self->command_queue);
+ gsk_ngl_command_queue_end_frame (self->command_queue);
- gsk_gl_texture_library_end_frame (GSK_GL_TEXTURE_LIBRARY (self->icons));
- gsk_gl_texture_library_end_frame (GSK_GL_TEXTURE_LIBRARY (self->glyphs));
+ gsk_ngl_texture_library_end_frame (GSK_NGL_TEXTURE_LIBRARY (self->icons));
+ gsk_ngl_texture_library_end_frame (GSK_NGL_TEXTURE_LIBRARY (self->glyphs));
self->in_frame = FALSE;
}
/**
- * gsk_next_driver_after_frame:
- * @self: a #GskNextDriver
+ * gsk_ngl_driver_after_frame:
+ * @self: a #GskNglDriver
*
* This function does post-frame cleanup operations.
*
@@ -559,9 +560,9 @@ gsk_next_driver_end_frame (GskNextDriver *self)
* after the frame has swapped buffers.
*/
void
-gsk_next_driver_after_frame (GskNextDriver *self)
+gsk_ngl_driver_after_frame (GskNglDriver *self)
{
- g_return_if_fail (GSK_IS_NEXT_DRIVER (self));
+ g_return_if_fail (GSK_IS_NGL_DRIVER (self));
g_return_if_fail (self->in_frame == FALSE);
/* Release any render targets (possibly adding them to
@@ -570,11 +571,11 @@ gsk_next_driver_after_frame (GskNextDriver *self)
*/
while (self->render_targets->len > 0)
{
- GskGLRenderTarget *render_target = g_ptr_array_index (self->render_targets, self->render_targets->len
- 1);
+ GskNglRenderTarget *render_target = g_ptr_array_index (self->render_targets, self->render_targets->len
- 1);
- gsk_next_driver_autorelease_framebuffer (self, render_target->framebuffer_id);
+ gsk_ngl_driver_autorelease_framebuffer (self, render_target->framebuffer_id);
glDeleteTextures (1, &render_target->texture_id);
- g_slice_free (GskGLRenderTarget, render_target);
+ g_slice_free (GskNglRenderTarget, render_target);
self->render_targets->len--;
}
@@ -588,7 +589,7 @@ gsk_next_driver_after_frame (GskNextDriver *self)
}
/* Release any cached textures we used during the frame */
- gsk_gl_texture_pool_clear (&self->texture_pool);
+ gsk_ngl_texture_pool_clear (&self->texture_pool);
/* Reset command queue to our shared queue incase we have operations
* that need to be processed outside of a frame (such as callbacks
@@ -598,36 +599,36 @@ gsk_next_driver_after_frame (GskNextDriver *self)
}
GdkGLContext *
-gsk_next_driver_get_context (GskNextDriver *self)
+gsk_ngl_driver_get_context (GskNglDriver *self)
{
- g_return_val_if_fail (GSK_IS_NEXT_DRIVER (self), NULL);
- g_return_val_if_fail (GSK_IS_GL_COMMAND_QUEUE (self->command_queue), NULL);
+ g_return_val_if_fail (GSK_IS_NGL_DRIVER (self), NULL);
+ g_return_val_if_fail (GSK_IS_NGL_COMMAND_QUEUE (self->command_queue), NULL);
- return gsk_gl_command_queue_get_context (self->command_queue);
+ return gsk_ngl_command_queue_get_context (self->command_queue);
}
/**
- * gsk_next_driver_cache_texture:
- * @self: a #GskNextDriver
+ * gsk_ngl_driver_cache_texture:
+ * @self: a #GskNglDriver
* @key: the key for the texture
* @texture_id: the id of the texture to be cached
*
* Inserts @texture_id into the texture cache using @key.
*
* Textures can be looked up by @key after calling this function using
- * gsk_next_driver_lookup_texture().
+ * gsk_ngl_driver_lookup_texture().
*
* Textures that have not been used within a number of frames will be
* purged from the texture cache automatically.
*/
void
-gsk_next_driver_cache_texture (GskNextDriver *self,
- const GskTextureKey *key,
- guint texture_id)
+gsk_ngl_driver_cache_texture (GskNglDriver *self,
+ const GskTextureKey *key,
+ guint texture_id)
{
GskTextureKey *k;
- g_assert (GSK_IS_NEXT_DRIVER (self));
+ g_assert (GSK_IS_NGL_DRIVER (self));
g_assert (key != NULL);
g_assert (texture_id > 0);
g_assert (g_hash_table_contains (self->textures, GUINT_TO_POINTER (texture_id)));
@@ -639,7 +640,7 @@ gsk_next_driver_cache_texture (GskNextDriver *self,
}
/**
- * gsk_next_driver_load_texture:
+ * gsk_ngl_driver_load_texture:
* @self: a #GdkTexture
* @texture: a #GdkTexture
* @min_filter: GL_NEAREST or GL_LINEAR
@@ -662,22 +663,22 @@ gsk_next_driver_cache_texture (GskNextDriver *self,
* Returns: a texture identifier
*/
guint
-gsk_next_driver_load_texture (GskNextDriver *self,
- GdkTexture *texture,
- int min_filter,
- int mag_filter)
+gsk_ngl_driver_load_texture (GskNglDriver *self,
+ GdkTexture *texture,
+ int min_filter,
+ int mag_filter)
{
GdkGLContext *context;
GdkTexture *downloaded_texture = NULL;
GdkTexture *source_texture;
- GskGLTexture *t;
+ GskNglTexture *t;
guint texture_id;
int height;
int width;
- g_return_val_if_fail (GSK_IS_NEXT_DRIVER (self), 0);
+ g_return_val_if_fail (GSK_IS_NGL_DRIVER (self), 0);
g_return_val_if_fail (GDK_IS_TEXTURE (texture), 0);
- g_return_val_if_fail (GSK_IS_GL_COMMAND_QUEUE (self->command_queue), 0);
+ g_return_val_if_fail (GSK_IS_NGL_COMMAND_QUEUE (self->command_queue), 0);
context = self->command_queue->context;
@@ -726,22 +727,22 @@ gsk_next_driver_load_texture (GskNextDriver *self,
width = gdk_texture_get_width (texture);
height = gdk_texture_get_height (texture);
- texture_id = gsk_gl_command_queue_upload_texture (self->command_queue,
- source_texture,
- 0,
- 0,
- width,
- height,
- min_filter,
- mag_filter);
-
- t = gsk_gl_texture_new (texture_id,
- width, height, min_filter, mag_filter,
- self->current_frame_id);
+ texture_id = gsk_ngl_command_queue_upload_texture (self->command_queue,
+ source_texture,
+ 0,
+ 0,
+ width,
+ height,
+ min_filter,
+ mag_filter);
+
+ t = gsk_ngl_texture_new (texture_id,
+ width, height, min_filter, mag_filter,
+ self->current_frame_id);
g_hash_table_insert (self->textures, GUINT_TO_POINTER (texture_id), t);
- if (gdk_texture_set_render_data (texture, self, t, gsk_gl_texture_destroyed))
+ if (gdk_texture_set_render_data (texture, self, t, gsk_ngl_texture_destroyed))
t->user = texture;
gdk_gl_context_label_object_printf (context, GL_TEXTURE, t->texture_id,
@@ -753,8 +754,8 @@ gsk_next_driver_load_texture (GskNextDriver *self,
}
/**
- * gsk_next_driver_create_texture:
- * @self: a #GskNextDriver
+ * gsk_ngl_driver_create_texture:
+ * @self: a #GskNglDriver
* @width: the width of the texture
* @height: the height of the texture
* @min_filter: GL_NEAREST or GL_LINEAR
@@ -764,26 +765,26 @@ gsk_next_driver_load_texture (GskNextDriver *self,
* to upload data, map to a framebuffer, or other uses which may
* modify the texture immediately.
*
- * Use gsk_next_driver_release_texture() to release this texture back into
+ * Use gsk_ngl_driver_release_texture() to release this texture back into
* the pool so it may be reused later in the pipeline.
*
- * Returns: a #GskGLTexture which can be returned to the pool with
- * gsk_next_driver_release_texture().
+ * Returns: a #GskNglTexture which can be returned to the pool with
+ * gsk_ngl_driver_release_texture().
*/
-GskGLTexture *
-gsk_next_driver_create_texture (GskNextDriver *self,
- float width,
- float height,
- int min_filter,
- int mag_filter)
+GskNglTexture *
+gsk_ngl_driver_create_texture (GskNglDriver *self,
+ float width,
+ float height,
+ int min_filter,
+ int mag_filter)
{
- GskGLTexture *texture;
+ GskNglTexture *texture;
- g_return_val_if_fail (GSK_IS_NEXT_DRIVER (self), NULL);
+ g_return_val_if_fail (GSK_IS_NGL_DRIVER (self), NULL);
- texture = gsk_gl_texture_pool_get (&self->texture_pool,
- width, height,
- min_filter, mag_filter);
+ texture = gsk_ngl_texture_pool_get (&self->texture_pool,
+ width, height,
+ min_filter, mag_filter);
g_hash_table_insert (self->textures,
GUINT_TO_POINTER (texture->texture_id),
texture);
@@ -792,9 +793,9 @@ gsk_next_driver_create_texture (GskNextDriver *self,
}
/**
- * gsk_next_driver_release_texture:
- * @self: a #GskNextDriver
- * @texture: a #GskGLTexture
+ * gsk_ngl_driver_release_texture:
+ * @self: a #GskNglDriver
+ * @texture: a #GskNglTexture
*
* Releases @texture back into the pool so that it can be used later
* in the command stream by future batches. This helps reduce VRAM
@@ -804,12 +805,12 @@ gsk_next_driver_create_texture (GskNextDriver *self,
* to free additional VRAM back to the system.
*/
void
-gsk_next_driver_release_texture (GskNextDriver *self,
- GskGLTexture *texture)
+gsk_ngl_driver_release_texture (GskNglDriver *self,
+ GskNglTexture *texture)
{
guint texture_id;
- g_assert (GSK_IS_NEXT_DRIVER (self));
+ g_assert (GSK_IS_NGL_DRIVER (self));
g_assert (texture != NULL);
texture_id = texture->texture_id;
@@ -818,12 +819,12 @@ gsk_next_driver_release_texture (GskNextDriver *self,
remove_texture_key_for_id (self, texture_id);
g_hash_table_steal (self->textures, GUINT_TO_POINTER (texture_id));
- gsk_gl_texture_pool_put (&self->texture_pool, texture);
+ gsk_ngl_texture_pool_put (&self->texture_pool, texture);
}
/**
- * gsk_next_driver_create_render_target:
- * @self: a #GskNextDriver
+ * gsk_ngl_driver_create_render_target:
+ * @self: a #GskNglDriver
* @width: the width for the render target
* @height: the height for the render target
* @min_filter: the min filter to use for the texture
@@ -834,7 +835,7 @@ gsk_next_driver_release_texture (GskNextDriver *self,
* bound to that framebuffer of the size @width x @height and using the
* appropriate filters.
*
- * Use gsk_next_driver_release_render_target() when you are finished with
+ * Use gsk_ngl_driver_release_render_target() when you are finished with
* the render target to release it. You may steal the texture from the
* render target when releasing it.
*
@@ -842,18 +843,18 @@ gsk_next_driver_release_texture (GskNextDriver *self,
* @out_texture_id are undefined.
*/
gboolean
-gsk_next_driver_create_render_target (GskNextDriver *self,
- int width,
- int height,
- int min_filter,
- int mag_filter,
- GskGLRenderTarget **out_render_target)
+gsk_ngl_driver_create_render_target (GskNglDriver *self,
+ int width,
+ int height,
+ int min_filter,
+ int mag_filter,
+ GskNglRenderTarget **out_render_target)
{
guint framebuffer_id;
guint texture_id;
- g_return_val_if_fail (GSK_IS_NEXT_DRIVER (self), FALSE);
- g_return_val_if_fail (GSK_IS_GL_COMMAND_QUEUE (self->command_queue), FALSE);
+ g_return_val_if_fail (GSK_IS_NGL_DRIVER (self), FALSE);
+ g_return_val_if_fail (GSK_IS_NGL_COMMAND_QUEUE (self->command_queue), FALSE);
g_return_val_if_fail (out_render_target != NULL, FALSE);
#if 0
@@ -861,7 +862,7 @@ gsk_next_driver_create_render_target (GskNextDriver *self,
{
for (guint i = self->render_targets->len; i > 0; i--)
{
- GskGLRenderTarget *render_target = g_ptr_array_index (self->render_targets, i-1);
+ GskNglRenderTarget *render_target = g_ptr_array_index (self->render_targets, i-1);
if (render_target->width == width &&
render_target->height == height &&
@@ -875,14 +876,14 @@ gsk_next_driver_create_render_target (GskNextDriver *self,
}
#endif
- if (gsk_gl_command_queue_create_render_target (self->command_queue,
- width, height,
- min_filter, mag_filter,
- &framebuffer_id, &texture_id))
+ if (gsk_ngl_command_queue_create_render_target (self->command_queue,
+ width, height,
+ min_filter, mag_filter,
+ &framebuffer_id, &texture_id))
{
- GskGLRenderTarget *render_target;
+ GskNglRenderTarget *render_target;
- render_target = g_slice_new0 (GskGLRenderTarget);
+ render_target = g_slice_new0 (GskNglRenderTarget);
render_target->min_filter = min_filter;
render_target->mag_filter = mag_filter;
render_target->width = width;
@@ -901,10 +902,10 @@ gsk_next_driver_create_render_target (GskNextDriver *self,
}
/**
- * gsk_next_driver_release_render_target:
- * @self: a #GskNextDriver
- * @render_target: a #GskGLRenderTarget created with
- * gsk_next_driver_create_render_target().
+ * gsk_ngl_driver_release_render_target:
+ * @self: a #GskNglDriver
+ * @render_target: a #GskNglRenderTarget created with
+ * gsk_ngl_driver_create_render_target().
* @release_texture: if the texture should also be released
*
* Releases a render target that was previously created. An attempt may
@@ -921,13 +922,13 @@ gsk_next_driver_create_render_target (GskNextDriver *self,
* Returns: a texture id if @release_texture is %FALSE, otherwise zero.
*/
guint
-gsk_next_driver_release_render_target (GskNextDriver *self,
- GskGLRenderTarget *render_target,
- gboolean release_texture)
+gsk_ngl_driver_release_render_target (GskNglDriver *self,
+ GskNglRenderTarget *render_target,
+ gboolean release_texture)
{
guint texture_id;
- g_return_val_if_fail (GSK_IS_NEXT_DRIVER (self), 0);
+ g_return_val_if_fail (GSK_IS_NGL_DRIVER (self), 0);
g_return_val_if_fail (render_target != NULL, 0);
if (release_texture)
@@ -937,22 +938,22 @@ gsk_next_driver_release_render_target (GskNextDriver *self,
}
else
{
- GskGLTexture *texture;
+ GskNglTexture *texture;
texture_id = render_target->texture_id;
- texture = gsk_gl_texture_new (render_target->texture_id,
- render_target->width,
- render_target->height,
- render_target->min_filter,
- render_target->mag_filter,
- self->current_frame_id);
+ texture = gsk_ngl_texture_new (render_target->texture_id,
+ render_target->width,
+ render_target->height,
+ render_target->min_filter,
+ render_target->mag_filter,
+ self->current_frame_id);
g_hash_table_insert (self->textures,
GUINT_TO_POINTER (texture_id),
g_steal_pointer (&texture));
- gsk_next_driver_autorelease_framebuffer (self, render_target->framebuffer_id);
- g_slice_free (GskGLRenderTarget, render_target);
+ gsk_ngl_driver_autorelease_framebuffer (self, render_target->framebuffer_id);
+ g_slice_free (GskNglRenderTarget, render_target);
}
@@ -960,8 +961,8 @@ gsk_next_driver_release_render_target (GskNextDriver *self,
}
/**
- * gsk_next_driver_lookup_shader:
- * @self: a #GskNextDriver
+ * gsk_ngl_driver_lookup_shader:
+ * @self: a #GskNglDriver
* @shader: the shader to lookup or load
* @error: a location for a #GError, or %NULL
*
@@ -972,12 +973,12 @@ gsk_next_driver_release_render_target (GskNextDriver *self,
* Returns: (transfer none): a #GskGLShader if successful; otherwise
* %NULL and @error is set.
*/
-GskGLProgram *
-gsk_next_driver_lookup_shader (GskNextDriver *self,
- GskGLShader *shader,
- GError **error)
+GskNglProgram *
+gsk_ngl_driver_lookup_shader (GskNglDriver *self,
+ GskGLShader *shader,
+ GError **error)
{
- GskGLProgram *program;
+ GskNglProgram *program;
g_return_val_if_fail (self != NULL, NULL);
g_return_val_if_fail (shader != NULL, NULL);
@@ -987,7 +988,7 @@ gsk_next_driver_lookup_shader (GskNextDriver *self,
if (program == NULL)
{
const GskGLUniform *uniforms;
- GskGLCompiler *compiler;
+ GskNglCompiler *compiler;
GBytes *suffix;
int n_required_textures;
int n_uniforms;
@@ -1016,64 +1017,64 @@ gsk_next_driver_lookup_shader (GskNextDriver *self,
return NULL;
}
- compiler = gsk_gl_compiler_new (self, FALSE);
+ compiler = gsk_ngl_compiler_new (self, FALSE);
suffix = gsk_gl_shader_get_source (shader);
- gsk_gl_compiler_set_preamble_from_resource (compiler,
- GSK_GL_COMPILER_ALL,
- "/org/gtk/libgsk/glsl/preamble.glsl");
- gsk_gl_compiler_set_preamble_from_resource (compiler,
- GSK_GL_COMPILER_VERTEX,
- "/org/gtk/libgsk/glsl/preamble.vs.glsl");
- gsk_gl_compiler_set_preamble_from_resource (compiler,
- GSK_GL_COMPILER_FRAGMENT,
- "/org/gtk/libgsk/glsl/preamble.fs.glsl");
- gsk_gl_compiler_set_source_from_resource (compiler,
- GSK_GL_COMPILER_ALL,
- "/org/gtk/libgsk/glsl/custom.glsl");
- gsk_gl_compiler_set_suffix (compiler, GSK_GL_COMPILER_FRAGMENT, suffix);
+ gsk_ngl_compiler_set_preamble_from_resource (compiler,
+ GSK_NGL_COMPILER_ALL,
+ "/org/gtk/libgsk/glsl/preamble.glsl");
+ gsk_ngl_compiler_set_preamble_from_resource (compiler,
+ GSK_NGL_COMPILER_VERTEX,
+ "/org/gtk/libgsk/glsl/preamble.vs.glsl");
+ gsk_ngl_compiler_set_preamble_from_resource (compiler,
+ GSK_NGL_COMPILER_FRAGMENT,
+ "/org/gtk/libgsk/glsl/preamble.fs.glsl");
+ gsk_ngl_compiler_set_source_from_resource (compiler,
+ GSK_NGL_COMPILER_ALL,
+ "/org/gtk/libgsk/glsl/custom.glsl");
+ gsk_ngl_compiler_set_suffix (compiler, GSK_NGL_COMPILER_FRAGMENT, suffix);
/* Setup attributes that are provided via VBO */
- gsk_gl_compiler_bind_attribute (compiler, "aPosition", 0);
- gsk_gl_compiler_bind_attribute (compiler, "aUv", 1);
+ gsk_ngl_compiler_bind_attribute (compiler, "aPosition", 0);
+ gsk_ngl_compiler_bind_attribute (compiler, "aUv", 1);
- if ((program = gsk_gl_compiler_compile (compiler, NULL, error)))
+ if ((program = gsk_ngl_compiler_compile (compiler, NULL, error)))
{
gboolean have_alpha;
- gsk_gl_program_add_uniform (program, "u_source", UNIFORM_SHARED_SOURCE);
- gsk_gl_program_add_uniform (program, "u_clip_rect", UNIFORM_SHARED_CLIP_RECT);
- gsk_gl_program_add_uniform (program, "u_viewport", UNIFORM_SHARED_VIEWPORT);
- gsk_gl_program_add_uniform (program, "u_projection", UNIFORM_SHARED_PROJECTION);
- gsk_gl_program_add_uniform (program, "u_modelview", UNIFORM_SHARED_MODELVIEW);
- have_alpha = gsk_gl_program_add_uniform (program, "u_alpha", UNIFORM_SHARED_ALPHA);
-
- gsk_gl_program_add_uniform (program, "u_size", UNIFORM_CUSTOM_SIZE);
- gsk_gl_program_add_uniform (program, "u_texture1", UNIFORM_CUSTOM_TEXTURE1);
- gsk_gl_program_add_uniform (program, "u_texture2", UNIFORM_CUSTOM_TEXTURE2);
- gsk_gl_program_add_uniform (program, "u_texture3", UNIFORM_CUSTOM_TEXTURE3);
- gsk_gl_program_add_uniform (program, "u_texture4", UNIFORM_CUSTOM_TEXTURE4);
+ gsk_ngl_program_add_uniform (program, "u_source", UNIFORM_SHARED_SOURCE);
+ gsk_ngl_program_add_uniform (program, "u_clip_rect", UNIFORM_SHARED_CLIP_RECT);
+ gsk_ngl_program_add_uniform (program, "u_viewport", UNIFORM_SHARED_VIEWPORT);
+ gsk_ngl_program_add_uniform (program, "u_projection", UNIFORM_SHARED_PROJECTION);
+ gsk_ngl_program_add_uniform (program, "u_modelview", UNIFORM_SHARED_MODELVIEW);
+ have_alpha = gsk_ngl_program_add_uniform (program, "u_alpha", UNIFORM_SHARED_ALPHA);
+
+ gsk_ngl_program_add_uniform (program, "u_size", UNIFORM_CUSTOM_SIZE);
+ gsk_ngl_program_add_uniform (program, "u_texture1", UNIFORM_CUSTOM_TEXTURE1);
+ gsk_ngl_program_add_uniform (program, "u_texture2", UNIFORM_CUSTOM_TEXTURE2);
+ gsk_ngl_program_add_uniform (program, "u_texture3", UNIFORM_CUSTOM_TEXTURE3);
+ gsk_ngl_program_add_uniform (program, "u_texture4", UNIFORM_CUSTOM_TEXTURE4);
for (guint i = 0; i < n_uniforms; i++)
- gsk_gl_program_add_uniform (program, uniforms[i].name, UNIFORM_CUSTOM_LAST+i);
+ gsk_ngl_program_add_uniform (program, uniforms[i].name, UNIFORM_CUSTOM_LAST+i);
- program->size_location = gsk_gl_program_get_uniform_location (program, UNIFORM_CUSTOM_SIZE);
- program->texture_locations[0] = gsk_gl_program_get_uniform_location (program,
UNIFORM_CUSTOM_TEXTURE1);
- program->texture_locations[1] = gsk_gl_program_get_uniform_location (program,
UNIFORM_CUSTOM_TEXTURE2);
- program->texture_locations[2] = gsk_gl_program_get_uniform_location (program,
UNIFORM_CUSTOM_TEXTURE3);
- program->texture_locations[3] = gsk_gl_program_get_uniform_location (program,
UNIFORM_CUSTOM_TEXTURE4);
+ program->size_location = gsk_ngl_program_get_uniform_location (program, UNIFORM_CUSTOM_SIZE);
+ program->texture_locations[0] = gsk_ngl_program_get_uniform_location (program,
UNIFORM_CUSTOM_TEXTURE1);
+ program->texture_locations[1] = gsk_ngl_program_get_uniform_location (program,
UNIFORM_CUSTOM_TEXTURE2);
+ program->texture_locations[2] = gsk_ngl_program_get_uniform_location (program,
UNIFORM_CUSTOM_TEXTURE3);
+ program->texture_locations[3] = gsk_ngl_program_get_uniform_location (program,
UNIFORM_CUSTOM_TEXTURE4);
for (guint i = 0; i < n_uniforms; i++)
- program->args_locations[i] = gsk_gl_program_get_uniform_location (program,
UNIFORM_CUSTOM_LAST+i);
+ program->args_locations[i] = gsk_ngl_program_get_uniform_location (program,
UNIFORM_CUSTOM_LAST+i);
for (guint i = n_uniforms; i < G_N_ELEMENTS (program->args_locations); i++)
program->args_locations[i] = -1;
- gsk_gl_program_uniforms_added (program, TRUE);
+ gsk_ngl_program_uniforms_added (program, TRUE);
if (have_alpha)
- gsk_gl_program_set_uniform1f (program, UNIFORM_SHARED_ALPHA, 0, 1.0f);
+ gsk_ngl_program_set_uniform1f (program, UNIFORM_SHARED_ALPHA, 0, 1.0f);
g_hash_table_insert (self->shader_cache, shader, program);
g_object_weak_ref (G_OBJECT (shader),
- gsk_next_driver_shader_weak_cb,
+ gsk_ngl_driver_shader_weak_cb,
self);
}
@@ -1085,8 +1086,8 @@ gsk_next_driver_lookup_shader (GskNextDriver *self,
#ifdef G_ENABLE_DEBUG
static void
-write_atlas_to_png (GskGLTextureAtlas *atlas,
- const char *filename)
+write_atlas_to_png (GskNglTextureAtlas *atlas,
+ const char *filename)
{
int stride = cairo_format_stride_for_width (CAIRO_FORMAT_ARGB32, atlas->width);
guchar *data = g_malloc (atlas->height * stride);
@@ -1102,17 +1103,17 @@ write_atlas_to_png (GskGLTextureAtlas *atlas,
}
void
-gsk_next_driver_save_atlases_to_png (GskNextDriver *self,
- const char *directory)
+gsk_ngl_driver_save_atlases_to_png (GskNglDriver *self,
+ const char *directory)
{
- g_return_if_fail (GSK_IS_NEXT_DRIVER (self));
+ g_return_if_fail (GSK_IS_NGL_DRIVER (self));
if (directory == NULL)
directory = ".";
for (guint i = 0; i < self->atlases->len; i++)
{
- GskGLTextureAtlas *atlas = g_ptr_array_index (self->atlases, i);
+ GskNglTextureAtlas *atlas = g_ptr_array_index (self->atlases, i);
char *filename = g_strdup_printf ("%s%sframe-%d-atlas-%d.png",
directory,
G_DIR_SEPARATOR_S,
@@ -1124,25 +1125,25 @@ gsk_next_driver_save_atlases_to_png (GskNextDriver *self,
}
#endif
-GskGLCommandQueue *
-gsk_next_driver_create_command_queue (GskNextDriver *self,
- GdkGLContext *context)
+GskNglCommandQueue *
+gsk_ngl_driver_create_command_queue (GskNglDriver *self,
+ GdkGLContext *context)
{
- g_return_val_if_fail (GSK_IS_NEXT_DRIVER (self), NULL);
+ g_return_val_if_fail (GSK_IS_NGL_DRIVER (self), NULL);
g_return_val_if_fail (GDK_IS_GL_CONTEXT (context), NULL);
- return gsk_gl_command_queue_new (context, self->shared_command_queue->uniforms);
+ return gsk_ngl_command_queue_new (context, self->shared_command_queue->uniforms);
}
void
-gsk_next_driver_add_texture_slices (GskNextDriver *self,
- GdkTexture *texture,
- GskGLTextureSlice **out_slices,
- guint *out_n_slices)
+gsk_ngl_driver_add_texture_slices (GskNglDriver *self,
+ GdkTexture *texture,
+ GskNglTextureSlice **out_slices,
+ guint *out_n_slices)
{
int max_texture_size;
- GskGLTextureSlice *slices;
- GskGLTexture *t;
+ GskNglTextureSlice *slices;
+ GskNglTexture *t;
guint n_slices;
guint cols;
guint rows;
@@ -1150,7 +1151,7 @@ gsk_next_driver_add_texture_slices (GskNextDriver *self,
int tex_height;
int x = 0, y = 0;
- g_assert (GSK_IS_NEXT_DRIVER (self));
+ g_assert (GSK_IS_NGL_DRIVER (self));
g_assert (GDK_IS_TEXTURE (texture));
g_assert (out_slices != NULL);
g_assert (out_n_slices != NULL);
@@ -1171,7 +1172,7 @@ gsk_next_driver_add_texture_slices (GskNextDriver *self,
}
n_slices = cols * rows;
- slices = g_new0 (GskGLTextureSlice, n_slices);
+ slices = g_new0 (GskNglTextureSlice, n_slices);
for (guint col = 0; col < cols; col ++)
{
@@ -1183,11 +1184,11 @@ gsk_next_driver_add_texture_slices (GskNextDriver *self,
int slice_index = (col * rows) + row;
guint texture_id;
- texture_id = gsk_gl_command_queue_upload_texture (self->command_queue,
- texture,
- x, y,
- slice_width, slice_height,
- GL_NEAREST, GL_NEAREST);
+ texture_id = gsk_ngl_command_queue_upload_texture (self->command_queue,
+ texture,
+ x, y,
+ slice_width, slice_height,
+ GL_NEAREST, GL_NEAREST);
slices[slice_index].rect.x = x;
slices[slice_index].rect.y = y;
@@ -1203,28 +1204,28 @@ gsk_next_driver_add_texture_slices (GskNextDriver *self,
}
/* Allocate one Texture for the entire thing. */
- t = gsk_gl_texture_new (0,
- tex_width, tex_height,
- GL_NEAREST, GL_NEAREST,
- self->current_frame_id);
+ t = gsk_ngl_texture_new (0,
+ tex_width, tex_height,
+ GL_NEAREST, GL_NEAREST,
+ self->current_frame_id);
- /* Use gsk_gl_texture_free() as destroy notify here since we are
- * not inserting this GskGLTexture into self->textures!
+ /* Use gsk_ngl_texture_free() as destroy notify here since we are
+ * not inserting this GskNglTexture into self->textures!
*/
gdk_texture_set_render_data (texture, self, t,
- (GDestroyNotify)gsk_gl_texture_free);
+ (GDestroyNotify)gsk_ngl_texture_free);
t->slices = *out_slices = slices;
t->n_slices = *out_n_slices = n_slices;
}
-GskGLTexture *
-gsk_next_driver_mark_texture_permanent (GskNextDriver *self,
- guint texture_id)
+GskNglTexture *
+gsk_ngl_driver_mark_texture_permanent (GskNglDriver *self,
+ guint texture_id)
{
- GskGLTexture *t;
+ GskNglTexture *t;
- g_return_val_if_fail (GSK_IS_NEXT_DRIVER (self), NULL);
+ g_return_val_if_fail (GSK_IS_NGL_DRIVER (self), NULL);
g_return_val_if_fail (texture_id > 0, NULL);
if ((t = g_hash_table_lookup (self->textures, GUINT_TO_POINTER (texture_id))))
@@ -1234,25 +1235,25 @@ gsk_next_driver_mark_texture_permanent (GskNextDriver *self,
}
void
-gsk_next_driver_release_texture_by_id (GskNextDriver *self,
- guint texture_id)
+gsk_ngl_driver_release_texture_by_id (GskNglDriver *self,
+ guint texture_id)
{
- GskGLTexture *texture;
+ GskNglTexture *texture;
- g_return_if_fail (GSK_IS_NEXT_DRIVER (self));
+ g_return_if_fail (GSK_IS_NGL_DRIVER (self));
g_return_if_fail (texture_id > 0);
remove_texture_key_for_id (self, texture_id);
if ((texture = g_hash_table_lookup (self->textures, GUINT_TO_POINTER (texture_id))))
- gsk_next_driver_release_texture (self, texture);
+ gsk_ngl_driver_release_texture (self, texture);
}
static void
create_texture_from_texture_destroy (gpointer data)
{
- GskGLTextureState *state = data;
+ GskNglTextureState *state = data;
g_assert (state != NULL);
g_assert (GDK_IS_GL_CONTEXT (state->context));
@@ -1260,17 +1261,17 @@ create_texture_from_texture_destroy (gpointer data)
gdk_gl_context_make_current (state->context);
glDeleteTextures (1, &state->texture_id);
g_clear_object (&state->context);
- g_slice_free (GskGLTextureState, state);
+ g_slice_free (GskNglTextureState, state);
}
GdkTexture *
-gsk_next_driver_create_gdk_texture (GskNextDriver *self,
- guint texture_id)
+gsk_ngl_driver_create_gdk_texture (GskNglDriver *self,
+ guint texture_id)
{
- GskGLTextureState *state;
- GskGLTexture *texture;
+ GskNglTextureState *state;
+ GskNglTexture *texture;
- g_return_val_if_fail (GSK_IS_NEXT_DRIVER (self), NULL);
+ g_return_val_if_fail (GSK_IS_NGL_DRIVER (self), NULL);
g_return_val_if_fail (self->command_queue != NULL, NULL);
g_return_val_if_fail (GDK_IS_GL_CONTEXT (self->command_queue->context), NULL);
g_return_val_if_fail (texture_id > 0, NULL);
@@ -1280,7 +1281,7 @@ gsk_next_driver_create_gdk_texture (GskNextDriver *self,
if (!(texture = g_hash_table_lookup (self->textures, GUINT_TO_POINTER (texture_id))))
g_return_val_if_reached (NULL);
- state = g_slice_new0 (GskGLTextureState);
+ state = g_slice_new0 (GskNglTextureState);
state->texture_id = texture_id;
state->context = g_object_ref (self->command_queue->context);
diff --git a/gsk/ngl/gskngldriverprivate.h b/gsk/ngl/gskngldriverprivate.h
new file mode 100644
index 0000000000..e5cda21adc
--- /dev/null
+++ b/gsk/ngl/gskngldriverprivate.h
@@ -0,0 +1,234 @@
+/* gskngldriverprivate.h
+ *
+ * Copyright 2020 Christian Hergert <chergert redhat com>
+ *
+ * This file is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU Lesser General Public License as published by the Free
+ * Software Foundation; either version 2.1 of the License, or (at your option)
+ * any later version.
+ *
+ * This file is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
+ * License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * SPDX-License-Identifier: LGPL-2.1-or-later
+ */
+
+#ifndef __GSK_NGL_DRIVER_PRIVATE_H__
+#define __GSK_NGL_DRIVER_PRIVATE_H__
+
+#include <gdk/gdkgltextureprivate.h>
+
+#include "gskngltypesprivate.h"
+#include "gskngltexturepoolprivate.h"
+
+G_BEGIN_DECLS
+
+enum {
+ UNIFORM_SHARED_ALPHA,
+ UNIFORM_SHARED_SOURCE,
+ UNIFORM_SHARED_CLIP_RECT,
+ UNIFORM_SHARED_VIEWPORT,
+ UNIFORM_SHARED_PROJECTION,
+ UNIFORM_SHARED_MODELVIEW,
+
+ UNIFORM_SHARED_LAST
+};
+
+enum {
+ UNIFORM_CUSTOM_SIZE = UNIFORM_SHARED_LAST,
+ UNIFORM_CUSTOM_TEXTURE1,
+ UNIFORM_CUSTOM_TEXTURE2,
+ UNIFORM_CUSTOM_TEXTURE3,
+ UNIFORM_CUSTOM_TEXTURE4,
+
+ UNIFORM_CUSTOM_LAST
+};
+
+typedef struct {
+ gconstpointer pointer;
+ float scale_x;
+ float scale_y;
+ int filter;
+ int pointer_is_child;
+ graphene_rect_t parent_rect; /* Valid when pointer_is_child */
+} GskTextureKey;
+
+#define GSL_GK_NO_UNIFORMS UNIFORM_INVALID_##__COUNTER__
+#define GSK_NGL_ADD_UNIFORM(pos, KEY, name) UNIFORM_##KEY = UNIFORM_SHARED_LAST + pos,
+#define GSK_NGL_DEFINE_PROGRAM(name, resource, uniforms) enum { uniforms };
+# include "gsknglprograms.defs"
+#undef GSK_NGL_DEFINE_PROGRAM
+#undef GSK_NGL_ADD_UNIFORM
+#undef GSL_GK_NO_UNIFORMS
+
+#define GSK_TYPE_NGL_DRIVER (gsk_ngl_driver_get_type())
+
+G_DECLARE_FINAL_TYPE (GskNglDriver, gsk_ngl_driver, GSK, NGL_DRIVER, GObject)
+
+struct _GskNglRenderTarget
+{
+ guint framebuffer_id;
+ guint texture_id;
+ int min_filter;
+ int mag_filter;
+ int width;
+ int height;
+};
+
+struct _GskNglDriver
+{
+ GObject parent_instance;
+
+ GskNglCommandQueue *shared_command_queue;
+ GskNglCommandQueue *command_queue;
+
+ GskNglTexturePool texture_pool;
+
+ GskNglGlyphLibrary *glyphs;
+ GskNglIconLibrary *icons;
+ GskNglShadowLibrary *shadows;
+
+ GHashTable *textures;
+ GHashTable *key_to_texture_id;
+ GHashTable *texture_id_to_key;
+
+ GPtrArray *atlases;
+
+ GHashTable *shader_cache;
+
+ GArray *autorelease_framebuffers;
+ GPtrArray *render_targets;
+
+#define GSK_NGL_NO_UNIFORMS
+#define GSK_NGL_ADD_UNIFORM(pos, KEY, name)
+#define GSK_NGL_DEFINE_PROGRAM(name, resource, uniforms) GskNglProgram *name;
+# include "gsknglprograms.defs"
+#undef GSK_NGL_NO_UNIFORMS
+#undef GSK_NGL_ADD_UNIFORM
+#undef GSK_NGL_DEFINE_PROGRAM
+
+ gint64 current_frame_id;
+
+ /* Used to reduce number of comparisons */
+ guint stamps[UNIFORM_SHARED_LAST];
+
+ guint debug : 1;
+ guint in_frame : 1;
+};
+
+GskNglDriver *gsk_ngl_driver_from_shared_context (GdkGLContext *context,
+ gboolean debug_shaders,
+ GError **error);
+GskNglCommandQueue *gsk_ngl_driver_create_command_queue (GskNglDriver *self,
+ GdkGLContext *context);
+GdkGLContext *gsk_ngl_driver_get_context (GskNglDriver *self);
+gboolean gsk_ngl_driver_create_render_target (GskNglDriver *self,
+ int width,
+ int height,
+ int min_filter,
+ int mag_filter,
+ GskNglRenderTarget **render_target);
+guint gsk_ngl_driver_release_render_target (GskNglDriver *self,
+ GskNglRenderTarget *render_target,
+ gboolean release_texture);
+void gsk_ngl_driver_begin_frame (GskNglDriver *self,
+ GskNglCommandQueue *command_queue);
+void gsk_ngl_driver_end_frame (GskNglDriver *self);
+void gsk_ngl_driver_after_frame (GskNglDriver *self);
+GdkTexture *gsk_ngl_driver_create_gdk_texture (GskNglDriver *self,
+ guint texture_id);
+void gsk_ngl_driver_cache_texture (GskNglDriver *self,
+ const GskTextureKey *key,
+ guint texture_id);
+guint gsk_ngl_driver_load_texture (GskNglDriver *self,
+ GdkTexture *texture,
+ int min_filter,
+ int mag_filter);
+GskNglTexture *gsk_ngl_driver_create_texture (GskNglDriver *self,
+ float width,
+ float height,
+ int min_filter,
+ int mag_filter);
+void gsk_ngl_driver_release_texture (GskNglDriver *self,
+ GskNglTexture *texture);
+void gsk_ngl_driver_release_texture_by_id (GskNglDriver *self,
+ guint texture_id);
+GskNglTexture *gsk_ngl_driver_mark_texture_permanent (GskNglDriver *self,
+ guint texture_id);
+void gsk_ngl_driver_add_texture_slices (GskNglDriver *self,
+ GdkTexture *texture,
+ GskNglTextureSlice **out_slices,
+ guint *out_n_slices);
+GskNglProgram *gsk_ngl_driver_lookup_shader (GskNglDriver *self,
+ GskGLShader *shader,
+ GError **error);
+GskNglTextureAtlas *gsk_ngl_driver_create_atlas (GskNglDriver *self);
+
+#ifdef G_ENABLE_DEBUG
+void gsk_ngl_driver_save_atlases_to_png (GskNglDriver *self,
+ const char *directory);
+#endif
+
+static inline GskNglTexture *
+gsk_ngl_driver_get_texture_by_id (GskNglDriver *self,
+ guint texture_id)
+{
+ return g_hash_table_lookup (self->textures, GUINT_TO_POINTER (texture_id));
+}
+
+/**
+ * gsk_ngl_driver_lookup_texture:
+ * @self: a #GskNglDriver
+ * @key: the key for the texture
+ *
+ * Looks up a texture in the texture cache by @key.
+ *
+ * If the texture could not be found, then zero is returned.
+ *
+ * Returns: a positive integer if the texture was found; otherwise 0.
+ */
+static inline guint
+gsk_ngl_driver_lookup_texture (GskNglDriver *self,
+ const GskTextureKey *key)
+{
+ gpointer id;
+
+ if (g_hash_table_lookup_extended (self->key_to_texture_id, key, NULL, &id))
+ {
+ GskNglTexture *texture = g_hash_table_lookup (self->textures, id);
+
+ if (texture != NULL)
+ texture->last_used_in_frame = self->current_frame_id;
+
+ return GPOINTER_TO_UINT (id);
+ }
+
+ return 0;
+}
+
+static inline void
+gsk_ngl_driver_slice_texture (GskNglDriver *self,
+ GdkTexture *texture,
+ GskNglTextureSlice **out_slices,
+ guint *out_n_slices)
+{
+ GskNglTexture *t;
+
+ if ((t = gdk_texture_get_render_data (texture, self)))
+ {
+ *out_slices = t->slices;
+ *out_n_slices = t->n_slices;
+ return;
+ }
+
+ gsk_ngl_driver_add_texture_slices (self, texture, out_slices, out_n_slices);
+}
+
+G_END_DECLS
+
+#endif /* __GSK_NGL_DRIVER_PRIVATE_H__ */
diff --git a/gsk/next/gskglglyphlibrary.c b/gsk/ngl/gsknglglyphlibrary.c
similarity index 63%
rename from gsk/next/gskglglyphlibrary.c
rename to gsk/ngl/gsknglglyphlibrary.c
index e432aad9cd..5cb2a3fe3b 100644
--- a/gsk/next/gskglglyphlibrary.c
+++ b/gsk/ngl/gsknglglyphlibrary.c
@@ -1,4 +1,4 @@
-/* gskglglyphlibrary.c
+/* gsknglglyphlibrary.c
*
* Copyright 2020 Christian Hergert <chergert redhat com>
*
@@ -24,18 +24,18 @@
#include <gdk/gdkmemorytextureprivate.h>
#include <gdk/gdkprofilerprivate.h>
-#include "gskglcommandqueueprivate.h"
-#include "gskgldriverprivate.h"
-#include "gskglglyphlibraryprivate.h"
+#include "gsknglcommandqueueprivate.h"
+#include "gskngldriverprivate.h"
+#include "gsknglglyphlibraryprivate.h"
#define MAX_GLYPH_SIZE 128
-G_DEFINE_TYPE (GskGLGlyphLibrary, gsk_gl_glyph_library, GSK_TYPE_GL_TEXTURE_LIBRARY)
+G_DEFINE_TYPE (GskNglGlyphLibrary, gsk_ngl_glyph_library, GSK_TYPE_GL_TEXTURE_LIBRARY)
-GskGLGlyphLibrary *
-gsk_gl_glyph_library_new (GskNextDriver *driver)
+GskNglGlyphLibrary *
+gsk_ngl_glyph_library_new (GskNglDriver *driver)
{
- g_return_val_if_fail (GSK_IS_NEXT_DRIVER (driver), NULL);
+ g_return_val_if_fail (GSK_IS_NGL_DRIVER (driver), NULL);
return g_object_new (GSK_TYPE_GL_GLYPH_LIBRARY,
"driver", driver,
@@ -43,13 +43,13 @@ gsk_gl_glyph_library_new (GskNextDriver *driver)
}
static guint
-gsk_gl_glyph_key_hash (gconstpointer data)
+gsk_ngl_glyph_key_hash (gconstpointer data)
{
- const GskGLGlyphKey *key = data;
+ const GskNglGlyphKey *key = data;
/* We do not store the hash within the key because GHashTable will already
* store the hash value for us and so this is called only a single time per
- * cached item. This saves an extra 4 bytes per GskGLGlyphKey which means on
+ * cached item. This saves an extra 4 bytes per GskNglGlyphKey which means on
* 64-bit, we fit nicely within 2 pointers (the smallest allocation size
* for GSlice).
*/
@@ -62,68 +62,68 @@ gsk_gl_glyph_key_hash (gconstpointer data)
}
static gboolean
-gsk_gl_glyph_key_equal (gconstpointer v1,
- gconstpointer v2)
+gsk_ngl_glyph_key_equal (gconstpointer v1,
+ gconstpointer v2)
{
- return memcmp (v1, v2, sizeof (GskGLGlyphKey)) == 0;
+ return memcmp (v1, v2, sizeof (GskNglGlyphKey)) == 0;
}
static void
-gsk_gl_glyph_key_free (gpointer data)
+gsk_ngl_glyph_key_free (gpointer data)
{
- GskGLGlyphKey *key = data;
+ GskNglGlyphKey *key = data;
g_clear_object (&key->font);
- g_slice_free (GskGLGlyphKey, key);
+ g_slice_free (GskNglGlyphKey, key);
}
static void
-gsk_gl_glyph_value_free (gpointer data)
+gsk_ngl_glyph_value_free (gpointer data)
{
- g_slice_free (GskGLGlyphValue, data);
+ g_slice_free (GskNglGlyphValue, data);
}
static void
-gsk_gl_glyph_library_finalize (GObject *object)
+gsk_ngl_glyph_library_finalize (GObject *object)
{
- GskGLGlyphLibrary *self = (GskGLGlyphLibrary *)object;
+ GskNglGlyphLibrary *self = (GskNglGlyphLibrary *)object;
g_clear_pointer (&self->hash_table, g_hash_table_unref);
g_clear_pointer (&self->surface_data, g_free);
- G_OBJECT_CLASS (gsk_gl_glyph_library_parent_class)->finalize (object);
+ G_OBJECT_CLASS (gsk_ngl_glyph_library_parent_class)->finalize (object);
}
static void
-gsk_gl_glyph_library_class_init (GskGLGlyphLibraryClass *klass)
+gsk_ngl_glyph_library_class_init (GskNglGlyphLibraryClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
- object_class->finalize = gsk_gl_glyph_library_finalize;
+ object_class->finalize = gsk_ngl_glyph_library_finalize;
}
static void
-gsk_gl_glyph_library_init (GskGLGlyphLibrary *self)
+gsk_ngl_glyph_library_init (GskNglGlyphLibrary *self)
{
- GSK_GL_TEXTURE_LIBRARY (self)->max_entry_size = MAX_GLYPH_SIZE;
- gsk_gl_texture_library_set_funcs (GSK_GL_TEXTURE_LIBRARY (self),
- gsk_gl_glyph_key_hash,
- gsk_gl_glyph_key_equal,
- gsk_gl_glyph_key_free,
- gsk_gl_glyph_value_free);
+ GSK_NGL_TEXTURE_LIBRARY (self)->max_entry_size = MAX_GLYPH_SIZE;
+ gsk_ngl_texture_library_set_funcs (GSK_NGL_TEXTURE_LIBRARY (self),
+ gsk_ngl_glyph_key_hash,
+ gsk_ngl_glyph_key_equal,
+ gsk_ngl_glyph_key_free,
+ gsk_ngl_glyph_value_free);
}
static cairo_surface_t *
-gsk_gl_glyph_library_create_surface (GskGLGlyphLibrary *self,
- int stride,
- int width,
- int height,
- double device_scale)
+gsk_ngl_glyph_library_create_surface (GskNglGlyphLibrary *self,
+ int stride,
+ int width,
+ int height,
+ double device_scale)
{
cairo_surface_t *surface;
gsize n_bytes;
- g_assert (GSK_IS_GL_GLYPH_LIBRARY (self));
+ g_assert (GSK_IS_NGL_GLYPH_LIBRARY (self));
g_assert (width > 0);
g_assert (height > 0);
@@ -147,8 +147,8 @@ gsk_gl_glyph_library_create_surface (GskGLGlyphLibrary *self,
static void
render_glyph (cairo_surface_t *surface,
const cairo_scaled_font_t *scaled_font,
- const GskGLGlyphKey *key,
- const GskGLGlyphValue *value)
+ const GskNglGlyphKey *key,
+ const GskNglGlyphValue *value)
{
cairo_t *cr;
PangoGlyphString glyph_string;
@@ -179,16 +179,16 @@ render_glyph (cairo_surface_t *surface,
}
static void
-gsk_gl_glyph_library_upload_glyph (GskGLGlyphLibrary *self,
- const GskGLGlyphKey *key,
- const GskGLGlyphValue *value,
- int width,
- int height,
- double device_scale)
+gsk_ngl_glyph_library_upload_glyph (GskNglGlyphLibrary *self,
+ const GskNglGlyphKey *key,
+ const GskNglGlyphValue *value,
+ int width,
+ int height,
+ double device_scale)
{
G_GNUC_UNUSED gint64 start_time = GDK_PROFILER_CURRENT_TIME;
cairo_scaled_font_t *scaled_font;
- GskGLTextureAtlas *atlas;
+ GskNglTextureAtlas *atlas;
cairo_surface_t *surface;
guchar *pixel_data;
guchar *free_data = NULL;
@@ -198,7 +198,7 @@ gsk_gl_glyph_library_upload_glyph (GskGLGlyphLibrary *self,
gsize stride;
int x, y;
- g_assert (GSK_IS_GL_GLYPH_LIBRARY (self));
+ g_assert (GSK_IS_NGL_GLYPH_LIBRARY (self));
g_assert (key != NULL);
g_assert (value != NULL);
@@ -214,10 +214,10 @@ gsk_gl_glyph_library_upload_glyph (GskGLGlyphLibrary *self,
"Uploading glyph %d",
key->glyph);
- surface = gsk_gl_glyph_library_create_surface (self, stride, width, height, device_scale);
+ surface = gsk_ngl_glyph_library_create_surface (self, stride, width, height, device_scale);
render_glyph (surface, scaled_font, key, value);
- texture_id = GSK_GL_TEXTURE_ATLAS_ENTRY_TEXTURE (value);
+ texture_id = GSK_NGL_TEXTURE_ATLAS_ENTRY_TEXTURE (value);
g_assert (texture_id > 0);
@@ -264,7 +264,7 @@ gsk_gl_glyph_library_upload_glyph (GskGLGlyphLibrary *self,
gdk_gl_context_pop_debug_group (gdk_gl_context_get_current ());
- GSK_GL_TEXTURE_LIBRARY (self)->driver->command_queue->n_uploads++;
+ GSK_NGL_TEXTURE_LIBRARY (self)->driver->command_queue->n_uploads++;
if (gdk_profiler_is_running ())
{
@@ -275,18 +275,18 @@ gsk_gl_glyph_library_upload_glyph (GskGLGlyphLibrary *self,
}
gboolean
-gsk_gl_glyph_library_add (GskGLGlyphLibrary *self,
- GskGLGlyphKey *key,
- const GskGLGlyphValue **out_value)
+gsk_ngl_glyph_library_add (GskNglGlyphLibrary *self,
+ GskNglGlyphKey *key,
+ const GskNglGlyphValue **out_value)
{
PangoRectangle ink_rect;
- GskGLGlyphValue *value;
+ GskNglGlyphValue *value;
int width;
int height;
guint packed_x;
guint packed_y;
- g_assert (GSK_IS_GL_GLYPH_LIBRARY (self));
+ g_assert (GSK_IS_NGL_GLYPH_LIBRARY (self));
g_assert (key != NULL);
g_assert (out_value != NULL);
@@ -301,25 +301,25 @@ gsk_gl_glyph_library_add (GskGLGlyphLibrary *self,
width = ink_rect.width * key->scale / 1024;
height = ink_rect.height * key->scale / 1024;
- value = gsk_gl_texture_library_pack (GSK_GL_TEXTURE_LIBRARY (self),
- key,
- sizeof *value,
- width,
- height,
- 0,
- &packed_x, &packed_y);
+ value = gsk_ngl_texture_library_pack (GSK_NGL_TEXTURE_LIBRARY (self),
+ key,
+ sizeof *value,
+ width,
+ height,
+ 0,
+ &packed_x, &packed_y);
memcpy (&value->ink_rect, &ink_rect, sizeof ink_rect);
if (key->scale > 0 && width > 0 && height > 0)
- gsk_gl_glyph_library_upload_glyph (self,
- key,
- value,
- width,
- height,
- key->scale / 1024.0);
+ gsk_ngl_glyph_library_upload_glyph (self,
+ key,
+ value,
+ width,
+ height,
+ key->scale / 1024.0);
*out_value = value;
- return GSK_GL_TEXTURE_ATLAS_ENTRY_TEXTURE (value) != 0;
+ return GSK_NGL_TEXTURE_ATLAS_ENTRY_TEXTURE (value) != 0;
}
diff --git a/gsk/ngl/gsknglglyphlibraryprivate.h b/gsk/ngl/gsknglglyphlibraryprivate.h
new file mode 100644
index 0000000000..9df9526f99
--- /dev/null
+++ b/gsk/ngl/gsknglglyphlibraryprivate.h
@@ -0,0 +1,119 @@
+/* gsknglglyphlibraryprivate.h
+ *
+ * Copyright 2020 Christian Hergert <chergert redhat com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * SPDX-License-Identifier: LGPL-2.1-or-later
+ */
+
+#ifndef __GSK_NGL_GLYPH_LIBRARY_PRIVATE_H__
+#define __GSK_NGL_GLYPH_LIBRARY_PRIVATE_H__
+
+#include <pango/pango.h>
+
+#include "gskngltexturelibraryprivate.h"
+
+G_BEGIN_DECLS
+
+#define GSK_TYPE_GL_GLYPH_LIBRARY (gsk_ngl_glyph_library_get_type())
+
+typedef struct _GskNglGlyphKey
+{
+ PangoFont *font;
+ PangoGlyph glyph;
+ guint xshift : 3;
+ guint yshift : 3;
+ guint scale : 26; /* times 1024 */
+} GskNglGlyphKey;
+
+typedef struct _GskNglGlyphValue
+{
+ GskNglTextureAtlasEntry entry;
+ PangoRectangle ink_rect;
+} GskNglGlyphValue;
+
+#if GLIB_SIZEOF_VOID_P == 8
+G_STATIC_ASSERT (sizeof (GskNglGlyphKey) == 16);
+#elif GLIB_SIZEOF_VOID_P == 4
+G_STATIC_ASSERT (sizeof (GskNglGlyphKey) == 12);
+#endif
+
+G_DECLARE_FINAL_TYPE (GskNglGlyphLibrary, gsk_ngl_glyph_library, GSK, NGL_GLYPH_LIBRARY,
GskNglTextureLibrary)
+
+struct _GskNglGlyphLibrary
+{
+ GskNglTextureLibrary parent_instance;
+ GHashTable *hash_table;
+ guint8 *surface_data;
+ gsize surface_data_len;
+ struct {
+ GskNglGlyphKey key;
+ const GskNglGlyphValue *value;
+ } front[256];
+};
+
+GskNglGlyphLibrary *gsk_ngl_glyph_library_new (GskNglDriver *driver);
+gboolean gsk_ngl_glyph_library_add (GskNglGlyphLibrary *self,
+ GskNglGlyphKey *key,
+ const GskNglGlyphValue **out_value);
+
+static inline int
+gsk_ngl_glyph_key_phase (float value)
+{
+ return floor (4 * (value + 0.125)) - 4 * floor (value + 0.125);
+}
+
+static inline void
+gsk_ngl_glyph_key_set_glyph_and_shift (GskNglGlyphKey *key,
+ PangoGlyph glyph,
+ float x,
+ float y)
+{
+ key->glyph = glyph;
+ key->xshift = gsk_ngl_glyph_key_phase (x);
+ key->yshift = gsk_ngl_glyph_key_phase (y);
+}
+
+static inline gboolean
+gsk_ngl_glyph_library_lookup_or_add (GskNglGlyphLibrary *self,
+ const GskNglGlyphKey *key,
+ const GskNglGlyphValue **out_value)
+{
+ GskNglTextureAtlasEntry *entry;
+ guint front_index = key->glyph & 0xFF;
+
+ if (memcmp (key, &self->front[front_index], sizeof *key) == 0)
+ {
+ *out_value = self->front[front_index].value;
+ }
+ else if (gsk_ngl_texture_library_lookup ((GskNglTextureLibrary *)self, key, &entry))
+ {
+ *out_value = (GskNglGlyphValue *)entry;
+ self->front[front_index].key = *key;
+ self->front[front_index].value = *out_value;
+ }
+ else
+ {
+ GskNglGlyphKey *k = g_slice_copy (sizeof *key, key);
+ g_object_ref (k->font);
+ gsk_ngl_glyph_library_add (self, k, out_value);
+ }
+
+ return GSK_NGL_TEXTURE_ATLAS_ENTRY_TEXTURE (*out_value) != 0;
+}
+
+G_END_DECLS
+
+#endif /* __GSK_NGL_GLYPH_LIBRARY_PRIVATE_H__ */
diff --git a/gsk/next/gskgliconlibrary.c b/gsk/ngl/gskngliconlibrary.c
similarity index 76%
rename from gsk/next/gskgliconlibrary.c
rename to gsk/ngl/gskngliconlibrary.c
index 05afbbe4c7..4d84cb2354 100644
--- a/gsk/next/gskgliconlibrary.c
+++ b/gsk/ngl/gskngliconlibrary.c
@@ -1,4 +1,4 @@
-/* gskgliconlibrary.c
+/* gskngliconlibrary.c
*
* Copyright 2020 Christian Hergert <chergert redhat com>
*
@@ -25,21 +25,21 @@
#include <gdk/gdkprofilerprivate.h>
#include <gdk/gdktextureprivate.h>
-#include "gskglcommandqueueprivate.h"
-#include "gskgldriverprivate.h"
-#include "gskgliconlibraryprivate.h"
+#include "gsknglcommandqueueprivate.h"
+#include "gskngldriverprivate.h"
+#include "gskngliconlibraryprivate.h"
-struct _GskGLIconLibrary
+struct _GskNglIconLibrary
{
- GskGLTextureLibrary parent_instance;
+ GskNglTextureLibrary parent_instance;
};
-G_DEFINE_TYPE (GskGLIconLibrary, gsk_gl_icon_library, GSK_TYPE_GL_TEXTURE_LIBRARY)
+G_DEFINE_TYPE (GskNglIconLibrary, gsk_ngl_icon_library, GSK_TYPE_GL_TEXTURE_LIBRARY)
-GskGLIconLibrary *
-gsk_gl_icon_library_new (GskNextDriver *driver)
+GskNglIconLibrary *
+gsk_ngl_icon_library_new (GskNglDriver *driver)
{
- g_return_val_if_fail (GSK_IS_NEXT_DRIVER (driver), NULL);
+ g_return_val_if_fail (GSK_IS_NGL_DRIVER (driver), NULL);
return g_object_new (GSK_TYPE_GL_ICON_LIBRARY,
"driver", driver,
@@ -47,36 +47,36 @@ gsk_gl_icon_library_new (GskNextDriver *driver)
}
static void
-gsk_gl_icon_data_free (gpointer data)
+gsk_ngl_icon_data_free (gpointer data)
{
- GskGLIconData *icon_data = data;
+ GskNglIconData *icon_data = data;
g_clear_object (&icon_data->source_texture);
- g_slice_free (GskGLIconData, icon_data);
+ g_slice_free (GskNglIconData, icon_data);
}
static void
-gsk_gl_icon_library_class_init (GskGLIconLibraryClass *klass)
+gsk_ngl_icon_library_class_init (GskNglIconLibraryClass *klass)
{
}
static void
-gsk_gl_icon_library_init (GskGLIconLibrary *self)
+gsk_ngl_icon_library_init (GskNglIconLibrary *self)
{
- GSK_GL_TEXTURE_LIBRARY (self)->max_entry_size = 128;
- gsk_gl_texture_library_set_funcs (GSK_GL_TEXTURE_LIBRARY (self),
- NULL, NULL, NULL,
- gsk_gl_icon_data_free);
+ GSK_NGL_TEXTURE_LIBRARY (self)->max_entry_size = 128;
+ gsk_ngl_texture_library_set_funcs (GSK_NGL_TEXTURE_LIBRARY (self),
+ NULL, NULL, NULL,
+ gsk_ngl_icon_data_free);
}
void
-gsk_gl_icon_library_add (GskGLIconLibrary *self,
- GdkTexture *key,
- const GskGLIconData **out_value)
+gsk_ngl_icon_library_add (GskNglIconLibrary *self,
+ GdkTexture *key,
+ const GskNglIconData **out_value)
{
G_GNUC_UNUSED gint64 start_time = GDK_PROFILER_CURRENT_TIME;
cairo_surface_t *surface;
- GskGLIconData *icon_data;
+ GskNglIconData *icon_data;
guint8 *pixel_data;
guint8 *surface_data;
guint8 *free_data = NULL;
@@ -88,18 +88,18 @@ gsk_gl_icon_library_add (GskGLIconLibrary *self,
int height;
guint texture_id;
- g_assert (GSK_IS_GL_ICON_LIBRARY (self));
+ g_assert (GSK_IS_NGL_ICON_LIBRARY (self));
g_assert (GDK_IS_TEXTURE (key));
g_assert (out_value != NULL);
width = key->width;
height = key->height;
- icon_data = gsk_gl_texture_library_pack (GSK_GL_TEXTURE_LIBRARY (self),
- key,
- sizeof (GskGLIconData),
- width, height, 1,
- &packed_x, &packed_y);
+ icon_data = gsk_ngl_texture_library_pack (GSK_NGL_TEXTURE_LIBRARY (self),
+ key,
+ sizeof (GskNglIconData),
+ width, height, 1,
+ &packed_x, &packed_y);
icon_data->source_texture = g_object_ref (key);
/* actually upload the texture */
@@ -125,7 +125,7 @@ gsk_gl_icon_library_add (GskGLIconLibrary *self,
gl_type = GL_UNSIGNED_INT_8_8_8_8_REV;
}
- texture_id = GSK_GL_TEXTURE_ATLAS_ENTRY_TEXTURE (icon_data);
+ texture_id = GSK_NGL_TEXTURE_ATLAS_ENTRY_TEXTURE (icon_data);
glBindTexture (GL_TEXTURE_2D, texture_id);
@@ -202,7 +202,7 @@ gsk_gl_icon_library_add (GskGLIconLibrary *self,
cairo_surface_destroy (surface);
g_free (free_data);
- GSK_GL_TEXTURE_LIBRARY (self)->driver->command_queue->n_uploads++;
+ GSK_NGL_TEXTURE_LIBRARY (self)->driver->command_queue->n_uploads++;
if (gdk_profiler_is_running ())
{
diff --git a/gsk/ngl/gskngliconlibraryprivate.h b/gsk/ngl/gskngliconlibraryprivate.h
new file mode 100644
index 0000000000..5fd1cb273d
--- /dev/null
+++ b/gsk/ngl/gskngliconlibraryprivate.h
@@ -0,0 +1,60 @@
+/* gskngliconlibraryprivate.h
+ *
+ * Copyright 2020 Christian Hergert <chergert redhat com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * SPDX-License-Identifier: LGPL-2.1-or-later
+ */
+
+#ifndef __GSK_NGL_ICON_LIBRARY_PRIVATE_H__
+#define __GSK_NGL_ICON_LIBRARY_PRIVATE_H__
+
+#include <pango/pango.h>
+
+#include "gskngltexturelibraryprivate.h"
+
+G_BEGIN_DECLS
+
+#define GSK_TYPE_GL_ICON_LIBRARY (gsk_ngl_icon_library_get_type())
+
+typedef struct _GskNglIconData
+{
+ GskNglTextureAtlasEntry entry;
+ GdkTexture *source_texture;
+} GskNglIconData;
+
+G_DECLARE_FINAL_TYPE (GskNglIconLibrary, gsk_ngl_icon_library, GSK, NGL_ICON_LIBRARY, GskNglTextureLibrary)
+
+GskNglIconLibrary *gsk_ngl_icon_library_new (GskNglDriver *driver);
+void gsk_ngl_icon_library_add (GskNglIconLibrary *self,
+ GdkTexture *key,
+ const GskNglIconData **out_value);
+
+static inline void
+gsk_ngl_icon_library_lookup_or_add (GskNglIconLibrary *self,
+ GdkTexture *key,
+ const GskNglIconData **out_value)
+{
+ GskNglTextureAtlasEntry *entry;
+
+ if G_LIKELY (gsk_ngl_texture_library_lookup ((GskNglTextureLibrary *)self, key, &entry))
+ *out_value = (GskNglIconData *)entry;
+ else
+ gsk_ngl_icon_library_add (self, key, out_value);
+}
+
+G_END_DECLS
+
+#endif /* __GSK_NGL_ICON_LIBRARY_PRIVATE_H__ */
diff --git a/gsk/next/gskglprogram.c b/gsk/ngl/gsknglprogram.c
similarity index 63%
rename from gsk/next/gskglprogram.c
rename to gsk/ngl/gsknglprogram.c
index 679a704f7a..1343eb35a4 100644
--- a/gsk/next/gskglprogram.c
+++ b/gsk/ngl/gsknglprogram.c
@@ -1,4 +1,4 @@
-/* gskglprogram.c
+/* gsknglprogram.c
*
* Copyright 2020 Christian Hergert <chergert redhat com>
*
@@ -20,20 +20,20 @@
#include "config.h"
-#include "gskglcommandqueueprivate.h"
-#include "gskglprogramprivate.h"
-#include "gskgluniformstateprivate.h"
+#include "gsknglcommandqueueprivate.h"
+#include "gsknglprogramprivate.h"
+#include "gskngluniformstateprivate.h"
-G_DEFINE_TYPE (GskGLProgram, gsk_gl_program, G_TYPE_OBJECT)
+G_DEFINE_TYPE (GskNglProgram, gsk_ngl_program, G_TYPE_OBJECT)
-GskGLProgram *
-gsk_gl_program_new (GskNextDriver *driver,
- const char *name,
- int program_id)
+GskNglProgram *
+gsk_ngl_program_new (GskNglDriver *driver,
+ const char *name,
+ int program_id)
{
- GskGLProgram *self;
+ GskNglProgram *self;
- g_return_val_if_fail (GSK_IS_NEXT_DRIVER (driver), NULL);
+ g_return_val_if_fail (GSK_IS_NGL_DRIVER (driver), NULL);
g_return_val_if_fail (program_id >= -1, NULL);
self = g_object_new (GSK_TYPE_GL_PROGRAM, NULL);
@@ -46,9 +46,9 @@ gsk_gl_program_new (GskNextDriver *driver,
}
static void
-gsk_gl_program_finalize (GObject *object)
+gsk_ngl_program_finalize (GObject *object)
{
- GskGLProgram *self = (GskGLProgram *)object;
+ GskNglProgram *self = (GskNglProgram *)object;
if (self->id >= 0)
g_warning ("Leaking GLSL program %d (%s)",
@@ -58,19 +58,19 @@ gsk_gl_program_finalize (GObject *object)
g_clear_pointer (&self->name, g_free);
g_clear_object (&self->driver);
- G_OBJECT_CLASS (gsk_gl_program_parent_class)->finalize (object);
+ G_OBJECT_CLASS (gsk_ngl_program_parent_class)->finalize (object);
}
static void
-gsk_gl_program_class_init (GskGLProgramClass *klass)
+gsk_ngl_program_class_init (GskNglProgramClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
- object_class->finalize = gsk_gl_program_finalize;
+ object_class->finalize = gsk_ngl_program_finalize;
}
static void
-gsk_gl_program_init (GskGLProgram *self)
+gsk_ngl_program_init (GskNglProgram *self)
{
self->id = -1;
@@ -79,8 +79,8 @@ gsk_gl_program_init (GskGLProgram *self)
}
/**
- * gsk_gl_program_add_uniform:
- * @self: a #GskGLProgram
+ * gsk_ngl_program_add_uniform:
+ * @self: a #GskNglProgram
* @name: the name of the uniform such as "u_source"
* @key: the identifier to use for the uniform
*
@@ -93,26 +93,26 @@ gsk_gl_program_init (GskGLProgram *self)
* program and then register each of them like:
*
* ```
- * gsk_gl_program_add_uniform (program, "u_source", UNIFORM_SOURCE);
+ * gsk_ngl_program_add_uniform (program, "u_source", UNIFORM_SOURCE);
* ```
*
* That allows you to set values for the program with something
* like the following:
*
* ```
- * gsk_gl_program_set_uniform1i (program, UNIFORM_SOURCE, 1);
+ * gsk_ngl_program_set_uniform1i (program, UNIFORM_SOURCE, 1);
* ```
*
* Returns: %TRUE if the uniform was found; otherwise %FALSE
*/
gboolean
-gsk_gl_program_add_uniform (GskGLProgram *self,
- const char *name,
- guint key)
+gsk_ngl_program_add_uniform (GskNglProgram *self,
+ const char *name,
+ guint key)
{
GLint location;
- g_return_val_if_fail (GSK_IS_GL_PROGRAM (self), FALSE);
+ g_return_val_if_fail (GSK_IS_NGL_PROGRAM (self), FALSE);
g_return_val_if_fail (name != NULL, FALSE);
g_return_val_if_fail (key < 1024, FALSE);
@@ -133,44 +133,44 @@ gsk_gl_program_add_uniform (GskGLProgram *self,
}
/**
- * gsk_gl_program_delete:
- * @self: a #GskGLProgram
+ * gsk_ngl_program_delete:
+ * @self: a #GskNglProgram
*
* Deletes the GLSL program.
*
- * You must call gsk_gl_program_use() before and
- * gsk_gl_program_unuse() after this function.
+ * You must call gsk_ngl_program_use() before and
+ * gsk_ngl_program_unuse() after this function.
*/
void
-gsk_gl_program_delete (GskGLProgram *self)
+gsk_ngl_program_delete (GskNglProgram *self)
{
- g_return_if_fail (GSK_IS_GL_PROGRAM (self));
+ g_return_if_fail (GSK_IS_NGL_PROGRAM (self));
g_return_if_fail (self->driver->command_queue != NULL);
- gsk_gl_command_queue_delete_program (self->driver->command_queue, self->id);
+ gsk_ngl_command_queue_delete_program (self->driver->command_queue, self->id);
self->id = -1;
}
/**
- * gsk_gl_program_uniforms_added:
- * @self: a #GskGLProgram
+ * gsk_ngl_program_uniforms_added:
+ * @self: a #GskNglProgram
* @has_attachments: if any uniform is for a bind/texture attachment
*
* This function should be called after all of the uniforms ahve
- * been added with gsk_gl_program_add_uniform().
+ * been added with gsk_ngl_program_add_uniform().
*
* This function will setup the uniform state so that the program
* has fast access to the data buffers without as many lookups at
* runtime for comparison data.
*/
void
-gsk_gl_program_uniforms_added (GskGLProgram *self,
- gboolean has_attachments)
+gsk_ngl_program_uniforms_added (GskNglProgram *self,
+ gboolean has_attachments)
{
- g_return_if_fail (GSK_IS_GL_PROGRAM (self));
+ g_return_if_fail (GSK_IS_NGL_PROGRAM (self));
g_return_if_fail (self->uniforms == NULL);
self->uniforms = self->driver->command_queue->uniforms;
- self->program_info = gsk_gl_uniform_state_get_program (self->uniforms, self->id, self->n_uniforms);
+ self->program_info = gsk_ngl_uniform_state_get_program (self->uniforms, self->id, self->n_uniforms);
self->program_info->has_attachments = has_attachments;
}
diff --git a/gsk/ngl/gsknglprogramprivate.h b/gsk/ngl/gsknglprogramprivate.h
new file mode 100644
index 0000000000..47bb0e314f
--- /dev/null
+++ b/gsk/ngl/gsknglprogramprivate.h
@@ -0,0 +1,273 @@
+/* gsknglprogramprivate.h
+ *
+ * Copyright 2020 Christian Hergert <chergert redhat com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * SPDX-License-Identifier: LGPL-2.1-or-later
+ */
+
+#ifndef __GSK_NGL_PROGRAM_PRIVATE_H__
+#define __GSK_NGL_PROGRAM_PRIVATE_H__
+
+#include "gskngltypesprivate.h"
+
+#include "gsknglcommandqueueprivate.h"
+#include "gskngldriverprivate.h"
+
+G_BEGIN_DECLS
+
+#define GSK_TYPE_GL_PROGRAM (gsk_ngl_program_get_type())
+
+G_DECLARE_FINAL_TYPE (GskNglProgram, gsk_ngl_program, GSK, NGL_PROGRAM, GObject)
+
+struct _GskNglProgram
+{
+ GObject parent_instance;
+
+ int id;
+ char *name;
+ GskNglDriver *driver;
+
+ /* In reality, this is the largest uniform position
+ * as returned after linking so that we can use direct
+ * indexes based on location.
+ */
+ guint n_uniforms;
+
+ /* Cached pointer to avoid lots of pointer chasing/lookups */
+ GskNglUniformState *uniforms;
+ GskNglUniformProgram *program_info;
+
+ /* For custom programs */
+ int texture_locations[4];
+ int args_locations[8];
+ int size_location;
+
+ /* Static array for key->location transforms */
+ int uniform_locations[32];
+};
+
+GskNglProgram *gsk_ngl_program_new (GskNglDriver *driver,
+ const char *name,
+ int program_id);
+gboolean gsk_ngl_program_add_uniform (GskNglProgram *self,
+ const char *name,
+ guint key);
+void gsk_ngl_program_uniforms_added (GskNglProgram *self,
+ gboolean has_attachments);
+void gsk_ngl_program_delete (GskNglProgram *self);
+
+#define gsk_ngl_program_get_uniform_location(s,k) ((s)->uniform_locations[(k)])
+
+static inline void
+gsk_ngl_program_set_uniform1fv (GskNglProgram *self,
+ guint key,
+ guint stamp,
+ guint count,
+ const float *values)
+{
+ gsk_ngl_uniform_state_set1fv (self->uniforms, self->program_info,
+ gsk_ngl_program_get_uniform_location (self, key),
+ stamp, count, values);
+}
+
+static inline void
+gsk_ngl_program_set_uniform2fv (GskNglProgram *self,
+ guint key,
+ guint stamp,
+ guint count,
+ const float *values)
+{
+ gsk_ngl_uniform_state_set2fv (self->uniforms, self->program_info,
+ gsk_ngl_program_get_uniform_location (self, key),
+ stamp, count, values);
+}
+
+static inline void
+gsk_ngl_program_set_uniform4fv (GskNglProgram *self,
+ guint key,
+ guint stamp,
+ guint count,
+ const float *values)
+{
+ gsk_ngl_uniform_state_set4fv (self->uniforms, self->program_info,
+ gsk_ngl_program_get_uniform_location (self, key),
+ stamp, count, values);
+}
+
+static inline void
+gsk_ngl_program_set_uniform_rounded_rect (GskNglProgram *self,
+ guint key,
+ guint stamp,
+ const GskRoundedRect *rounded_rect)
+{
+ gsk_ngl_uniform_state_set_rounded_rect (self->uniforms, self->program_info,
+ gsk_ngl_program_get_uniform_location (self, key),
+ stamp, rounded_rect);
+}
+
+static inline void
+gsk_ngl_program_set_uniform1i (GskNglProgram *self,
+ guint key,
+ guint stamp,
+ int value0)
+{
+ gsk_ngl_uniform_state_set1i (self->uniforms,
+ self->program_info,
+ gsk_ngl_program_get_uniform_location (self, key),
+ stamp, value0);
+}
+
+static inline void
+gsk_ngl_program_set_uniform2i (GskNglProgram *self,
+ guint key,
+ guint stamp,
+ int value0,
+ int value1)
+{
+ gsk_ngl_uniform_state_set2i (self->uniforms,
+ self->program_info,
+ gsk_ngl_program_get_uniform_location (self, key),
+ stamp, value0, value1);
+}
+
+static inline void
+gsk_ngl_program_set_uniform3i (GskNglProgram *self,
+ guint key,
+ guint stamp,
+ int value0,
+ int value1,
+ int value2)
+{
+ gsk_ngl_uniform_state_set3i (self->uniforms,
+ self->program_info,
+ gsk_ngl_program_get_uniform_location (self, key),
+ stamp, value0, value1, value2);
+}
+
+static inline void
+gsk_ngl_program_set_uniform4i (GskNglProgram *self,
+ guint key,
+ guint stamp,
+ int value0,
+ int value1,
+ int value2,
+ int value3)
+{
+ gsk_ngl_uniform_state_set4i (self->uniforms,
+ self->program_info,
+ gsk_ngl_program_get_uniform_location (self, key),
+ stamp, value0, value1, value2, value3);
+}
+
+static inline void
+gsk_ngl_program_set_uniform1f (GskNglProgram *self,
+ guint key,
+ guint stamp,
+ float value0)
+{
+ gsk_ngl_uniform_state_set1f (self->uniforms,
+ self->program_info,
+ gsk_ngl_program_get_uniform_location (self, key),
+ stamp, value0);
+}
+
+static inline void
+gsk_ngl_program_set_uniform2f (GskNglProgram *self,
+ guint key,
+ guint stamp,
+ float value0,
+ float value1)
+{
+ gsk_ngl_uniform_state_set2f (self->uniforms,
+ self->program_info,
+ gsk_ngl_program_get_uniform_location (self, key),
+ stamp, value0, value1);
+}
+
+static inline void
+gsk_ngl_program_set_uniform3f (GskNglProgram *self,
+ guint key,
+ guint stamp,
+ float value0,
+ float value1,
+ float value2)
+{
+ gsk_ngl_uniform_state_set3f (self->uniforms,
+ self->program_info,
+ gsk_ngl_program_get_uniform_location (self, key),
+ stamp, value0, value1, value2);
+}
+
+static inline void
+gsk_ngl_program_set_uniform4f (GskNglProgram *self,
+ guint key,
+ guint stamp,
+ float value0,
+ float value1,
+ float value2,
+ float value3)
+{
+ gsk_ngl_uniform_state_set4f (self->uniforms,
+ self->program_info,
+ gsk_ngl_program_get_uniform_location (self, key),
+ stamp, value0, value1, value2, value3);
+}
+
+static inline void
+gsk_ngl_program_set_uniform_color (GskNglProgram *self,
+ guint key,
+ guint stamp,
+ const GdkRGBA *color)
+{
+ gsk_ngl_uniform_state_set_color (self->uniforms,
+ self->program_info,
+ gsk_ngl_program_get_uniform_location (self, key),
+ stamp, color);
+}
+
+static inline void
+gsk_ngl_program_set_uniform_texture (GskNglProgram *self,
+ guint key,
+ guint stamp,
+ GLenum texture_target,
+ GLenum texture_slot,
+ guint texture_id)
+{
+ gsk_ngl_attachment_state_bind_texture (self->driver->command_queue->attachments,
+ texture_target,
+ texture_slot,
+ texture_id);
+ gsk_ngl_uniform_state_set_texture (self->uniforms,
+ self->program_info,
+ gsk_ngl_program_get_uniform_location (self, key),
+ stamp, texture_slot);
+}
+
+static inline void
+gsk_ngl_program_set_uniform_matrix (GskNglProgram *self,
+ guint key,
+ guint stamp,
+ const graphene_matrix_t *matrix)
+{
+ gsk_ngl_uniform_state_set_matrix (self->uniforms,
+ self->program_info,
+ gsk_ngl_program_get_uniform_location (self, key),
+ stamp, matrix);
+}
+
+G_END_DECLS
+
+#endif /* __GSK_NGL_PROGRAM_PRIVATE_H__ */
diff --git a/gsk/ngl/gsknglprograms.defs b/gsk/ngl/gsknglprograms.defs
new file mode 100644
index 0000000000..b0b797f0e9
--- /dev/null
+++ b/gsk/ngl/gsknglprograms.defs
@@ -0,0 +1,83 @@
+GSK_NGL_DEFINE_PROGRAM (blend,
+ "/org/gtk/libgsk/glsl/blend.glsl",
+ GSK_NGL_ADD_UNIFORM (1, BLEND_SOURCE2, u_source2)
+ GSK_NGL_ADD_UNIFORM (2, BLEND_MODE, u_mode))
+
+GSK_NGL_DEFINE_PROGRAM (blit,
+ "/org/gtk/libgsk/glsl/blit.glsl",
+ GSK_NGL_NO_UNIFORMS)
+
+GSK_NGL_DEFINE_PROGRAM (blur,
+ "/org/gtk/libgsk/glsl/blur.glsl",
+ GSK_NGL_ADD_UNIFORM (1, BLUR_RADIUS, u_blur_radius)
+ GSK_NGL_ADD_UNIFORM (2, BLUR_SIZE, u_blur_size)
+ GSK_NGL_ADD_UNIFORM (3, BLUR_DIR, u_blur_dir))
+
+GSK_NGL_DEFINE_PROGRAM (border,
+ "/org/gtk/libgsk/glsl/border.glsl",
+ GSK_NGL_ADD_UNIFORM (1, BORDER_COLOR, u_color)
+ GSK_NGL_ADD_UNIFORM (2, BORDER_WIDTHS, u_widths)
+ GSK_NGL_ADD_UNIFORM (3, BORDER_OUTLINE_RECT, u_outline_rect))
+
+GSK_NGL_DEFINE_PROGRAM (color,
+ "/org/gtk/libgsk/glsl/color.glsl",
+ GSK_NGL_ADD_UNIFORM (1, COLOR_COLOR, u_color))
+
+GSK_NGL_DEFINE_PROGRAM (coloring,
+ "/org/gtk/libgsk/glsl/coloring.glsl",
+ GSK_NGL_ADD_UNIFORM (1, COLORING_COLOR, u_color))
+
+GSK_NGL_DEFINE_PROGRAM (color_matrix,
+ "/org/gtk/libgsk/glsl/color_matrix.glsl",
+ GSK_NGL_ADD_UNIFORM (1, COLOR_MATRIX_COLOR_MATRIX, u_color_matrix)
+ GSK_NGL_ADD_UNIFORM (2, COLOR_MATRIX_COLOR_OFFSET, u_color_offset))
+
+GSK_NGL_DEFINE_PROGRAM (conic_gradient,
+ "/org/gtk/libgsk/glsl/conic_gradient.glsl",
+ GSK_NGL_ADD_UNIFORM (1, CONIC_GRADIENT_COLOR_STOPS, u_color_stops)
+ GSK_NGL_ADD_UNIFORM (2, CONIC_GRADIENT_NUM_COLOR_STOPS, u_num_color_stops)
+ GSK_NGL_ADD_UNIFORM (3, CONIC_GRADIENT_GEOMETRY, u_geometry))
+
+GSK_NGL_DEFINE_PROGRAM (cross_fade,
+ "/org/gtk/libgsk/glsl/cross_fade.glsl",
+ GSK_NGL_ADD_UNIFORM (1, CROSS_FADE_PROGRESS, u_progress)
+ GSK_NGL_ADD_UNIFORM (2, CROSS_FADE_SOURCE2, u_source2))
+
+GSK_NGL_DEFINE_PROGRAM (inset_shadow,
+ "/org/gtk/libgsk/glsl/inset_shadow.glsl",
+ GSK_NGL_ADD_UNIFORM (1, INSET_SHADOW_COLOR, u_color)
+ GSK_NGL_ADD_UNIFORM (2, INSET_SHADOW_SPREAD, u_spread)
+ GSK_NGL_ADD_UNIFORM (3, INSET_SHADOW_OFFSET, u_offset)
+ GSK_NGL_ADD_UNIFORM (4, INSET_SHADOW_OUTLINE_RECT, u_outline_rect))
+
+GSK_NGL_DEFINE_PROGRAM (linear_gradient,
+ "/org/gtk/libgsk/glsl/linear_gradient.glsl",
+ GSK_NGL_ADD_UNIFORM (1, LINEAR_GRADIENT_COLOR_STOPS, u_color_stops)
+ GSK_NGL_ADD_UNIFORM (2, LINEAR_GRADIENT_NUM_COLOR_STOPS, u_num_color_stops)
+ GSK_NGL_ADD_UNIFORM (3, LINEAR_GRADIENT_POINTS, u_points)
+ GSK_NGL_ADD_UNIFORM (4, LINEAR_GRADIENT_REPEAT, u_repeat))
+
+GSK_NGL_DEFINE_PROGRAM (outset_shadow,
+ "/org/gtk/libgsk/glsl/outset_shadow.glsl",
+ GSK_NGL_ADD_UNIFORM (1, OUTSET_SHADOW_COLOR, u_color)
+ GSK_NGL_ADD_UNIFORM (2, OUTSET_SHADOW_OUTLINE_RECT, u_outline_rect))
+
+GSK_NGL_DEFINE_PROGRAM (radial_gradient,
+ "/org/gtk/libgsk/glsl/radial_gradient.glsl",
+ GSK_NGL_ADD_UNIFORM (1, RADIAL_GRADIENT_COLOR_STOPS, u_color_stops)
+ GSK_NGL_ADD_UNIFORM (2, RADIAL_GRADIENT_NUM_COLOR_STOPS, u_num_color_stops)
+ GSK_NGL_ADD_UNIFORM (3, RADIAL_GRADIENT_REPEAT, u_repeat)
+ GSK_NGL_ADD_UNIFORM (4, RADIAL_GRADIENT_RANGE, u_range)
+ GSK_NGL_ADD_UNIFORM (5, RADIAL_GRADIENT_GEOMETRY, u_geometry))
+
+GSK_NGL_DEFINE_PROGRAM (repeat,
+ "/org/gtk/libgsk/glsl/repeat.glsl",
+ GSK_NGL_ADD_UNIFORM (1, REPEAT_CHILD_BOUNDS, u_child_bounds)
+ GSK_NGL_ADD_UNIFORM (2, REPEAT_TEXTURE_RECT, u_texture_rect))
+
+GSK_NGL_DEFINE_PROGRAM (unblurred_outset_shadow,
+ "/org/gtk/libgsk/glsl/unblurred_outset_shadow.glsl",
+ GSK_NGL_ADD_UNIFORM (1, UNBLURRED_OUTSET_SHADOW_COLOR, u_color)
+ GSK_NGL_ADD_UNIFORM (2, UNBLURRED_OUTSET_SHADOW_SPREAD, u_spread)
+ GSK_NGL_ADD_UNIFORM (3, UNBLURRED_OUTSET_SHADOW_OFFSET, u_offset)
+ GSK_NGL_ADD_UNIFORM (4, UNBLURRED_OUTSET_SHADOW_OUTLINE_RECT, u_outline_rect))
diff --git a/gsk/next/gskglrenderer.c b/gsk/ngl/gsknglrenderer.c
similarity index 59%
rename from gsk/next/gskglrenderer.c
rename to gsk/ngl/gsknglrenderer.c
index d082ffb733..c20660f09e 100644
--- a/gsk/next/gskglrenderer.c
+++ b/gsk/ngl/gsknglrenderer.c
@@ -1,4 +1,4 @@
-/* gskglrenderer.c
+/* gsknglrenderer.c
*
* Copyright 2020 Christian Hergert <chergert redhat com>
*
@@ -25,18 +25,18 @@
#include <gsk/gskdebugprivate.h>
#include <gsk/gskrendererprivate.h>
-#include "gskglcommandqueueprivate.h"
-#include "gskgldriverprivate.h"
-#include "gskglprogramprivate.h"
-#include "gskglrenderjobprivate.h"
-#include "gskglrendererprivate.h"
+#include "gsknglcommandqueueprivate.h"
+#include "gskngldriverprivate.h"
+#include "gsknglprogramprivate.h"
+#include "gsknglrenderjobprivate.h"
+#include "gsknglrendererprivate.h"
-struct _GskNextRendererClass
+struct _GskNglRendererClass
{
GskRendererClass parent_class;
};
-struct _GskNextRenderer
+struct _GskNglRenderer
{
GskRenderer parent_instance;
@@ -52,37 +52,37 @@ struct _GskNextRenderer
* contexts from other renderers on the display, texture atlases,
* programs, and other objects are available to them all.
*/
- GskGLCommandQueue *command_queue;
+ GskNglCommandQueue *command_queue;
/* The driver manages our program state and command queues. It also
* deals with caching textures, shaders, shadows, glyph, and icon
* caches through various helpers.
*/
- GskNextDriver *driver;
+ GskNglDriver *driver;
};
-G_DEFINE_TYPE (GskNextRenderer, gsk_next_renderer, GSK_TYPE_RENDERER)
+G_DEFINE_TYPE (GskNglRenderer, gsk_ngl_renderer, GSK_TYPE_RENDERER)
GskRenderer *
-gsk_next_renderer_new (void)
+gsk_ngl_renderer_new (void)
{
- return g_object_new (GSK_TYPE_NEXT_RENDERER, NULL);
+ return g_object_new (GSK_TYPE_NGL_RENDERER, NULL);
}
static gboolean
-gsk_next_renderer_realize (GskRenderer *renderer,
- GdkSurface *surface,
- GError **error)
+gsk_ngl_renderer_realize (GskRenderer *renderer,
+ GdkSurface *surface,
+ GError **error)
{
G_GNUC_UNUSED gint64 start_time = GDK_PROFILER_CURRENT_TIME;
- GskNextRenderer *self = (GskNextRenderer *)renderer;
+ GskNglRenderer *self = (GskNglRenderer *)renderer;
GdkGLContext *context = NULL;
GdkGLContext *shared_context;
- GskNextDriver *driver = NULL;
+ GskNglDriver *driver = NULL;
gboolean ret = FALSE;
gboolean debug_shaders = FALSE;
- g_assert (GSK_IS_NEXT_RENDERER (self));
+ g_assert (GSK_IS_NGL_RENDERER (self));
g_assert (GDK_IS_SURFACE (surface));
if (self->context != NULL)
@@ -110,15 +110,15 @@ gsk_next_renderer_realize (GskRenderer *renderer,
debug_shaders = TRUE;
#endif
- if (!(driver = gsk_next_driver_from_shared_context (shared_context, debug_shaders, error)))
+ if (!(driver = gsk_ngl_driver_from_shared_context (shared_context, debug_shaders, error)))
goto failure;
- self->command_queue = gsk_next_driver_create_command_queue (driver, context);
+ self->command_queue = gsk_ngl_driver_create_command_queue (driver, context);
self->context = g_steal_pointer (&context);
self->driver = g_steal_pointer (&driver);
- gsk_gl_command_queue_set_profiler (self->command_queue,
- gsk_renderer_get_profiler (renderer));
+ gsk_ngl_command_queue_set_profiler (self->command_queue,
+ gsk_renderer_get_profiler (renderer));
ret = TRUE;
@@ -126,17 +126,17 @@ failure:
g_clear_object (&driver);
g_clear_object (&context);
- gdk_profiler_end_mark (start_time, "GskNextRenderer realize", NULL);
+ gdk_profiler_end_mark (start_time, "GskNglRenderer realize", NULL);
return ret;
}
static void
-gsk_next_renderer_unrealize (GskRenderer *renderer)
+gsk_ngl_renderer_unrealize (GskRenderer *renderer)
{
- GskNextRenderer *self = (GskNextRenderer *)renderer;
+ GskNglRenderer *self = (GskNglRenderer *)renderer;
- g_assert (GSK_IS_NEXT_RENDERER (renderer));
+ g_assert (GSK_IS_NGL_RENDERER (renderer));
g_clear_object (&self->driver);
g_clear_object (&self->context);
@@ -177,18 +177,18 @@ get_render_region (GdkSurface *surface,
}
static void
-gsk_next_renderer_render (GskRenderer *renderer,
- GskRenderNode *root,
- const cairo_region_t *update_area)
+gsk_ngl_renderer_render (GskRenderer *renderer,
+ GskRenderNode *root,
+ const cairo_region_t *update_area)
{
- GskNextRenderer *self = (GskNextRenderer *)renderer;
+ GskNglRenderer *self = (GskNglRenderer *)renderer;
cairo_region_t *render_region;
graphene_rect_t viewport;
- GskGLRenderJob *job;
+ GskNglRenderJob *job;
GdkSurface *surface;
float scale_factor;
- g_assert (GSK_IS_NEXT_RENDERER (renderer));
+ g_assert (GSK_IS_NGL_RENDERER (renderer));
g_assert (root != NULL);
surface = gdk_draw_context_get_surface (GDK_DRAW_CONTEXT (self->context));
@@ -205,108 +205,108 @@ gsk_next_renderer_render (GskRenderer *renderer,
/* Must be called *AFTER* gdk_draw_context_begin_frame() */
render_region = get_render_region (surface, self->context);
- gsk_next_driver_begin_frame (self->driver, self->command_queue);
- job = gsk_gl_render_job_new (self->driver, &viewport, scale_factor, render_region, 0);
+ gsk_ngl_driver_begin_frame (self->driver, self->command_queue);
+ job = gsk_ngl_render_job_new (self->driver, &viewport, scale_factor, render_region, 0);
#ifdef G_ENABLE_DEBUG
if (GSK_RENDERER_DEBUG_CHECK (GSK_RENDERER (self), FALLBACK))
- gsk_gl_render_job_set_debug_fallback (job, TRUE);
+ gsk_ngl_render_job_set_debug_fallback (job, TRUE);
#endif
- gsk_gl_render_job_render (job, root);
- gsk_next_driver_end_frame (self->driver);
- gsk_gl_render_job_free (job);
+ gsk_ngl_render_job_render (job, root);
+ gsk_ngl_driver_end_frame (self->driver);
+ gsk_ngl_render_job_free (job);
gdk_gl_context_make_current (self->context);
gdk_draw_context_end_frame (GDK_DRAW_CONTEXT (self->context));
- gsk_next_driver_after_frame (self->driver);
+ gsk_ngl_driver_after_frame (self->driver);
cairo_region_destroy (render_region);
}
static GdkTexture *
-gsk_next_renderer_render_texture (GskRenderer *renderer,
- GskRenderNode *root,
- const graphene_rect_t *viewport)
+gsk_ngl_renderer_render_texture (GskRenderer *renderer,
+ GskRenderNode *root,
+ const graphene_rect_t *viewport)
{
- GskNextRenderer *self = (GskNextRenderer *)renderer;
- GskGLRenderTarget *render_target;
- GskGLRenderJob *job;
+ GskNglRenderer *self = (GskNglRenderer *)renderer;
+ GskNglRenderTarget *render_target;
+ GskNglRenderJob *job;
GdkTexture *texture = NULL;
guint texture_id;
int width;
int height;
- g_assert (GSK_IS_NEXT_RENDERER (renderer));
+ g_assert (GSK_IS_NGL_RENDERER (renderer));
g_assert (root != NULL);
width = ceilf (viewport->size.width);
height = ceilf (viewport->size.height);
- if (gsk_next_driver_create_render_target (self->driver,
- width, height,
- GL_NEAREST, GL_NEAREST,
- &render_target))
+ if (gsk_ngl_driver_create_render_target (self->driver,
+ width, height,
+ GL_NEAREST, GL_NEAREST,
+ &render_target))
{
- gsk_next_driver_begin_frame (self->driver, self->command_queue);
- job = gsk_gl_render_job_new (self->driver, viewport, 1, NULL, render_target->framebuffer_id);
+ gsk_ngl_driver_begin_frame (self->driver, self->command_queue);
+ job = gsk_ngl_render_job_new (self->driver, viewport, 1, NULL, render_target->framebuffer_id);
#ifdef G_ENABLE_DEBUG
if (GSK_RENDERER_DEBUG_CHECK (GSK_RENDERER (self), FALLBACK))
- gsk_gl_render_job_set_debug_fallback (job, TRUE);
+ gsk_ngl_render_job_set_debug_fallback (job, TRUE);
#endif
- gsk_gl_render_job_render_flipped (job, root);
- texture_id = gsk_next_driver_release_render_target (self->driver, render_target, FALSE);
- texture = gsk_next_driver_create_gdk_texture (self->driver, texture_id);
- gsk_next_driver_end_frame (self->driver);
- gsk_gl_render_job_free (job);
+ gsk_ngl_render_job_render_flipped (job, root);
+ texture_id = gsk_ngl_driver_release_render_target (self->driver, render_target, FALSE);
+ texture = gsk_ngl_driver_create_gdk_texture (self->driver, texture_id);
+ gsk_ngl_driver_end_frame (self->driver);
+ gsk_ngl_render_job_free (job);
- gsk_next_driver_after_frame (self->driver);
+ gsk_ngl_driver_after_frame (self->driver);
}
return g_steal_pointer (&texture);
}
static void
-gsk_next_renderer_dispose (GObject *object)
+gsk_ngl_renderer_dispose (GObject *object)
{
#ifdef G_ENABLE_DEBUG
- GskNextRenderer *self = (GskNextRenderer *)object;
+ GskNglRenderer *self = (GskNglRenderer *)object;
g_assert (self->driver == NULL);
#endif
- G_OBJECT_CLASS (gsk_next_renderer_parent_class)->dispose (object);
+ G_OBJECT_CLASS (gsk_ngl_renderer_parent_class)->dispose (object);
}
static void
-gsk_next_renderer_class_init (GskNextRendererClass *klass)
+gsk_ngl_renderer_class_init (GskNglRendererClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
GskRendererClass *renderer_class = GSK_RENDERER_CLASS (klass);
- object_class->dispose = gsk_next_renderer_dispose;
+ object_class->dispose = gsk_ngl_renderer_dispose;
- renderer_class->realize = gsk_next_renderer_realize;
- renderer_class->unrealize = gsk_next_renderer_unrealize;
- renderer_class->render = gsk_next_renderer_render;
- renderer_class->render_texture = gsk_next_renderer_render_texture;
+ renderer_class->realize = gsk_ngl_renderer_realize;
+ renderer_class->unrealize = gsk_ngl_renderer_unrealize;
+ renderer_class->render = gsk_ngl_renderer_render;
+ renderer_class->render_texture = gsk_ngl_renderer_render_texture;
}
static void
-gsk_next_renderer_init (GskNextRenderer *self)
+gsk_ngl_renderer_init (GskNglRenderer *self)
{
}
gboolean
-gsk_next_renderer_try_compile_gl_shader (GskNextRenderer *renderer,
- GskGLShader *shader,
- GError **error)
+gsk_ngl_renderer_try_compile_gl_shader (GskNglRenderer *renderer,
+ GskGLShader *shader,
+ GError **error)
{
- GskGLProgram *program;
+ GskNglProgram *program;
- g_return_val_if_fail (GSK_IS_NEXT_RENDERER (renderer), FALSE);
+ g_return_val_if_fail (GSK_IS_NGL_RENDERER (renderer), FALSE);
g_return_val_if_fail (shader != NULL, FALSE);
- program = gsk_next_driver_lookup_shader (renderer->driver, shader, error);
+ program = gsk_ngl_driver_lookup_shader (renderer->driver, shader, error);
return program != NULL;
}
diff --git a/gsk/ngl/gsknglrenderer.h b/gsk/ngl/gsknglrenderer.h
new file mode 100644
index 0000000000..014c7755c8
--- /dev/null
+++ b/gsk/ngl/gsknglrenderer.h
@@ -0,0 +1,46 @@
+/* gsknglrenderer.h
+ *
+ * Copyright 2020 Christian Hergert <chergert redhat com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * SPDX-License-Identifier: LGPL-2.1-or-later
+ */
+
+#ifndef __GSK_NGL_RENDERER_H__
+#define __GSK_NGL_RENDERER_H__
+
+#include <gsk/gskrenderer.h>
+
+G_BEGIN_DECLS
+
+#define GSK_TYPE_NGL_RENDERER (gsk_ngl_renderer_get_type())
+
+#define GSK_NGL_RENDERER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GSK_TYPE_NGL_RENDERER,
GskNglRenderer))
+#define GSK_IS_NGL_RENDERER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GSK_TYPE_NGL_RENDERER))
+#define GSK_NGL_RENDERER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GSK_TYPE_NGL_RENDERER,
GskNglRendererClass))
+#define GSK_IS_NGL_RENDERER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GSK_TYPE_NGL_RENDERER))
+#define GSK_NGL_RENDERER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GSK_TYPE_NGL_RENDERER,
GskNglRendererClass))
+
+typedef struct _GskNglRenderer GskNglRenderer;
+typedef struct _GskNglRendererClass GskNglRendererClass;
+
+GDK_AVAILABLE_IN_ALL
+GType gsk_ngl_renderer_get_type (void) G_GNUC_CONST;
+GDK_AVAILABLE_IN_ALL
+GskRenderer *gsk_ngl_renderer_new (void);
+
+G_END_DECLS
+
+#endif /* __GSK_NGL_RENDERER__ */
diff --git a/gsk/next/gskglrendererprivate.h b/gsk/ngl/gsknglrendererprivate.h
similarity index 66%
rename from gsk/next/gskglrendererprivate.h
rename to gsk/ngl/gsknglrendererprivate.h
index fc8ad12236..a0a861f0aa 100644
--- a/gsk/next/gskglrendererprivate.h
+++ b/gsk/ngl/gsknglrendererprivate.h
@@ -1,4 +1,4 @@
-/* gskglrendererprivate.h
+/* gsknglrendererprivate.h
*
* Copyright 2021 Christian Hergert <chergert redhat com>
*
@@ -18,17 +18,17 @@
* SPDX-License-Identifier: LGPL-2.1-or-later
*/
-#ifndef __GSK_NEXT_RENDERER_PRIVATE_H__
-#define __GSK_NEXT_RENDERER_PRIVATE_H__
+#ifndef __GSK_NGL_RENDERER_PRIVATE_H__
+#define __GSK_NGL_RENDERER_PRIVATE_H__
-#include "gskglrenderer.h"
+#include "gsknglrenderer.h"
G_BEGIN_DECLS
-gboolean gsk_next_renderer_try_compile_gl_shader (GskNextRenderer *renderer,
- GskGLShader *shader,
- GError **error);
+gboolean gsk_ngl_renderer_try_compile_gl_shader (GskNglRenderer *renderer,
+ GskGLShader *shader,
+ GError **error);
G_END_DECLS
-#endif /* __GSK_NEXT_RENDERER_PRIVATE_H__ */
+#endif /* __GSK_NGL_RENDERER_PRIVATE_H__ */
diff --git a/gsk/next/gskglrenderjob.c b/gsk/ngl/gsknglrenderjob.c
similarity index 57%
rename from gsk/next/gskglrenderjob.c
rename to gsk/ngl/gsknglrenderjob.c
index bfba8a7a7b..b8f983f862 100644
--- a/gsk/next/gskglrenderjob.c
+++ b/gsk/ngl/gsknglrenderjob.c
@@ -1,4 +1,4 @@
-/* gskglrenderjob.c
+/* gsknglrenderjob.c
*
* Copyright 2017 Timm Bäder <mail baedert org>
* Copyright 2018 Matthias Clasen <mclasen redhat com>
@@ -34,13 +34,13 @@
#include <math.h>
#include <string.h>
-#include "gskglcommandqueueprivate.h"
-#include "gskgldriverprivate.h"
-#include "gskglglyphlibraryprivate.h"
-#include "gskgliconlibraryprivate.h"
-#include "gskglprogramprivate.h"
-#include "gskglrenderjobprivate.h"
-#include "gskglshadowlibraryprivate.h"
+#include "gsknglcommandqueueprivate.h"
+#include "gskngldriverprivate.h"
+#include "gsknglglyphlibraryprivate.h"
+#include "gskngliconlibraryprivate.h"
+#include "gsknglprogramprivate.h"
+#include "gsknglrenderjobprivate.h"
+#include "gsknglshadowlibraryprivate.h"
#include "ninesliceprivate.h"
@@ -50,7 +50,7 @@
#define SHADOW_EXTRA_SIZE 4
/* Make sure gradient stops fits in packed array_count */
-G_STATIC_ASSERT ((MAX_GRADIENT_STOPS * 5) < (1 << GSK_GL_UNIFORM_ARRAY_BITS));
+G_STATIC_ASSERT ((MAX_GRADIENT_STOPS * 5) < (1 << GSK_NGL_UNIFORM_ARRAY_BITS));
#define rounded_rect_top_left(r) \
(GRAPHENE_RECT_INIT(r->bounds.origin.x, \
@@ -76,13 +76,13 @@ G_STATIC_ASSERT ((MAX_GRADIENT_STOPS * 5) < (1 << GSK_GL_UNIFORM_ARRAY_BITS));
#define ALPHA_IS_CLEAR(alpha) ((alpha) < ((float) 0x00ff / (float) 0xffff))
#define RGBA_IS_CLEAR(rgba) ALPHA_IS_CLEAR((rgba)->alpha)
-typedef struct _GskGLRenderClip
+typedef struct _GskNglRenderClip
{
GskRoundedRect rect;
guint is_rectilinear : 1;
-} GskGLRenderClip;
+} GskNglRenderClip;
-typedef struct _GskGLRenderModelview
+typedef struct _GskNglRenderModelview
{
GskTransform *transform;
float scale_x;
@@ -90,25 +90,25 @@ typedef struct _GskGLRenderModelview
float offset_x_before;
float offset_y_before;
graphene_matrix_t matrix;
-} GskGLRenderModelview;
+} GskNglRenderModelview;
-struct _GskGLRenderJob
+struct _GskNglRenderJob
{
/* The context containing the framebuffer we are drawing to. Generally this
* is the context of the surface but may be a shared context if rendering to
- * an offscreen texture such as gsk_gl_renderer_render_texture().
+ * an offscreen texture such as gsk_ngl_renderer_render_texture().
*/
GdkGLContext *context;
/* The driver to be used. This is shared among all the renderers on a given
* GdkDisplay and uses the shared GL context to send commands.
*/
- GskNextDriver *driver;
+ GskNglDriver *driver;
/* The command queue (which is just a faster pointer to the driver's
* command queue.
*/
- GskGLCommandQueue *command_queue;
+ GskNglCommandQueue *command_queue;
/* The region that we are clipping. Normalized to a single rectangle region. */
cairo_region_t *region;
@@ -128,12 +128,12 @@ struct _GskGLRenderJob
/* The current projection, updated as we process nodes */
graphene_matrix_t projection;
- /* An array of GskGLRenderModelview updated as nodes are processed. The
+ /* An array of GskNglRenderModelview updated as nodes are processed. The
* current modelview is the last element.
*/
GArray *modelview;
- /* An array of GskGLRenderClip updated as nodes are processed. The
+ /* An array of GskNglRenderClip updated as nodes are processed. The
* current clip is the last element.
*/
GArray *clip;
@@ -152,14 +152,14 @@ struct _GskGLRenderJob
float scale_y;
/* Cached pointers */
- const GskGLRenderClip *current_clip;
- const GskGLRenderModelview *current_modelview;
+ const GskNglRenderClip *current_clip;
+ const GskNglRenderModelview *current_modelview;
/* If we should be rendering red zones over fallback nodes */
guint debug_fallback : 1;
};
-typedef struct _GskGLRenderOffscreen
+typedef struct _GskNglRenderOffscreen
{
const graphene_rect_t *bounds;
struct {
@@ -174,16 +174,16 @@ typedef struct _GskGLRenderOffscreen
guint do_not_cache : 1;
guint linear_filter : 1;
guint was_offscreen : 1;
-} GskGLRenderOffscreen;
+} GskNglRenderOffscreen;
-static void gsk_gl_render_job_visit_node (GskGLRenderJob *job,
- const GskRenderNode *node);
-static gboolean gsk_gl_render_job_visit_node_with_offscreen (GskGLRenderJob *job,
- const GskRenderNode *node,
- GskGLRenderOffscreen *offscreen);
+static void gsk_ngl_render_job_visit_node (GskNglRenderJob *job,
+ const GskRenderNode *node);
+static gboolean gsk_ngl_render_job_visit_node_with_offscreen (GskNglRenderJob *job,
+ const GskRenderNode *node,
+ GskNglRenderOffscreen *offscreen);
static inline void
-init_full_texture_region (GskGLRenderOffscreen *offscreen)
+init_full_texture_region (GskNglRenderOffscreen *offscreen)
{
offscreen->area.x = 0;
offscreen->area.y = 0;
@@ -379,8 +379,8 @@ init_projection_matrix (graphene_matrix_t *projection,
}
static inline float
-gsk_gl_render_job_set_alpha (GskGLRenderJob *job,
- float alpha)
+gsk_ngl_render_job_set_alpha (GskNglRenderJob *job,
+ float alpha)
{
if (job->alpha != alpha)
{
@@ -394,7 +394,7 @@ gsk_gl_render_job_set_alpha (GskGLRenderJob *job,
}
static void
-extract_matrix_metadata (GskGLRenderModelview *modelview)
+extract_matrix_metadata (GskNglRenderModelview *modelview)
{
float dummy;
graphene_matrix_t m;
@@ -446,10 +446,10 @@ extract_matrix_metadata (GskGLRenderModelview *modelview)
}
static void
-gsk_gl_render_job_set_modelview (GskGLRenderJob *job,
- GskTransform *transform)
+gsk_ngl_render_job_set_modelview (GskNglRenderJob *job,
+ GskTransform *transform)
{
- GskGLRenderModelview *modelview;
+ GskNglRenderModelview *modelview;
g_assert (job != NULL);
g_assert (job->modelview != NULL);
@@ -459,7 +459,7 @@ gsk_gl_render_job_set_modelview (GskGLRenderJob *job,
g_array_set_size (job->modelview, job->modelview->len + 1);
modelview = &g_array_index (job->modelview,
- GskGLRenderModelview,
+ GskNglRenderModelview,
job->modelview->len - 1);
modelview->transform = transform;
@@ -478,10 +478,10 @@ gsk_gl_render_job_set_modelview (GskGLRenderJob *job,
}
static void
-gsk_gl_render_job_push_modelview (GskGLRenderJob *job,
- GskTransform *transform)
+gsk_ngl_render_job_push_modelview (GskNglRenderJob *job,
+ GskTransform *transform)
{
- GskGLRenderModelview *modelview;
+ GskNglRenderModelview *modelview;
g_assert (job != NULL);
g_assert (job->modelview != NULL);
@@ -492,16 +492,16 @@ gsk_gl_render_job_push_modelview (GskGLRenderJob *job,
g_array_set_size (job->modelview, job->modelview->len + 1);
modelview = &g_array_index (job->modelview,
- GskGLRenderModelview,
+ GskNglRenderModelview,
job->modelview->len - 1);
if G_LIKELY (job->modelview->len > 1)
{
- GskGLRenderModelview *last;
+ GskNglRenderModelview *last;
GskTransform *t = NULL;
last = &g_array_index (job->modelview,
- GskGLRenderModelview,
+ GskNglRenderModelview,
job->modelview->len - 2);
/* Multiply given matrix with our previews modelview */
@@ -532,9 +532,9 @@ gsk_gl_render_job_push_modelview (GskGLRenderJob *job,
}
static void
-gsk_gl_render_job_pop_modelview (GskGLRenderJob *job)
+gsk_ngl_render_job_pop_modelview (GskNglRenderJob *job)
{
- const GskGLRenderModelview *head;
+ const GskNglRenderModelview *head;
g_assert (job != NULL);
g_assert (job->modelview);
@@ -553,7 +553,7 @@ gsk_gl_render_job_pop_modelview (GskGLRenderJob *job)
if (job->modelview->len >= 1)
{
- head = &g_array_index (job->modelview, GskGLRenderModelview, job->modelview->len - 1);
+ head = &g_array_index (job->modelview, GskNglRenderModelview, job->modelview->len - 1);
job->scale_x = head->scale_x;
job->scale_y = head->scale_y;
@@ -567,10 +567,10 @@ gsk_gl_render_job_pop_modelview (GskGLRenderJob *job)
}
static void
-gsk_gl_render_job_push_clip (GskGLRenderJob *job,
- const GskRoundedRect *rect)
+gsk_ngl_render_job_push_clip (GskNglRenderJob *job,
+ const GskRoundedRect *rect)
{
- GskGLRenderClip *clip;
+ GskNglRenderClip *clip;
g_assert (job != NULL);
g_assert (job->clip != NULL);
@@ -580,7 +580,7 @@ gsk_gl_render_job_push_clip (GskGLRenderJob *job,
g_array_set_size (job->clip, job->clip->len + 1);
- clip = &g_array_index (job->clip, GskGLRenderClip, job->clip->len - 1);
+ clip = &g_array_index (job->clip, GskNglRenderClip, job->clip->len - 1);
memcpy (&clip->rect, rect, sizeof *rect);
clip->is_rectilinear = gsk_rounded_rect_is_rectilinear (rect);
@@ -588,7 +588,7 @@ gsk_gl_render_job_push_clip (GskGLRenderJob *job,
}
static void
-gsk_gl_render_job_pop_clip (GskGLRenderJob *job)
+gsk_ngl_render_job_pop_clip (GskNglRenderJob *job)
{
g_assert (job != NULL);
g_assert (job->clip != NULL);
@@ -600,9 +600,9 @@ gsk_gl_render_job_pop_clip (GskGLRenderJob *job)
}
static inline void
-gsk_gl_render_job_offset (GskGLRenderJob *job,
- float offset_x,
- float offset_y)
+gsk_ngl_render_job_offset (GskNglRenderJob *job,
+ float offset_x,
+ float offset_y)
{
if (offset_x || offset_y)
{
@@ -612,17 +612,17 @@ gsk_gl_render_job_offset (GskGLRenderJob *job,
}
static inline void
-gsk_gl_render_job_set_projection (GskGLRenderJob *job,
- const graphene_matrix_t *projection)
+gsk_ngl_render_job_set_projection (GskNglRenderJob *job,
+ const graphene_matrix_t *projection)
{
memcpy (&job->projection, projection, sizeof job->projection);
job->driver->stamps[UNIFORM_SHARED_PROJECTION]++;
}
static inline void
-gsk_gl_render_job_set_projection_from_rect (GskGLRenderJob *job,
- const graphene_rect_t *rect,
- graphene_matrix_t *prev_projection)
+gsk_ngl_render_job_set_projection_from_rect (GskNglRenderJob *job,
+ const graphene_rect_t *rect,
+ graphene_matrix_t *prev_projection)
{
if (prev_projection)
memcpy (prev_projection, &job->projection, sizeof *prev_projection);
@@ -631,10 +631,10 @@ gsk_gl_render_job_set_projection_from_rect (GskGLRenderJob *job,
}
static inline void
-gsk_gl_render_job_set_projection_for_size (GskGLRenderJob *job,
- float width,
- float height,
- graphene_matrix_t *prev_projection)
+gsk_ngl_render_job_set_projection_for_size (GskNglRenderJob *job,
+ float width,
+ float height,
+ graphene_matrix_t *prev_projection)
{
if (prev_projection)
memcpy (prev_projection, &job->projection, sizeof *prev_projection);
@@ -644,9 +644,9 @@ gsk_gl_render_job_set_projection_for_size (GskGLRenderJob *job,
}
static inline void
-gsk_gl_render_job_set_viewport (GskGLRenderJob *job,
- const graphene_rect_t *viewport,
- graphene_rect_t *prev_viewport)
+gsk_ngl_render_job_set_viewport (GskNglRenderJob *job,
+ const graphene_rect_t *viewport,
+ graphene_rect_t *prev_viewport)
{
if (prev_viewport)
memcpy (prev_viewport, &job->viewport, sizeof *prev_viewport);
@@ -655,10 +655,10 @@ gsk_gl_render_job_set_viewport (GskGLRenderJob *job,
}
static inline void
-gsk_gl_render_job_set_viewport_for_size (GskGLRenderJob *job,
- float width,
- float height,
- graphene_rect_t *prev_viewport)
+gsk_ngl_render_job_set_viewport_for_size (GskNglRenderJob *job,
+ float width,
+ float height,
+ graphene_rect_t *prev_viewport)
{
if (prev_viewport)
memcpy (prev_viewport, &job->viewport, sizeof *prev_viewport);
@@ -670,9 +670,9 @@ gsk_gl_render_job_set_viewport_for_size (GskGLRenderJob *job,
}
static inline void
-gsk_gl_render_job_transform_bounds (GskGLRenderJob *job,
- const graphene_rect_t *rect,
- graphene_rect_t *out_rect)
+gsk_ngl_render_job_transform_bounds (GskNglRenderJob *job,
+ const graphene_rect_t *rect,
+ graphene_rect_t *out_rect)
{
GskTransform *transform;
GskTransformCategory category;
@@ -731,9 +731,9 @@ gsk_gl_render_job_transform_bounds (GskGLRenderJob *job,
}
static inline void
-gsk_gl_render_job_transform_rounded_rect (GskGLRenderJob *job,
- const GskRoundedRect *rect,
- GskRoundedRect *out_rect)
+gsk_ngl_render_job_transform_rounded_rect (GskNglRenderJob *job,
+ const GskRoundedRect *rect,
+ GskRoundedRect *out_rect)
{
out_rect->bounds.origin.x = job->offset_x + rect->bounds.origin.x;
out_rect->bounds.origin.y = job->offset_y + rect->bounds.origin.y;
@@ -743,21 +743,21 @@ gsk_gl_render_job_transform_rounded_rect (GskGLRenderJob *job,
}
static inline gboolean
-gsk_gl_render_job_node_overlaps_clip (GskGLRenderJob *job,
- const GskRenderNode *node)
+gsk_ngl_render_job_node_overlaps_clip (GskNglRenderJob *job,
+ const GskRenderNode *node)
{
graphene_rect_t transformed_bounds;
- gsk_gl_render_job_transform_bounds (job, &node->bounds, &transformed_bounds);
+ gsk_ngl_render_job_transform_bounds (job, &node->bounds, &transformed_bounds);
return rect_intersects (&job->current_clip->rect.bounds, &transformed_bounds);
}
/* load_vertex_data_with_region */
static inline void
-gsk_gl_render_job_load_vertices_from_offscreen (GskGLRenderJob *job,
- const graphene_rect_t *bounds,
- const GskGLRenderOffscreen *offscreen)
+gsk_ngl_render_job_load_vertices_from_offscreen (GskNglRenderJob *job,
+ const graphene_rect_t *bounds,
+ const GskNglRenderOffscreen *offscreen)
{
- GskGLDrawVertex *vertices = gsk_gl_command_queue_add_vertices (job->command_queue);
+ GskNglDrawVertex *vertices = gsk_ngl_command_queue_add_vertices (job->command_queue);
float min_x = job->offset_x + bounds->origin.x;
float min_y = job->offset_y + bounds->origin.y;
float max_x = min_x + bounds->size.width;
@@ -798,13 +798,13 @@ gsk_gl_render_job_load_vertices_from_offscreen (GskGLRenderJob *job,
/* load_float_vertex_data */
static inline void
-gsk_gl_render_job_draw (GskGLRenderJob *job,
- float x,
- float y,
- float width,
- float height)
+gsk_ngl_render_job_draw (GskNglRenderJob *job,
+ float x,
+ float y,
+ float width,
+ float height)
{
- GskGLDrawVertex *vertices = gsk_gl_command_queue_add_vertices (job->command_queue);
+ GskNglDrawVertex *vertices = gsk_ngl_command_queue_add_vertices (job->command_queue);
float min_x = job->offset_x + x;
float min_y = job->offset_y + y;
float max_x = min_x + width;
@@ -843,25 +843,25 @@ gsk_gl_render_job_draw (GskGLRenderJob *job,
/* load_vertex_data */
static inline void
-gsk_gl_render_job_draw_rect (GskGLRenderJob *job,
- const graphene_rect_t *bounds)
+gsk_ngl_render_job_draw_rect (GskNglRenderJob *job,
+ const graphene_rect_t *bounds)
{
- gsk_gl_render_job_draw (job,
- bounds->origin.x,
- bounds->origin.y,
- bounds->size.width,
- bounds->size.height);
+ gsk_ngl_render_job_draw (job,
+ bounds->origin.x,
+ bounds->origin.y,
+ bounds->size.width,
+ bounds->size.height);
}
/* fill_vertex_data */
static void
-gsk_gl_render_job_draw_coords (GskGLRenderJob *job,
- float min_x,
- float min_y,
- float max_x,
- float max_y)
+gsk_ngl_render_job_draw_coords (GskNglRenderJob *job,
+ float min_x,
+ float min_y,
+ float max_x,
+ float max_y)
{
- GskGLDrawVertex *vertices = gsk_gl_command_queue_add_vertices (job->command_queue);
+ GskNglDrawVertex *vertices = gsk_ngl_command_queue_add_vertices (job->command_queue);
vertices[0].position[0] = min_x;
vertices[0].position[1] = min_y;
@@ -896,78 +896,78 @@ gsk_gl_render_job_draw_coords (GskGLRenderJob *job,
/* load_offscreen_vertex_data */
static inline void
-gsk_gl_render_job_draw_offscreen_rect (GskGLRenderJob *job,
- const graphene_rect_t *bounds)
+gsk_ngl_render_job_draw_offscreen_rect (GskNglRenderJob *job,
+ const graphene_rect_t *bounds)
{
float min_x = job->offset_x + bounds->origin.x;
float min_y = job->offset_y + bounds->origin.y;
float max_x = min_x + bounds->size.width;
float max_y = min_y + bounds->size.height;
- gsk_gl_render_job_draw_coords (job, min_x, min_y, max_x, max_y);
+ gsk_ngl_render_job_draw_coords (job, min_x, min_y, max_x, max_y);
}
static inline void
-gsk_gl_render_job_begin_draw (GskGLRenderJob *job,
- GskGLProgram *program)
+gsk_ngl_render_job_begin_draw (GskNglRenderJob *job,
+ GskNglProgram *program)
{
- gsk_gl_command_queue_begin_draw (job->command_queue,
- program->program_info,
- job->viewport.size.width,
- job->viewport.size.height);
+ gsk_ngl_command_queue_begin_draw (job->command_queue,
+ program->program_info,
+ job->viewport.size.width,
+ job->viewport.size.height);
if (program->uniform_locations[UNIFORM_SHARED_VIEWPORT] > -1)
- gsk_gl_uniform_state_set4fv (program->uniforms,
- program->program_info,
- program->uniform_locations[UNIFORM_SHARED_VIEWPORT],
- job->driver->stamps[UNIFORM_SHARED_VIEWPORT],
- 1,
- (const float *)&job->viewport);
+ gsk_ngl_uniform_state_set4fv (program->uniforms,
+ program->program_info,
+ program->uniform_locations[UNIFORM_SHARED_VIEWPORT],
+ job->driver->stamps[UNIFORM_SHARED_VIEWPORT],
+ 1,
+ (const float *)&job->viewport);
if (program->uniform_locations[UNIFORM_SHARED_MODELVIEW] > -1)
- gsk_gl_uniform_state_set_matrix (program->uniforms,
- program->program_info,
- program->uniform_locations[UNIFORM_SHARED_MODELVIEW],
- job->driver->stamps[UNIFORM_SHARED_MODELVIEW],
- &job->current_modelview->matrix);
+ gsk_ngl_uniform_state_set_matrix (program->uniforms,
+ program->program_info,
+ program->uniform_locations[UNIFORM_SHARED_MODELVIEW],
+ job->driver->stamps[UNIFORM_SHARED_MODELVIEW],
+ &job->current_modelview->matrix);
if (program->uniform_locations[UNIFORM_SHARED_PROJECTION] > -1)
- gsk_gl_uniform_state_set_matrix (program->uniforms,
- program->program_info,
- program->uniform_locations[UNIFORM_SHARED_PROJECTION],
- job->driver->stamps[UNIFORM_SHARED_PROJECTION],
- &job->projection);
+ gsk_ngl_uniform_state_set_matrix (program->uniforms,
+ program->program_info,
+ program->uniform_locations[UNIFORM_SHARED_PROJECTION],
+ job->driver->stamps[UNIFORM_SHARED_PROJECTION],
+ &job->projection);
if (program->uniform_locations[UNIFORM_SHARED_CLIP_RECT] > -1)
- gsk_gl_uniform_state_set_rounded_rect (program->uniforms,
- program->program_info,
- program->uniform_locations[UNIFORM_SHARED_CLIP_RECT],
- job->driver->stamps[UNIFORM_SHARED_CLIP_RECT],
- &job->current_clip->rect);
+ gsk_ngl_uniform_state_set_rounded_rect (program->uniforms,
+ program->program_info,
+ program->uniform_locations[UNIFORM_SHARED_CLIP_RECT],
+ job->driver->stamps[UNIFORM_SHARED_CLIP_RECT],
+ &job->current_clip->rect);
if (program->uniform_locations[UNIFORM_SHARED_ALPHA] > -1)
- gsk_gl_uniform_state_set1f (program->uniforms,
- program->program_info,
- program->uniform_locations[UNIFORM_SHARED_ALPHA],
- job->driver->stamps[UNIFORM_SHARED_ALPHA],
- job->alpha);
+ gsk_ngl_uniform_state_set1f (program->uniforms,
+ program->program_info,
+ program->uniform_locations[UNIFORM_SHARED_ALPHA],
+ job->driver->stamps[UNIFORM_SHARED_ALPHA],
+ job->alpha);
}
static inline void
-gsk_gl_render_job_split_draw (GskGLRenderJob *job)
+gsk_ngl_render_job_split_draw (GskNglRenderJob *job)
{
- gsk_gl_command_queue_split_draw (job->command_queue);
+ gsk_ngl_command_queue_split_draw (job->command_queue);
}
static inline void
-gsk_gl_render_job_end_draw (GskGLRenderJob *job)
+gsk_ngl_render_job_end_draw (GskNglRenderJob *job)
{
- gsk_gl_command_queue_end_draw (job->command_queue);
+ gsk_ngl_command_queue_end_draw (job->command_queue);
}
static inline void
-gsk_gl_render_job_visit_as_fallback (GskGLRenderJob *job,
- const GskRenderNode *node)
+gsk_ngl_render_job_visit_as_fallback (GskNglRenderJob *job,
+ const GskRenderNode *node)
{
float scale_x = job->scale_x;
float scale_y = job->scale_y;
@@ -990,16 +990,16 @@ gsk_gl_render_job_visit_as_fallback (GskGLRenderJob *job,
key.scale_y = scale_y;
key.filter = GL_NEAREST;
- cached_id = gsk_next_driver_lookup_texture (job->driver, &key);
+ cached_id = gsk_ngl_driver_lookup_texture (job->driver, &key);
if (cached_id != 0)
{
- gsk_gl_render_job_begin_draw (job, job->driver->blit);
- gsk_gl_program_set_uniform_texture (job->driver->blit,
- UNIFORM_SHARED_SOURCE, 0,
- GL_TEXTURE_2D, GL_TEXTURE0, cached_id);
- gsk_gl_render_job_draw_offscreen_rect (job, &node->bounds);
- gsk_gl_render_job_end_draw (job);
+ gsk_ngl_render_job_begin_draw (job, job->driver->blit);
+ gsk_ngl_program_set_uniform_texture (job->driver->blit,
+ UNIFORM_SHARED_SOURCE, 0,
+ GL_TEXTURE_2D, GL_TEXTURE0, cached_id);
+ gsk_ngl_render_job_draw_offscreen_rect (job, &node->bounds);
+ gsk_ngl_render_job_end_draw (job);
return;
}
@@ -1058,8 +1058,8 @@ gsk_gl_render_job_visit_as_fallback (GskGLRenderJob *job,
/* Create texture to upload */
texture = gdk_texture_new_for_surface (surface);
- texture_id = gsk_next_driver_load_texture (job->driver, texture,
- GL_NEAREST, GL_NEAREST);
+ texture_id = gsk_ngl_driver_load_texture (job->driver, texture,
+ GL_NEAREST, GL_NEAREST);
if (gdk_gl_context_has_debug (job->command_queue->context))
gdk_gl_context_label_object_printf (job->command_queue->context, GL_TEXTURE, texture_id,
@@ -1071,29 +1071,29 @@ gsk_gl_render_job_visit_as_fallback (GskGLRenderJob *job,
cairo_surface_destroy (surface);
cairo_surface_destroy (rendered_surface);
- gsk_next_driver_cache_texture (job->driver, &key, texture_id);
+ gsk_ngl_driver_cache_texture (job->driver, &key, texture_id);
- gsk_gl_render_job_begin_draw (job, job->driver->blit);
- gsk_gl_program_set_uniform_texture (job->driver->blit,
- UNIFORM_SHARED_SOURCE, 0,
- GL_TEXTURE_2D,
- GL_TEXTURE0,
- texture_id);
- gsk_gl_render_job_draw_offscreen_rect (job, &node->bounds);
- gsk_gl_render_job_end_draw (job);
+ gsk_ngl_render_job_begin_draw (job, job->driver->blit);
+ gsk_ngl_program_set_uniform_texture (job->driver->blit,
+ UNIFORM_SHARED_SOURCE, 0,
+ GL_TEXTURE_2D,
+ GL_TEXTURE0,
+ texture_id);
+ gsk_ngl_render_job_draw_offscreen_rect (job, &node->bounds);
+ gsk_ngl_render_job_end_draw (job);
}
static guint
-blur_offscreen (GskGLRenderJob *job,
- GskGLRenderOffscreen *offscreen,
+blur_offscreen (GskNglRenderJob *job,
+ GskNglRenderOffscreen *offscreen,
int texture_to_blur_width,
int texture_to_blur_height,
float blur_radius_x,
float blur_radius_y)
{
const GskRoundedRect new_clip = GSK_ROUNDED_RECT_INIT (0, 0, texture_to_blur_width,
texture_to_blur_height);
- GskGLRenderTarget *pass1;
- GskGLRenderTarget *pass2;
+ GskNglRenderTarget *pass1;
+ GskNglRenderTarget *pass2;
graphene_matrix_t prev_projection;
graphene_rect_t prev_viewport;
guint prev_fbo;
@@ -1104,7 +1104,7 @@ blur_offscreen (GskGLRenderJob *job,
g_assert (offscreen->area.x2 > offscreen->area.x);
g_assert (offscreen->area.y2 > offscreen->area.y);
- if (!gsk_next_driver_create_render_target (job->driver,
+ if (!gsk_ngl_driver_create_render_target (job->driver,
MAX (texture_to_blur_width, 1),
MAX (texture_to_blur_height, 1),
GL_NEAREST, GL_NEAREST,
@@ -1112,84 +1112,84 @@ blur_offscreen (GskGLRenderJob *job,
return 0;
if (texture_to_blur_width <= 0 || texture_to_blur_height <= 0)
- return gsk_next_driver_release_render_target (job->driver, pass1, FALSE);
+ return gsk_ngl_driver_release_render_target (job->driver, pass1, FALSE);
- if (!gsk_next_driver_create_render_target (job->driver,
+ if (!gsk_ngl_driver_create_render_target (job->driver,
texture_to_blur_width,
texture_to_blur_height,
GL_NEAREST, GL_NEAREST,
&pass2))
- return gsk_next_driver_release_render_target (job->driver, pass1, FALSE);
+ return gsk_ngl_driver_release_render_target (job->driver, pass1, FALSE);
- gsk_gl_render_job_set_viewport (job, &new_clip.bounds, &prev_viewport);
- gsk_gl_render_job_set_projection_from_rect (job, &new_clip.bounds, &prev_projection);
- gsk_gl_render_job_set_modelview (job, NULL);
- gsk_gl_render_job_push_clip (job, &new_clip);
+ gsk_ngl_render_job_set_viewport (job, &new_clip.bounds, &prev_viewport);
+ gsk_ngl_render_job_set_projection_from_rect (job, &new_clip.bounds, &prev_projection);
+ gsk_ngl_render_job_set_modelview (job, NULL);
+ gsk_ngl_render_job_push_clip (job, &new_clip);
/* Bind new framebuffer and clear it */
- prev_fbo = gsk_gl_command_queue_bind_framebuffer (job->command_queue, pass1->framebuffer_id);
- gsk_gl_command_queue_clear (job->command_queue, 0, &job->viewport);
+ prev_fbo = gsk_ngl_command_queue_bind_framebuffer (job->command_queue, pass1->framebuffer_id);
+ gsk_ngl_command_queue_clear (job->command_queue, 0, &job->viewport);
/* Begin drawing the first horizontal pass, using offscreen as the
* source texture for the program.
*/
- gsk_gl_render_job_begin_draw (job, job->driver->blur);
- gsk_gl_program_set_uniform_texture (job->driver->blur,
- UNIFORM_SHARED_SOURCE, 0,
- GL_TEXTURE_2D,
- GL_TEXTURE0,
- offscreen->texture_id);
- gsk_gl_program_set_uniform1f (job->driver->blur,
- UNIFORM_BLUR_RADIUS, 0,
- blur_radius_x);
- gsk_gl_program_set_uniform2f (job->driver->blur,
- UNIFORM_BLUR_SIZE, 0,
- texture_to_blur_width,
- texture_to_blur_height);
- gsk_gl_program_set_uniform2f (job->driver->blur,
- UNIFORM_BLUR_DIR, 0,
- 1, 0);
- gsk_gl_render_job_draw_coords (job, 0, 0, texture_to_blur_width, texture_to_blur_height);
- gsk_gl_render_job_end_draw (job);
+ gsk_ngl_render_job_begin_draw (job, job->driver->blur);
+ gsk_ngl_program_set_uniform_texture (job->driver->blur,
+ UNIFORM_SHARED_SOURCE, 0,
+ GL_TEXTURE_2D,
+ GL_TEXTURE0,
+ offscreen->texture_id);
+ gsk_ngl_program_set_uniform1f (job->driver->blur,
+ UNIFORM_BLUR_RADIUS, 0,
+ blur_radius_x);
+ gsk_ngl_program_set_uniform2f (job->driver->blur,
+ UNIFORM_BLUR_SIZE, 0,
+ texture_to_blur_width,
+ texture_to_blur_height);
+ gsk_ngl_program_set_uniform2f (job->driver->blur,
+ UNIFORM_BLUR_DIR, 0,
+ 1, 0);
+ gsk_ngl_render_job_draw_coords (job, 0, 0, texture_to_blur_width, texture_to_blur_height);
+ gsk_ngl_render_job_end_draw (job);
/* Bind second pass framebuffer and clear it */
- gsk_gl_command_queue_bind_framebuffer (job->command_queue, pass2->framebuffer_id);
- gsk_gl_command_queue_clear (job->command_queue, 0, &job->viewport);
+ gsk_ngl_command_queue_bind_framebuffer (job->command_queue, pass2->framebuffer_id);
+ gsk_ngl_command_queue_clear (job->command_queue, 0, &job->viewport);
/* Draw using blur program with first pass as source texture */
- gsk_gl_render_job_begin_draw (job, job->driver->blur);
- gsk_gl_program_set_uniform_texture (job->driver->blur,
- UNIFORM_SHARED_SOURCE, 0,
- GL_TEXTURE_2D,
- GL_TEXTURE0,
- pass1->texture_id);
- gsk_gl_program_set_uniform1f (job->driver->blur,
- UNIFORM_BLUR_RADIUS, 0,
- blur_radius_y);
- gsk_gl_program_set_uniform2f (job->driver->blur,
- UNIFORM_BLUR_SIZE, 0,
- texture_to_blur_width,
- texture_to_blur_height);
- gsk_gl_program_set_uniform2f (job->driver->blur,
- UNIFORM_BLUR_DIR, 0,
- 0, 1);
- gsk_gl_render_job_draw_coords (job, 0, 0, texture_to_blur_width, texture_to_blur_height);
- gsk_gl_render_job_end_draw (job);
-
- gsk_gl_render_job_pop_modelview (job);
- gsk_gl_render_job_pop_clip (job);
- gsk_gl_render_job_set_viewport (job, &prev_viewport, NULL);
- gsk_gl_render_job_set_projection (job, &prev_projection);
- gsk_gl_command_queue_bind_framebuffer (job->command_queue, prev_fbo);
-
- gsk_next_driver_release_render_target (job->driver, pass1, TRUE);
-
- return gsk_next_driver_release_render_target (job->driver, pass2, FALSE);
+ gsk_ngl_render_job_begin_draw (job, job->driver->blur);
+ gsk_ngl_program_set_uniform_texture (job->driver->blur,
+ UNIFORM_SHARED_SOURCE, 0,
+ GL_TEXTURE_2D,
+ GL_TEXTURE0,
+ pass1->texture_id);
+ gsk_ngl_program_set_uniform1f (job->driver->blur,
+ UNIFORM_BLUR_RADIUS, 0,
+ blur_radius_y);
+ gsk_ngl_program_set_uniform2f (job->driver->blur,
+ UNIFORM_BLUR_SIZE, 0,
+ texture_to_blur_width,
+ texture_to_blur_height);
+ gsk_ngl_program_set_uniform2f (job->driver->blur,
+ UNIFORM_BLUR_DIR, 0,
+ 0, 1);
+ gsk_ngl_render_job_draw_coords (job, 0, 0, texture_to_blur_width, texture_to_blur_height);
+ gsk_ngl_render_job_end_draw (job);
+
+ gsk_ngl_render_job_pop_modelview (job);
+ gsk_ngl_render_job_pop_clip (job);
+ gsk_ngl_render_job_set_viewport (job, &prev_viewport, NULL);
+ gsk_ngl_render_job_set_projection (job, &prev_projection);
+ gsk_ngl_command_queue_bind_framebuffer (job->command_queue, prev_fbo);
+
+ gsk_ngl_driver_release_render_target (job->driver, pass1, TRUE);
+
+ return gsk_ngl_driver_release_render_target (job->driver, pass2, FALSE);
}
static void
-blur_node (GskGLRenderJob *job,
- GskGLRenderOffscreen *offscreen,
+blur_node (GskNglRenderJob *job,
+ GskNglRenderOffscreen *offscreen,
const GskRenderNode *node,
float blur_radius,
float *min_x,
@@ -1221,7 +1221,7 @@ blur_node (GskGLRenderJob *job,
offscreen->reset_clip = TRUE;
offscreen->force_offscreen = TRUE;
- if (!gsk_gl_render_job_visit_node_with_offscreen (job, node, offscreen))
+ if (!gsk_ngl_render_job_visit_node_with_offscreen (job, node, offscreen))
g_assert_not_reached ();
/* Ensure that we actually got a real texture_id */
@@ -1243,20 +1243,20 @@ blur_node (GskGLRenderJob *job,
}
static inline void
-gsk_gl_render_job_visit_color_node (GskGLRenderJob *job,
- const GskRenderNode *node)
+gsk_ngl_render_job_visit_color_node (GskNglRenderJob *job,
+ const GskRenderNode *node)
{
- gsk_gl_render_job_begin_draw (job, job->driver->color);
- gsk_gl_program_set_uniform_color (job->driver->color,
- UNIFORM_COLOR_COLOR, 0,
- gsk_color_node_get_color (node));
- gsk_gl_render_job_draw_rect (job, &node->bounds);
- gsk_gl_render_job_end_draw (job);
+ gsk_ngl_render_job_begin_draw (job, job->driver->color);
+ gsk_ngl_program_set_uniform_color (job->driver->color,
+ UNIFORM_COLOR_COLOR, 0,
+ gsk_color_node_get_color (node));
+ gsk_ngl_render_job_draw_rect (job, &node->bounds);
+ gsk_ngl_render_job_end_draw (job);
}
static inline void
-gsk_gl_render_job_visit_linear_gradient_node (GskGLRenderJob *job,
- const GskRenderNode *node)
+gsk_ngl_render_job_visit_linear_gradient_node (GskNglRenderJob *job,
+ const GskRenderNode *node)
{
const GskColorStop *stops = gsk_linear_gradient_node_get_color_stops (node, NULL);
const graphene_point_t *start = gsk_linear_gradient_node_get_start (node);
@@ -1270,27 +1270,27 @@ gsk_gl_render_job_visit_linear_gradient_node (GskGLRenderJob *job,
g_assert (n_color_stops < MAX_GRADIENT_STOPS);
- gsk_gl_render_job_begin_draw (job, job->driver->linear_gradient);
- gsk_gl_program_set_uniform1i (job->driver->linear_gradient,
- UNIFORM_LINEAR_GRADIENT_NUM_COLOR_STOPS, 0,
- n_color_stops);
- gsk_gl_program_set_uniform1fv (job->driver->linear_gradient,
- UNIFORM_LINEAR_GRADIENT_COLOR_STOPS, 0,
- n_color_stops * 5,
- (const float *)stops);
- gsk_gl_program_set_uniform4f (job->driver->linear_gradient,
- UNIFORM_LINEAR_GRADIENT_POINTS, 0,
- x1, y1, x2 - x1, y2 - y1);
- gsk_gl_program_set_uniform1i (job->driver->linear_gradient,
- UNIFORM_LINEAR_GRADIENT_REPEAT, 0,
- repeat);
- gsk_gl_render_job_draw_rect (job, &node->bounds);
- gsk_gl_render_job_end_draw (job);
+ gsk_ngl_render_job_begin_draw (job, job->driver->linear_gradient);
+ gsk_ngl_program_set_uniform1i (job->driver->linear_gradient,
+ UNIFORM_LINEAR_GRADIENT_NUM_COLOR_STOPS, 0,
+ n_color_stops);
+ gsk_ngl_program_set_uniform1fv (job->driver->linear_gradient,
+ UNIFORM_LINEAR_GRADIENT_COLOR_STOPS, 0,
+ n_color_stops * 5,
+ (const float *)stops);
+ gsk_ngl_program_set_uniform4f (job->driver->linear_gradient,
+ UNIFORM_LINEAR_GRADIENT_POINTS, 0,
+ x1, y1, x2 - x1, y2 - y1);
+ gsk_ngl_program_set_uniform1i (job->driver->linear_gradient,
+ UNIFORM_LINEAR_GRADIENT_REPEAT, 0,
+ repeat);
+ gsk_ngl_render_job_draw_rect (job, &node->bounds);
+ gsk_ngl_render_job_end_draw (job);
}
static inline void
-gsk_gl_render_job_visit_conic_gradient_node (GskGLRenderJob *job,
- const GskRenderNode *node)
+gsk_ngl_render_job_visit_conic_gradient_node (GskNglRenderJob *job,
+ const GskRenderNode *node)
{
static const float scale = 0.5f * M_1_PI;
@@ -1302,27 +1302,27 @@ gsk_gl_render_job_visit_conic_gradient_node (GskGLRenderJob *job,
g_assert (n_color_stops < MAX_GRADIENT_STOPS);
- gsk_gl_render_job_begin_draw (job, job->driver->conic_gradient);
- gsk_gl_program_set_uniform1i (job->driver->conic_gradient,
- UNIFORM_CONIC_GRADIENT_NUM_COLOR_STOPS, 0,
- n_color_stops);
- gsk_gl_program_set_uniform1fv (job->driver->conic_gradient,
- UNIFORM_CONIC_GRADIENT_COLOR_STOPS, 0,
- n_color_stops * 5,
- (const float *)stops);
- gsk_gl_program_set_uniform4f (job->driver->conic_gradient,
- UNIFORM_CONIC_GRADIENT_GEOMETRY, 0,
- job->offset_x + center->x,
- job->offset_y + center->y,
- scale,
- bias);
- gsk_gl_render_job_draw_rect (job, &node->bounds);
- gsk_gl_render_job_end_draw (job);
+ gsk_ngl_render_job_begin_draw (job, job->driver->conic_gradient);
+ gsk_ngl_program_set_uniform1i (job->driver->conic_gradient,
+ UNIFORM_CONIC_GRADIENT_NUM_COLOR_STOPS, 0,
+ n_color_stops);
+ gsk_ngl_program_set_uniform1fv (job->driver->conic_gradient,
+ UNIFORM_CONIC_GRADIENT_COLOR_STOPS, 0,
+ n_color_stops * 5,
+ (const float *)stops);
+ gsk_ngl_program_set_uniform4f (job->driver->conic_gradient,
+ UNIFORM_CONIC_GRADIENT_GEOMETRY, 0,
+ job->offset_x + center->x,
+ job->offset_y + center->y,
+ scale,
+ bias);
+ gsk_ngl_render_job_draw_rect (job, &node->bounds);
+ gsk_ngl_render_job_end_draw (job);
}
static inline void
-gsk_gl_render_job_visit_radial_gradient_node (GskGLRenderJob *job,
- const GskRenderNode *node)
+gsk_ngl_render_job_visit_radial_gradient_node (GskNglRenderJob *job,
+ const GskRenderNode *node)
{
int n_color_stops = gsk_radial_gradient_node_get_n_color_stops (node);
const GskColorStop *stops = gsk_radial_gradient_node_get_color_stops (node, NULL);
@@ -1337,39 +1337,39 @@ gsk_gl_render_job_visit_radial_gradient_node (GskGLRenderJob *job,
g_assert (n_color_stops < MAX_GRADIENT_STOPS);
- gsk_gl_render_job_begin_draw (job, job->driver->radial_gradient);
- gsk_gl_program_set_uniform1i (job->driver->radial_gradient,
- UNIFORM_RADIAL_GRADIENT_NUM_COLOR_STOPS, 0,
- n_color_stops);
- gsk_gl_program_set_uniform1fv (job->driver->radial_gradient,
- UNIFORM_RADIAL_GRADIENT_COLOR_STOPS, 0,
- n_color_stops * 5,
- (const float *)stops);
- gsk_gl_program_set_uniform1i (job->driver->radial_gradient,
- UNIFORM_RADIAL_GRADIENT_REPEAT, 0,
- repeat);
- gsk_gl_program_set_uniform2f (job->driver->radial_gradient,
- UNIFORM_RADIAL_GRADIENT_RANGE, 0,
- scale, bias);
- gsk_gl_program_set_uniform4f (job->driver->radial_gradient,
- UNIFORM_RADIAL_GRADIENT_GEOMETRY, 0,
- job->offset_x + center->x,
- job->offset_y + center->y,
- 1.0f / (hradius * job->scale_x),
- 1.0f / (vradius * job->scale_y));
- gsk_gl_render_job_draw_rect (job, &node->bounds);
- gsk_gl_render_job_end_draw (job);
+ gsk_ngl_render_job_begin_draw (job, job->driver->radial_gradient);
+ gsk_ngl_program_set_uniform1i (job->driver->radial_gradient,
+ UNIFORM_RADIAL_GRADIENT_NUM_COLOR_STOPS, 0,
+ n_color_stops);
+ gsk_ngl_program_set_uniform1fv (job->driver->radial_gradient,
+ UNIFORM_RADIAL_GRADIENT_COLOR_STOPS, 0,
+ n_color_stops * 5,
+ (const float *)stops);
+ gsk_ngl_program_set_uniform1i (job->driver->radial_gradient,
+ UNIFORM_RADIAL_GRADIENT_REPEAT, 0,
+ repeat);
+ gsk_ngl_program_set_uniform2f (job->driver->radial_gradient,
+ UNIFORM_RADIAL_GRADIENT_RANGE, 0,
+ scale, bias);
+ gsk_ngl_program_set_uniform4f (job->driver->radial_gradient,
+ UNIFORM_RADIAL_GRADIENT_GEOMETRY, 0,
+ job->offset_x + center->x,
+ job->offset_y + center->y,
+ 1.0f / (hradius * job->scale_x),
+ 1.0f / (vradius * job->scale_y));
+ gsk_ngl_render_job_draw_rect (job, &node->bounds);
+ gsk_ngl_render_job_end_draw (job);
}
static inline void
-gsk_gl_render_job_visit_clipped_child (GskGLRenderJob *job,
- const GskRenderNode *child,
- const graphene_rect_t *clip)
+gsk_ngl_render_job_visit_clipped_child (GskNglRenderJob *job,
+ const GskRenderNode *child,
+ const graphene_rect_t *clip)
{
graphene_rect_t transformed_clip;
GskRoundedRect intersection;
- gsk_gl_render_job_transform_bounds (job, clip, &transformed_clip);
+ gsk_ngl_render_job_transform_bounds (job, clip, &transformed_clip);
if (job->current_clip->is_rectilinear)
{
@@ -1378,22 +1378,22 @@ gsk_gl_render_job_visit_clipped_child (GskGLRenderJob *job,
&job->current_clip->rect.bounds,
&intersection.bounds);
- gsk_gl_render_job_push_clip (job, &intersection);
- gsk_gl_render_job_visit_node (job, child);
- gsk_gl_render_job_pop_clip (job);
+ gsk_ngl_render_job_push_clip (job, &intersection);
+ gsk_ngl_render_job_visit_node (job, child);
+ gsk_ngl_render_job_pop_clip (job);
}
else if (intersect_rounded_rectilinear (&transformed_clip,
&job->current_clip->rect,
&intersection))
{
- gsk_gl_render_job_push_clip (job, &intersection);
- gsk_gl_render_job_visit_node (job, child);
- gsk_gl_render_job_pop_clip (job);
+ gsk_ngl_render_job_push_clip (job, &intersection);
+ gsk_ngl_render_job_visit_node (job, child);
+ gsk_ngl_render_job_pop_clip (job);
}
else
{
GskRoundedRect scaled_clip;
- GskGLRenderOffscreen offscreen = {0};
+ GskNglRenderOffscreen offscreen = {0};
offscreen.bounds = &child->bounds;
offscreen.force_offscreen = TRUE;
@@ -1403,36 +1403,36 @@ gsk_gl_render_job_visit_clipped_child (GskGLRenderJob *job,
clip->size.width * job->scale_x,
clip->size.height * job->scale_y);
- gsk_gl_render_job_push_clip (job, &scaled_clip);
- gsk_gl_render_job_visit_node_with_offscreen (job, child, &offscreen);
- gsk_gl_render_job_pop_clip (job);
+ gsk_ngl_render_job_push_clip (job, &scaled_clip);
+ gsk_ngl_render_job_visit_node_with_offscreen (job, child, &offscreen);
+ gsk_ngl_render_job_pop_clip (job);
g_assert (offscreen.texture_id);
- gsk_gl_render_job_begin_draw (job, job->driver->blit);
- gsk_gl_program_set_uniform_texture (job->driver->blit,
- UNIFORM_SHARED_SOURCE, 0,
- GL_TEXTURE_2D,
- GL_TEXTURE0,
- offscreen.texture_id);
- gsk_gl_render_job_draw_offscreen_rect (job, &child->bounds);
- gsk_gl_render_job_end_draw (job);
+ gsk_ngl_render_job_begin_draw (job, job->driver->blit);
+ gsk_ngl_program_set_uniform_texture (job->driver->blit,
+ UNIFORM_SHARED_SOURCE, 0,
+ GL_TEXTURE_2D,
+ GL_TEXTURE0,
+ offscreen.texture_id);
+ gsk_ngl_render_job_draw_offscreen_rect (job, &child->bounds);
+ gsk_ngl_render_job_end_draw (job);
}
}
static inline void
-gsk_gl_render_job_visit_clip_node (GskGLRenderJob *job,
- const GskRenderNode *node)
+gsk_ngl_render_job_visit_clip_node (GskNglRenderJob *job,
+ const GskRenderNode *node)
{
const graphene_rect_t *clip = gsk_clip_node_get_clip (node);
const GskRenderNode *child = gsk_clip_node_get_child (node);
- gsk_gl_render_job_visit_clipped_child (job, child, clip);
+ gsk_ngl_render_job_visit_clipped_child (job, child, clip);
}
static inline void
-gsk_gl_render_job_visit_rounded_clip_node (GskGLRenderJob *job,
- const GskRenderNode *node)
+gsk_ngl_render_job_visit_rounded_clip_node (GskNglRenderJob *job,
+ const GskRenderNode *node)
{
const GskRenderNode *child = gsk_rounded_clip_node_get_child (node);
const GskRoundedRect *clip = gsk_rounded_clip_node_get_clip (node);
@@ -1444,7 +1444,7 @@ gsk_gl_render_job_visit_rounded_clip_node (GskGLRenderJob *job,
if (node_is_invisible (child))
return;
- gsk_gl_render_job_transform_bounds (job, &clip->bounds, &transformed_clip.bounds);
+ gsk_ngl_render_job_transform_bounds (job, &clip->bounds, &transformed_clip.bounds);
for (guint i = 0; i < G_N_ELEMENTS (transformed_clip.corner); i++)
{
@@ -1460,9 +1460,9 @@ gsk_gl_render_job_visit_rounded_clip_node (GskGLRenderJob *job,
&transformed_clip,
&intersected_clip))
{
- gsk_gl_render_job_push_clip (job, &intersected_clip);
- gsk_gl_render_job_visit_node (job, child);
- gsk_gl_render_job_pop_clip (job);
+ gsk_ngl_render_job_push_clip (job, &intersected_clip);
+ gsk_ngl_render_job_visit_node (job, child);
+ gsk_ngl_render_job_pop_clip (job);
return;
}
}
@@ -1485,36 +1485,36 @@ gsk_gl_render_job_visit_rounded_clip_node (GskGLRenderJob *job,
*/
if (rounded_inner_rect_contains_rect (&transformed_clip, &job->current_clip->rect.bounds))
{
- gsk_gl_render_job_visit_node (job, child);
+ gsk_ngl_render_job_visit_node (job, child);
return;
}
- gsk_gl_render_job_push_clip (job, &transformed_clip);
- gsk_gl_render_job_visit_node (job, child);
- gsk_gl_render_job_pop_clip (job);
+ gsk_ngl_render_job_push_clip (job, &transformed_clip);
+ gsk_ngl_render_job_visit_node (job, child);
+ gsk_ngl_render_job_pop_clip (job);
}
else
{
- GskGLRenderOffscreen offscreen = {0};
+ GskNglRenderOffscreen offscreen = {0};
offscreen.bounds = &node->bounds;
offscreen.force_offscreen = TRUE;
- gsk_gl_render_job_push_clip (job, &transformed_clip);
- if (!gsk_gl_render_job_visit_node_with_offscreen (job, child, &offscreen))
+ gsk_ngl_render_job_push_clip (job, &transformed_clip);
+ if (!gsk_ngl_render_job_visit_node_with_offscreen (job, child, &offscreen))
g_assert_not_reached ();
- gsk_gl_render_job_pop_clip (job);
+ gsk_ngl_render_job_pop_clip (job);
g_assert (offscreen.texture_id);
- gsk_gl_render_job_begin_draw (job, job->driver->blit);
- gsk_gl_program_set_uniform_texture (job->driver->blit,
- UNIFORM_SHARED_SOURCE, 0,
- GL_TEXTURE_2D,
- GL_TEXTURE0,
- offscreen.texture_id);
- gsk_gl_render_job_load_vertices_from_offscreen (job, &node->bounds, &offscreen);
- gsk_gl_render_job_end_draw (job);
+ gsk_ngl_render_job_begin_draw (job, job->driver->blit);
+ gsk_ngl_program_set_uniform_texture (job->driver->blit,
+ UNIFORM_SHARED_SOURCE, 0,
+ GL_TEXTURE_2D,
+ GL_TEXTURE0,
+ offscreen.texture_id);
+ gsk_ngl_render_job_load_vertices_from_offscreen (job, &node->bounds, &offscreen);
+ gsk_ngl_render_job_end_draw (job);
}
}
@@ -1550,36 +1550,36 @@ sort_border_sides (const GdkRGBA *colors,
}
static inline void
-gsk_gl_render_job_visit_uniform_border_node (GskGLRenderJob *job,
- const GskRenderNode *node)
+gsk_ngl_render_job_visit_uniform_border_node (GskNglRenderJob *job,
+ const GskRenderNode *node)
{
const GskRoundedRect *rounded_outline = gsk_border_node_get_outline (node);
const GdkRGBA *colors = gsk_border_node_get_colors (node);
const float *widths = gsk_border_node_get_widths (node);
GskRoundedRect outline;
- gsk_gl_render_job_transform_rounded_rect (job, rounded_outline, &outline);
-
- gsk_gl_render_job_begin_draw (job, job->driver->inset_shadow);
- gsk_gl_program_set_uniform_rounded_rect (job->driver->inset_shadow,
- UNIFORM_INSET_SHADOW_OUTLINE_RECT, 0,
- &outline);
- gsk_gl_program_set_uniform_color (job->driver->inset_shadow,
- UNIFORM_INSET_SHADOW_COLOR, 0,
- &colors[0]);
- gsk_gl_program_set_uniform1f (job->driver->inset_shadow,
- UNIFORM_INSET_SHADOW_SPREAD, 0,
- widths[0]);
- gsk_gl_program_set_uniform2f (job->driver->inset_shadow,
- UNIFORM_INSET_SHADOW_OFFSET, 0,
- 0, 0);
- gsk_gl_render_job_draw_rect (job, &node->bounds);
- gsk_gl_render_job_end_draw (job);
+ gsk_ngl_render_job_transform_rounded_rect (job, rounded_outline, &outline);
+
+ gsk_ngl_render_job_begin_draw (job, job->driver->inset_shadow);
+ gsk_ngl_program_set_uniform_rounded_rect (job->driver->inset_shadow,
+ UNIFORM_INSET_SHADOW_OUTLINE_RECT, 0,
+ &outline);
+ gsk_ngl_program_set_uniform_color (job->driver->inset_shadow,
+ UNIFORM_INSET_SHADOW_COLOR, 0,
+ &colors[0]);
+ gsk_ngl_program_set_uniform1f (job->driver->inset_shadow,
+ UNIFORM_INSET_SHADOW_SPREAD, 0,
+ widths[0]);
+ gsk_ngl_program_set_uniform2f (job->driver->inset_shadow,
+ UNIFORM_INSET_SHADOW_OFFSET, 0,
+ 0, 0);
+ gsk_ngl_render_job_draw_rect (job, &node->bounds);
+ gsk_ngl_render_job_end_draw (job);
}
static inline void
-gsk_gl_render_job_visit_border_node (GskGLRenderJob *job,
- const GskRenderNode *node)
+gsk_ngl_render_job_visit_border_node (GskNglRenderJob *job,
+ const GskRenderNode *node)
{
const GskRoundedRect *rounded_outline = gsk_border_node_get_outline (node);
const GdkRGBA *colors = gsk_border_node_get_colors (node);
@@ -1639,7 +1639,7 @@ gsk_gl_render_job_visit_border_node (GskGLRenderJob *job,
float min_y = job->offset_y + node->bounds.origin.y;
float max_x = min_x + node->bounds.size.width;
float max_y = min_y + node->bounds.size.height;
- const GskGLDrawVertex side_data[4][6] = {
+ const GskNglDrawVertex side_data[4][6] = {
/* Top */
{
{ { min_x, min_y }, { 0, 1 }, }, /* Upper left */
@@ -1688,31 +1688,31 @@ gsk_gl_render_job_visit_border_node (GskGLRenderJob *job,
sort_border_sides (colors, indices);
/* Prepare outline */
- gsk_gl_render_job_transform_rounded_rect (job, rounded_outline, &outline);
+ gsk_ngl_render_job_transform_rounded_rect (job, rounded_outline, &outline);
- gsk_gl_program_set_uniform4fv (job->driver->border,
- UNIFORM_BORDER_WIDTHS, 0,
- 1,
- widths);
- gsk_gl_program_set_uniform_rounded_rect (job->driver->border,
- UNIFORM_BORDER_OUTLINE_RECT, 0,
- &outline);
+ gsk_ngl_program_set_uniform4fv (job->driver->border,
+ UNIFORM_BORDER_WIDTHS, 0,
+ 1,
+ widths);
+ gsk_ngl_program_set_uniform_rounded_rect (job->driver->border,
+ UNIFORM_BORDER_OUTLINE_RECT, 0,
+ &outline);
for (guint i = 0; i < 4; i++)
{
- GskGLDrawVertex *vertices;
+ GskNglDrawVertex *vertices;
if (widths[indices[i]] <= 0)
continue;
- gsk_gl_render_job_begin_draw (job, job->driver->border);
- gsk_gl_program_set_uniform4fv (job->driver->border,
- UNIFORM_BORDER_COLOR, 0,
- 1,
- (const float *)&colors[indices[i]]);
- vertices = gsk_gl_command_queue_add_vertices (job->command_queue);
- memcpy (vertices, side_data[indices[i]], sizeof (GskGLDrawVertex) * GSK_GL_N_VERTICES);
- gsk_gl_render_job_end_draw (job);
+ gsk_ngl_render_job_begin_draw (job, job->driver->border);
+ gsk_ngl_program_set_uniform4fv (job->driver->border,
+ UNIFORM_BORDER_COLOR, 0,
+ 1,
+ (const float *)&colors[indices[i]]);
+ vertices = gsk_ngl_command_queue_add_vertices (job->command_queue);
+ memcpy (vertices, side_data[indices[i]], sizeof (GskNglDrawVertex) * GSK_NGL_N_VERTICES);
+ gsk_ngl_render_job_end_draw (job);
}
}
}
@@ -1749,8 +1749,8 @@ result_is_axis_aligned (GskTransform *transform,
}
static inline void
-gsk_gl_render_job_visit_transform_node (GskGLRenderJob *job,
- const GskRenderNode *node)
+gsk_ngl_render_job_visit_transform_node (GskNglRenderJob *job,
+ const GskRenderNode *node)
{
GskTransform *transform = gsk_transform_node_get_transform (node);
const GskTransformCategory category = gsk_transform_get_category (transform);
@@ -1759,7 +1759,7 @@ gsk_gl_render_job_visit_transform_node (GskGLRenderJob *job,
switch (category)
{
case GSK_TRANSFORM_CATEGORY_IDENTITY:
- gsk_gl_render_job_visit_node (job, child);
+ gsk_ngl_render_job_visit_node (job, child);
break;
case GSK_TRANSFORM_CATEGORY_2D_TRANSLATE:
@@ -1767,17 +1767,17 @@ gsk_gl_render_job_visit_transform_node (GskGLRenderJob *job,
float dx, dy;
gsk_transform_to_translate (transform, &dx, &dy);
- gsk_gl_render_job_offset (job, dx, dy);
- gsk_gl_render_job_visit_node (job, child);
- gsk_gl_render_job_offset (job, -dx, -dy);
+ gsk_ngl_render_job_offset (job, dx, dy);
+ gsk_ngl_render_job_visit_node (job, child);
+ gsk_ngl_render_job_offset (job, -dx, -dy);
}
break;
case GSK_TRANSFORM_CATEGORY_2D_AFFINE:
{
- gsk_gl_render_job_push_modelview (job, transform);
- gsk_gl_render_job_visit_node (job, child);
- gsk_gl_render_job_pop_modelview (job);
+ gsk_ngl_render_job_push_modelview (job, transform);
+ gsk_ngl_render_job_visit_node (job, child);
+ gsk_ngl_render_job_pop_modelview (job);
}
break;
@@ -1787,13 +1787,13 @@ gsk_gl_render_job_visit_transform_node (GskGLRenderJob *job,
case GSK_TRANSFORM_CATEGORY_UNKNOWN:
if (node_supports_transform (child))
{
- gsk_gl_render_job_push_modelview (job, transform);
- gsk_gl_render_job_visit_node (job, child);
- gsk_gl_render_job_pop_modelview (job);
+ gsk_ngl_render_job_push_modelview (job, transform);
+ gsk_ngl_render_job_visit_node (job, child);
+ gsk_ngl_render_job_pop_modelview (job);
}
else
{
- GskGLRenderOffscreen offscreen = {0};
+ GskNglRenderOffscreen offscreen = {0};
offscreen.bounds = &child->bounds;
offscreen.reset_clip = TRUE;
@@ -1801,7 +1801,7 @@ gsk_gl_render_job_visit_transform_node (GskGLRenderJob *job,
if (!result_is_axis_aligned (transform, &child->bounds))
offscreen.linear_filter = TRUE;
- if (gsk_gl_render_job_visit_node_with_offscreen (job, child, &offscreen))
+ if (gsk_ngl_render_job_visit_node_with_offscreen (job, child, &offscreen))
{
/* For non-trivial transforms, we draw everything on a texture and then
* draw the texture transformed. */
@@ -1809,18 +1809,18 @@ gsk_gl_render_job_visit_transform_node (GskGLRenderJob *job,
* part (e.g. the rotation) and use that. We want to keep the scale
* for the texture.
*/
- gsk_gl_render_job_push_modelview (job, transform);
-
- gsk_gl_render_job_begin_draw (job, job->driver->blit);
- gsk_gl_program_set_uniform_texture (job->driver->blit,
- UNIFORM_SHARED_SOURCE, 0,
- GL_TEXTURE_2D,
- GL_TEXTURE0,
- offscreen.texture_id);
- gsk_gl_render_job_load_vertices_from_offscreen (job, &child->bounds, &offscreen);
- gsk_gl_render_job_end_draw (job);
-
- gsk_gl_render_job_pop_modelview (job);
+ gsk_ngl_render_job_push_modelview (job, transform);
+
+ gsk_ngl_render_job_begin_draw (job, job->driver->blit);
+ gsk_ngl_program_set_uniform_texture (job->driver->blit,
+ UNIFORM_SHARED_SOURCE, 0,
+ GL_TEXTURE_2D,
+ GL_TEXTURE0,
+ offscreen.texture_id);
+ gsk_ngl_render_job_load_vertices_from_offscreen (job, &child->bounds, &offscreen);
+ gsk_ngl_render_job_end_draw (job);
+
+ gsk_ngl_render_job_pop_modelview (job);
}
}
break;
@@ -1831,35 +1831,35 @@ gsk_gl_render_job_visit_transform_node (GskGLRenderJob *job,
}
static inline void
-gsk_gl_render_job_visit_unblurred_inset_shadow_node (GskGLRenderJob *job,
- const GskRenderNode *node)
+gsk_ngl_render_job_visit_unblurred_inset_shadow_node (GskNglRenderJob *job,
+ const GskRenderNode *node)
{
const GskRoundedRect *outline = gsk_inset_shadow_node_get_outline (node);
GskRoundedRect transformed_outline;
- gsk_gl_render_job_transform_rounded_rect (job, outline, &transformed_outline);
-
- gsk_gl_render_job_begin_draw (job, job->driver->inset_shadow);
- gsk_gl_program_set_uniform_rounded_rect (job->driver->inset_shadow,
- UNIFORM_INSET_SHADOW_OUTLINE_RECT, 0,
- &transformed_outline);
- gsk_gl_program_set_uniform_color (job->driver->inset_shadow,
- UNIFORM_INSET_SHADOW_COLOR, 0,
- gsk_inset_shadow_node_get_color (node));
- gsk_gl_program_set_uniform1f (job->driver->inset_shadow,
- UNIFORM_INSET_SHADOW_SPREAD, 0,
- gsk_inset_shadow_node_get_spread (node));
- gsk_gl_program_set_uniform2f (job->driver->inset_shadow,
- UNIFORM_INSET_SHADOW_OFFSET, 0,
- gsk_inset_shadow_node_get_dx (node),
- gsk_inset_shadow_node_get_dy (node));
- gsk_gl_render_job_draw_rect (job, &node->bounds);
- gsk_gl_render_job_end_draw (job);
+ gsk_ngl_render_job_transform_rounded_rect (job, outline, &transformed_outline);
+
+ gsk_ngl_render_job_begin_draw (job, job->driver->inset_shadow);
+ gsk_ngl_program_set_uniform_rounded_rect (job->driver->inset_shadow,
+ UNIFORM_INSET_SHADOW_OUTLINE_RECT, 0,
+ &transformed_outline);
+ gsk_ngl_program_set_uniform_color (job->driver->inset_shadow,
+ UNIFORM_INSET_SHADOW_COLOR, 0,
+ gsk_inset_shadow_node_get_color (node));
+ gsk_ngl_program_set_uniform1f (job->driver->inset_shadow,
+ UNIFORM_INSET_SHADOW_SPREAD, 0,
+ gsk_inset_shadow_node_get_spread (node));
+ gsk_ngl_program_set_uniform2f (job->driver->inset_shadow,
+ UNIFORM_INSET_SHADOW_OFFSET, 0,
+ gsk_inset_shadow_node_get_dx (node),
+ gsk_inset_shadow_node_get_dy (node));
+ gsk_ngl_render_job_draw_rect (job, &node->bounds);
+ gsk_ngl_render_job_end_draw (job);
}
static inline void
-gsk_gl_render_job_visit_blurred_inset_shadow_node (GskGLRenderJob *job,
- const GskRenderNode *node)
+gsk_ngl_render_job_visit_blurred_inset_shadow_node (GskNglRenderJob *job,
+ const GskRenderNode *node)
{
const GskRoundedRect *node_outline = gsk_inset_shadow_node_get_outline (node);
float blur_radius = gsk_inset_shadow_node_get_blur_radius (node);
@@ -1873,7 +1873,7 @@ gsk_gl_render_job_visit_blurred_inset_shadow_node (GskGLRenderJob *job,
float texture_height;
int blurred_texture_id;
GskTextureKey key;
- GskGLRenderOffscreen offscreen = {0};
+ GskNglRenderOffscreen offscreen = {0};
g_assert (blur_radius > 0);
@@ -1886,14 +1886,14 @@ gsk_gl_render_job_visit_blurred_inset_shadow_node (GskGLRenderJob *job,
key.scale_y = scale_y;
key.filter = GL_NEAREST;
- blurred_texture_id = gsk_next_driver_lookup_texture (job->driver, &key);
+ blurred_texture_id = gsk_ngl_driver_lookup_texture (job->driver, &key);
if (blurred_texture_id == 0)
{
float spread = gsk_inset_shadow_node_get_spread (node) + half_blur_extra;
GskRoundedRect transformed_outline;
GskRoundedRect outline_to_blur;
- GskGLRenderTarget *render_target;
+ GskNglRenderTarget *render_target;
graphene_matrix_t prev_projection;
graphene_rect_t prev_viewport;
guint prev_fbo;
@@ -1925,45 +1925,45 @@ gsk_gl_render_job_visit_blurred_inset_shadow_node (GskGLRenderJob *job,
outline_to_blur.corner[i].height *= scale_y;
}
- if (!gsk_next_driver_create_render_target (job->driver,
+ if (!gsk_ngl_driver_create_render_target (job->driver,
texture_width, texture_height,
GL_NEAREST, GL_NEAREST,
&render_target))
g_assert_not_reached ();
- gsk_gl_render_job_set_viewport_for_size (job, texture_width, texture_height, &prev_viewport);
- gsk_gl_render_job_set_projection_for_size (job, texture_width, texture_height, &prev_projection);
- gsk_gl_render_job_set_modelview (job, NULL);
- gsk_gl_render_job_push_clip (job, &GSK_ROUNDED_RECT_INIT (0, 0, texture_width, texture_height));
+ gsk_ngl_render_job_set_viewport_for_size (job, texture_width, texture_height, &prev_viewport);
+ gsk_ngl_render_job_set_projection_for_size (job, texture_width, texture_height, &prev_projection);
+ gsk_ngl_render_job_set_modelview (job, NULL);
+ gsk_ngl_render_job_push_clip (job, &GSK_ROUNDED_RECT_INIT (0, 0, texture_width, texture_height));
- prev_fbo = gsk_gl_command_queue_bind_framebuffer (job->command_queue, render_target->framebuffer_id);
- gsk_gl_command_queue_clear (job->command_queue, 0, &job->viewport);
+ prev_fbo = gsk_ngl_command_queue_bind_framebuffer (job->command_queue, render_target->framebuffer_id);
+ gsk_ngl_command_queue_clear (job->command_queue, 0, &job->viewport);
- gsk_gl_render_job_transform_rounded_rect (job, &outline_to_blur, &transformed_outline);
+ gsk_ngl_render_job_transform_rounded_rect (job, &outline_to_blur, &transformed_outline);
/* Actual inset shadow outline drawing */
- gsk_gl_render_job_begin_draw (job, job->driver->inset_shadow);
- gsk_gl_program_set_uniform_rounded_rect (job->driver->inset_shadow,
- UNIFORM_INSET_SHADOW_OUTLINE_RECT, 0,
- &transformed_outline);
- gsk_gl_program_set_uniform_color (job->driver->inset_shadow,
- UNIFORM_INSET_SHADOW_COLOR, 0,
- gsk_inset_shadow_node_get_color (node));
- gsk_gl_program_set_uniform1f (job->driver->inset_shadow,
- UNIFORM_INSET_SHADOW_SPREAD, 0,
- spread * MAX (scale_x, scale_y));
- gsk_gl_program_set_uniform2f (job->driver->inset_shadow,
- UNIFORM_INSET_SHADOW_OFFSET, 0,
- offset_x * scale_x,
- offset_y * scale_y);
- gsk_gl_render_job_draw (job, 0, 0, texture_width, texture_height);
- gsk_gl_render_job_end_draw (job);
-
- gsk_gl_render_job_pop_modelview (job);
- gsk_gl_render_job_pop_clip (job);
- gsk_gl_render_job_set_projection (job, &prev_projection);
- gsk_gl_render_job_set_viewport (job, &prev_viewport, NULL);
- gsk_gl_command_queue_bind_framebuffer (job->command_queue, prev_fbo);
+ gsk_ngl_render_job_begin_draw (job, job->driver->inset_shadow);
+ gsk_ngl_program_set_uniform_rounded_rect (job->driver->inset_shadow,
+ UNIFORM_INSET_SHADOW_OUTLINE_RECT, 0,
+ &transformed_outline);
+ gsk_ngl_program_set_uniform_color (job->driver->inset_shadow,
+ UNIFORM_INSET_SHADOW_COLOR, 0,
+ gsk_inset_shadow_node_get_color (node));
+ gsk_ngl_program_set_uniform1f (job->driver->inset_shadow,
+ UNIFORM_INSET_SHADOW_SPREAD, 0,
+ spread * MAX (scale_x, scale_y));
+ gsk_ngl_program_set_uniform2f (job->driver->inset_shadow,
+ UNIFORM_INSET_SHADOW_OFFSET, 0,
+ offset_x * scale_x,
+ offset_y * scale_y);
+ gsk_ngl_render_job_draw (job, 0, 0, texture_width, texture_height);
+ gsk_ngl_render_job_end_draw (job);
+
+ gsk_ngl_render_job_pop_modelview (job);
+ gsk_ngl_render_job_pop_clip (job);
+ gsk_ngl_render_job_set_projection (job, &prev_projection);
+ gsk_ngl_render_job_set_viewport (job, &prev_viewport, NULL);
+ gsk_ngl_command_queue_bind_framebuffer (job->command_queue, prev_fbo);
offscreen.texture_id = render_target->texture_id;
init_full_texture_region (&offscreen);
@@ -1975,9 +1975,9 @@ gsk_gl_render_job_visit_blurred_inset_shadow_node (GskGLRenderJob *job,
blur_radius * scale_x,
blur_radius * scale_y);
- gsk_next_driver_release_render_target (job->driver, render_target, TRUE);
+ gsk_ngl_driver_release_render_target (job->driver, render_target, TRUE);
- gsk_next_driver_cache_texture (job->driver, &key, blurred_texture_id);
+ gsk_ngl_driver_cache_texture (job->driver, &key, blurred_texture_id);
}
g_assert (blurred_texture_id != 0);
@@ -1995,7 +1995,7 @@ gsk_gl_render_job_visit_blurred_inset_shadow_node (GskGLRenderJob *job,
{
GskRoundedRect node_clip;
- gsk_gl_render_job_transform_bounds (job, &node_outline->bounds, &node_clip.bounds);
+ gsk_ngl_render_job_transform_bounds (job, &node_outline->bounds, &node_clip.bounds);
for (guint i = 0; i < 4; i ++)
{
@@ -2003,7 +2003,7 @@ gsk_gl_render_job_visit_blurred_inset_shadow_node (GskGLRenderJob *job,
node_clip.corner[i].height = node_outline->corner[i].height * scale_y;
}
- gsk_gl_render_job_push_clip (job, &node_clip);
+ gsk_ngl_render_job_push_clip (job, &node_clip);
}
offscreen.was_offscreen = TRUE;
@@ -2012,23 +2012,23 @@ gsk_gl_render_job_visit_blurred_inset_shadow_node (GskGLRenderJob *job,
offscreen.area.x2 = tx2;
offscreen.area.y2 = ty2;
- gsk_gl_render_job_begin_draw (job, job->driver->blit);
- gsk_gl_program_set_uniform_texture (job->driver->blit,
- UNIFORM_SHARED_SOURCE, 0,
- GL_TEXTURE_2D,
- GL_TEXTURE0,
- blurred_texture_id);
- gsk_gl_render_job_load_vertices_from_offscreen (job, &node->bounds, &offscreen);
- gsk_gl_render_job_end_draw (job);
+ gsk_ngl_render_job_begin_draw (job, job->driver->blit);
+ gsk_ngl_program_set_uniform_texture (job->driver->blit,
+ UNIFORM_SHARED_SOURCE, 0,
+ GL_TEXTURE_2D,
+ GL_TEXTURE0,
+ blurred_texture_id);
+ gsk_ngl_render_job_load_vertices_from_offscreen (job, &node->bounds, &offscreen);
+ gsk_ngl_render_job_end_draw (job);
if (needs_clip)
- gsk_gl_render_job_pop_clip (job);
+ gsk_ngl_render_job_pop_clip (job);
}
}
static inline void
-gsk_gl_render_job_visit_unblurred_outset_shadow_node (GskGLRenderJob *job,
- const GskRenderNode *node)
+gsk_ngl_render_job_visit_unblurred_outset_shadow_node (GskNglRenderJob *job,
+ const GskRenderNode *node)
{
const GskRoundedRect *outline = gsk_outset_shadow_node_get_outline (node);
GskRoundedRect transformed_outline;
@@ -2049,63 +2049,63 @@ gsk_gl_render_job_visit_unblurred_outset_shadow_node (GskGLRenderJob *job,
{ outline->corner[3].width + spread - dx, outline->corner[3].height + spread + dy },
};
- gsk_gl_render_job_transform_rounded_rect (job, outline, &transformed_outline);
-
- gsk_gl_render_job_begin_draw (job, job->driver->unblurred_outset_shadow);
- gsk_gl_program_set_uniform_rounded_rect (job->driver->unblurred_outset_shadow,
- UNIFORM_UNBLURRED_OUTSET_SHADOW_OUTLINE_RECT, 0,
- &transformed_outline);
- gsk_gl_program_set_uniform_color (job->driver->unblurred_outset_shadow,
- UNIFORM_UNBLURRED_OUTSET_SHADOW_COLOR, 0,
- gsk_outset_shadow_node_get_color (node));
- gsk_gl_program_set_uniform1f (job->driver->unblurred_outset_shadow,
- UNIFORM_UNBLURRED_OUTSET_SHADOW_SPREAD, 0,
- spread);
- gsk_gl_program_set_uniform2f (job->driver->unblurred_outset_shadow,
- UNIFORM_UNBLURRED_OUTSET_SHADOW_OFFSET, 0,
- dx, dy);
+ gsk_ngl_render_job_transform_rounded_rect (job, outline, &transformed_outline);
+
+ gsk_ngl_render_job_begin_draw (job, job->driver->unblurred_outset_shadow);
+ gsk_ngl_program_set_uniform_rounded_rect (job->driver->unblurred_outset_shadow,
+ UNIFORM_UNBLURRED_OUTSET_SHADOW_OUTLINE_RECT, 0,
+ &transformed_outline);
+ gsk_ngl_program_set_uniform_color (job->driver->unblurred_outset_shadow,
+ UNIFORM_UNBLURRED_OUTSET_SHADOW_COLOR, 0,
+ gsk_outset_shadow_node_get_color (node));
+ gsk_ngl_program_set_uniform1f (job->driver->unblurred_outset_shadow,
+ UNIFORM_UNBLURRED_OUTSET_SHADOW_SPREAD, 0,
+ spread);
+ gsk_ngl_program_set_uniform2f (job->driver->unblurred_outset_shadow,
+ UNIFORM_UNBLURRED_OUTSET_SHADOW_OFFSET, 0,
+ dx, dy);
/* Corners... */
if (corner_sizes[0][0] > 0 && corner_sizes[0][1] > 0) /* Top left */
- gsk_gl_render_job_draw (job,
- x, y,
- corner_sizes[0][0], corner_sizes[0][1]);
+ gsk_ngl_render_job_draw (job,
+ x, y,
+ corner_sizes[0][0], corner_sizes[0][1]);
if (corner_sizes[1][0] > 0 && corner_sizes[1][1] > 0) /* Top right */
- gsk_gl_render_job_draw (job,
- x + w - corner_sizes[1][0], y,
- corner_sizes[1][0], corner_sizes[1][1]);
+ gsk_ngl_render_job_draw (job,
+ x + w - corner_sizes[1][0], y,
+ corner_sizes[1][0], corner_sizes[1][1]);
if (corner_sizes[2][0] > 0 && corner_sizes[2][1] > 0) /* Bottom right */
- gsk_gl_render_job_draw (job,
- x + w - corner_sizes[2][0], y + h - corner_sizes[2][1],
- corner_sizes[2][0], corner_sizes[2][1]);
+ gsk_ngl_render_job_draw (job,
+ x + w - corner_sizes[2][0], y + h - corner_sizes[2][1],
+ corner_sizes[2][0], corner_sizes[2][1]);
if (corner_sizes[3][0] > 0 && corner_sizes[3][1] > 0) /* Bottom left */
- gsk_gl_render_job_draw (job,
- x, y + h - corner_sizes[3][1],
- corner_sizes[3][0], corner_sizes[3][1]);
+ gsk_ngl_render_job_draw (job,
+ x, y + h - corner_sizes[3][1],
+ corner_sizes[3][0], corner_sizes[3][1]);
/* Edges... */;
if (edge_sizes[0] > 0) /* Top */
- gsk_gl_render_job_draw (job,
- x + corner_sizes[0][0], y,
- w - corner_sizes[0][0] - corner_sizes[1][0], edge_sizes[0]);
+ gsk_ngl_render_job_draw (job,
+ x + corner_sizes[0][0], y,
+ w - corner_sizes[0][0] - corner_sizes[1][0], edge_sizes[0]);
if (edge_sizes[1] > 0) /* Right */
- gsk_gl_render_job_draw (job,
- x + w - edge_sizes[1], y + corner_sizes[1][1],
- edge_sizes[1], h - corner_sizes[1][1] - corner_sizes[2][1]);
+ gsk_ngl_render_job_draw (job,
+ x + w - edge_sizes[1], y + corner_sizes[1][1],
+ edge_sizes[1], h - corner_sizes[1][1] - corner_sizes[2][1]);
if (edge_sizes[2] > 0) /* Bottom */
- gsk_gl_render_job_draw (job,
- x + corner_sizes[3][0], y + h - edge_sizes[2],
- w - corner_sizes[3][0] - corner_sizes[2][0], edge_sizes[2]);
+ gsk_ngl_render_job_draw (job,
+ x + corner_sizes[3][0], y + h - edge_sizes[2],
+ w - corner_sizes[3][0] - corner_sizes[2][0], edge_sizes[2]);
if (edge_sizes[3] > 0) /* Left */
- gsk_gl_render_job_draw (job,
- x, y + corner_sizes[0][1],
- edge_sizes[3], h - corner_sizes[0][1] - corner_sizes[3][1]);
+ gsk_ngl_render_job_draw (job,
+ x, y + corner_sizes[0][1],
+ edge_sizes[3], h - corner_sizes[0][1] - corner_sizes[3][1]);
- gsk_gl_render_job_end_draw (job);
+ gsk_ngl_render_job_end_draw (job);
}
static inline void
-gsk_gl_render_job_visit_blurred_outset_shadow_node (GskGLRenderJob *job,
- const GskRenderNode *node)
+gsk_ngl_render_job_visit_blurred_outset_shadow_node (GskNglRenderJob *job,
+ const GskRenderNode *node)
{
static const GdkRGBA white = { 1, 1, 1, 1 };
@@ -2122,7 +2122,7 @@ gsk_gl_render_job_visit_blurred_outset_shadow_node (GskGLRenderJob *job,
float dy = gsk_outset_shadow_node_get_dy (node);
GskRoundedRect scaled_outline;
GskRoundedRect transformed_outline;
- GskGLRenderOffscreen offscreen = {0};
+ GskNglRenderOffscreen offscreen = {0};
int texture_width, texture_height;
int blurred_texture_id;
int cached_tid;
@@ -2167,20 +2167,20 @@ gsk_gl_render_job_visit_blurred_outset_shadow_node (GskGLRenderJob *job,
scaled_outline.corner[i].height *= scale_y;
}
- cached_tid = gsk_gl_shadow_library_lookup (job->driver->shadows, &scaled_outline, blur_radius);
+ cached_tid = gsk_ngl_shadow_library_lookup (job->driver->shadows, &scaled_outline, blur_radius);
if (cached_tid == 0)
{
GdkGLContext *context = job->command_queue->context;
- GskGLRenderTarget *render_target;
+ GskNglRenderTarget *render_target;
graphene_matrix_t prev_projection;
graphene_rect_t prev_viewport;
guint prev_fbo;
- gsk_next_driver_create_render_target (job->driver,
- texture_width, texture_height,
- GL_NEAREST, GL_NEAREST,
- &render_target);
+ gsk_ngl_driver_create_render_target (job->driver,
+ texture_width, texture_height,
+ GL_NEAREST, GL_NEAREST,
+ &render_target);
if (gdk_gl_context_has_debug (context))
{
@@ -2197,32 +2197,32 @@ gsk_gl_render_job_visit_blurred_outset_shadow_node (GskGLRenderJob *job,
}
/* Change state for offscreen */
- gsk_gl_render_job_set_projection_for_size (job, texture_width, texture_height, &prev_projection);
- gsk_gl_render_job_set_viewport_for_size (job, texture_width, texture_height, &prev_viewport);
- gsk_gl_render_job_set_modelview (job, NULL);
- gsk_gl_render_job_push_clip (job, &scaled_outline);
+ gsk_ngl_render_job_set_projection_for_size (job, texture_width, texture_height, &prev_projection);
+ gsk_ngl_render_job_set_viewport_for_size (job, texture_width, texture_height, &prev_viewport);
+ gsk_ngl_render_job_set_modelview (job, NULL);
+ gsk_ngl_render_job_push_clip (job, &scaled_outline);
/* Bind render target and clear it */
- prev_fbo = gsk_gl_command_queue_bind_framebuffer (job->command_queue, render_target->framebuffer_id);
- gsk_gl_command_queue_clear (job->command_queue, 0, &job->viewport);
+ prev_fbo = gsk_ngl_command_queue_bind_framebuffer (job->command_queue, render_target->framebuffer_id);
+ gsk_ngl_command_queue_clear (job->command_queue, 0, &job->viewport);
/* Draw the outline using color program */
- gsk_gl_render_job_begin_draw (job, job->driver->color);
- gsk_gl_program_set_uniform_color (job->driver->color,
- UNIFORM_COLOR_COLOR, 0,
- &white);
- gsk_gl_render_job_draw (job, 0, 0, texture_width, texture_height);
- gsk_gl_render_job_end_draw (job);
+ gsk_ngl_render_job_begin_draw (job, job->driver->color);
+ gsk_ngl_program_set_uniform_color (job->driver->color,
+ UNIFORM_COLOR_COLOR, 0,
+ &white);
+ gsk_ngl_render_job_draw (job, 0, 0, texture_width, texture_height);
+ gsk_ngl_render_job_end_draw (job);
/* Reset state from offscreen */
- gsk_gl_render_job_pop_clip (job);
- gsk_gl_render_job_pop_modelview (job);
- gsk_gl_render_job_set_viewport (job, &prev_viewport, NULL);
- gsk_gl_render_job_set_projection (job, &prev_projection);
+ gsk_ngl_render_job_pop_clip (job);
+ gsk_ngl_render_job_pop_modelview (job);
+ gsk_ngl_render_job_set_viewport (job, &prev_viewport, NULL);
+ gsk_ngl_render_job_set_projection (job, &prev_projection);
/* Now blur the outline */
init_full_texture_region (&offscreen);
- offscreen.texture_id = gsk_next_driver_release_render_target (job->driver, render_target, FALSE);
+ offscreen.texture_id = gsk_ngl_driver_release_render_target (job->driver, render_target, FALSE);
blurred_texture_id = blur_offscreen (job,
&offscreen,
texture_width,
@@ -2230,19 +2230,19 @@ gsk_gl_render_job_visit_blurred_outset_shadow_node (GskGLRenderJob *job,
blur_radius * scale_x,
blur_radius * scale_y);
- gsk_gl_shadow_library_insert (job->driver->shadows,
- &scaled_outline,
- blur_radius,
- blurred_texture_id);
+ gsk_ngl_shadow_library_insert (job->driver->shadows,
+ &scaled_outline,
+ blur_radius,
+ blurred_texture_id);
- gsk_gl_command_queue_bind_framebuffer (job->command_queue, prev_fbo);
+ gsk_ngl_command_queue_bind_framebuffer (job->command_queue, prev_fbo);
}
else
{
blurred_texture_id = cached_tid;
}
- gsk_gl_render_job_transform_rounded_rect (job, outline, &transformed_outline);
+ gsk_ngl_render_job_transform_rounded_rect (job, outline, &transformed_outline);
if (!do_slicing)
{
@@ -2253,41 +2253,41 @@ gsk_gl_render_job_visit_blurred_outset_shadow_node (GskGLRenderJob *job,
offscreen.texture_id = blurred_texture_id;
init_full_texture_region (&offscreen);
- gsk_gl_render_job_begin_draw (job, job->driver->outset_shadow);
- gsk_gl_program_set_uniform_color (job->driver->outset_shadow,
- UNIFORM_OUTSET_SHADOW_COLOR, 0,
- color);
- gsk_gl_program_set_uniform_texture (job->driver->outset_shadow,
- UNIFORM_SHARED_SOURCE, 0,
- GL_TEXTURE_2D,
- GL_TEXTURE0,
- blurred_texture_id);
- gsk_gl_program_set_uniform_rounded_rect (job->driver->outset_shadow,
- UNIFORM_OUTSET_SHADOW_OUTLINE_RECT, 0,
- &transformed_outline);
- gsk_gl_render_job_load_vertices_from_offscreen (job,
- &GRAPHENE_RECT_INIT (min_x,
- min_y,
- texture_width / scale_x,
- texture_height / scale_y),
- &offscreen);
- gsk_gl_render_job_end_draw (job);
+ gsk_ngl_render_job_begin_draw (job, job->driver->outset_shadow);
+ gsk_ngl_program_set_uniform_color (job->driver->outset_shadow,
+ UNIFORM_OUTSET_SHADOW_COLOR, 0,
+ color);
+ gsk_ngl_program_set_uniform_texture (job->driver->outset_shadow,
+ UNIFORM_SHARED_SOURCE, 0,
+ GL_TEXTURE_2D,
+ GL_TEXTURE0,
+ blurred_texture_id);
+ gsk_ngl_program_set_uniform_rounded_rect (job->driver->outset_shadow,
+ UNIFORM_OUTSET_SHADOW_OUTLINE_RECT, 0,
+ &transformed_outline);
+ gsk_ngl_render_job_load_vertices_from_offscreen (job,
+ &GRAPHENE_RECT_INIT (min_x,
+ min_y,
+ texture_width / scale_x,
+ texture_height / scale_y),
+ &offscreen);
+ gsk_ngl_render_job_end_draw (job);
return;
}
- gsk_gl_render_job_begin_draw (job, job->driver->outset_shadow);
- gsk_gl_program_set_uniform_color (job->driver->outset_shadow,
- UNIFORM_OUTSET_SHADOW_COLOR, 0,
- color);
- gsk_gl_program_set_uniform_texture (job->driver->outset_shadow,
- UNIFORM_SHARED_SOURCE, 0,
- GL_TEXTURE_2D,
- GL_TEXTURE0,
- blurred_texture_id);
- gsk_gl_program_set_uniform_rounded_rect (job->driver->outset_shadow,
- UNIFORM_OUTSET_SHADOW_OUTLINE_RECT, 0,
- &transformed_outline);
+ gsk_ngl_render_job_begin_draw (job, job->driver->outset_shadow);
+ gsk_ngl_program_set_uniform_color (job->driver->outset_shadow,
+ UNIFORM_OUTSET_SHADOW_COLOR, 0,
+ color);
+ gsk_ngl_program_set_uniform_texture (job->driver->outset_shadow,
+ UNIFORM_SHARED_SOURCE, 0,
+ GL_TEXTURE_2D,
+ GL_TEXTURE0,
+ blurred_texture_id);
+ gsk_ngl_program_set_uniform_rounded_rect (job->driver->outset_shadow,
+ UNIFORM_OUTSET_SHADOW_OUTLINE_RECT, 0,
+ &transformed_outline);
{
float min_x = floorf (outline->bounds.origin.x - spread - half_blur_extra + dx);
@@ -2296,11 +2296,11 @@ gsk_gl_render_job_visit_blurred_outset_shadow_node (GskGLRenderJob *job,
half_blur_extra + dx + spread);
float max_y = ceilf (outline->bounds.origin.y + outline->bounds.size.height +
half_blur_extra + dy + spread);
- const GskGLTextureNineSlice *slices;
- GskGLTexture *texture;
+ const GskNglTextureNineSlice *slices;
+ GskNglTexture *texture;
- texture = gsk_next_driver_get_texture_by_id (job->driver, blurred_texture_id);
- slices = gsk_gl_texture_get_nine_slice (texture, &scaled_outline, extra_blur_pixels);
+ texture = gsk_ngl_driver_get_texture_by_id (job->driver, blurred_texture_id);
+ slices = gsk_ngl_texture_get_nine_slice (texture, &scaled_outline, extra_blur_pixels);
offscreen.was_offscreen = TRUE;
@@ -2311,61 +2311,61 @@ gsk_gl_render_job_visit_blurred_outset_shadow_node (GskGLRenderJob *job,
if (nine_slice_is_visible (&slices[NINE_SLICE_TOP_LEFT]))
{
memcpy (&offscreen.area, &slices[NINE_SLICE_TOP_LEFT].area, sizeof offscreen.area);
- gsk_gl_render_job_load_vertices_from_offscreen (job,
- &GRAPHENE_RECT_INIT (min_x, min_y,
-
slices[NINE_SLICE_TOP_LEFT].rect.width / scale_x,
-
slices[NINE_SLICE_TOP_LEFT].rect.height / scale_y),
- &offscreen);
+ gsk_ngl_render_job_load_vertices_from_offscreen (job,
+ &GRAPHENE_RECT_INIT (min_x, min_y,
+
slices[NINE_SLICE_TOP_LEFT].rect.width / scale_x,
+
slices[NINE_SLICE_TOP_LEFT].rect.height / scale_y),
+ &offscreen);
}
/* Top center */
if (nine_slice_is_visible (&slices[NINE_SLICE_TOP_CENTER]))
- {
- memcpy (&offscreen.area, &slices[NINE_SLICE_TOP_CENTER].area, sizeof offscreen.area);
- float width = (max_x - min_x) - (slices[NINE_SLICE_TOP_LEFT].rect.width / scale_x +
- slices[NINE_SLICE_TOP_RIGHT].rect.width / scale_x);
- gsk_gl_render_job_load_vertices_from_offscreen (job,
- &GRAPHENE_RECT_INIT (min_x +
(slices[NINE_SLICE_TOP_LEFT].rect.width / scale_x),
- min_y,
- width,
-
slices[NINE_SLICE_TOP_CENTER].rect.height / scale_y),
- &offscreen);
- }
+ {
+ memcpy (&offscreen.area, &slices[NINE_SLICE_TOP_CENTER].area, sizeof offscreen.area);
+ float width = (max_x - min_x) - (slices[NINE_SLICE_TOP_LEFT].rect.width / scale_x +
+ slices[NINE_SLICE_TOP_RIGHT].rect.width / scale_x);
+ gsk_ngl_render_job_load_vertices_from_offscreen (job,
+ &GRAPHENE_RECT_INIT (min_x +
(slices[NINE_SLICE_TOP_LEFT].rect.width / scale_x),
+ min_y,
+ width,
+
slices[NINE_SLICE_TOP_CENTER].rect.height / scale_y),
+ &offscreen);
+ }
/* Top right */
if (nine_slice_is_visible (&slices[NINE_SLICE_TOP_RIGHT]))
- {
- memcpy (&offscreen.area, &slices[NINE_SLICE_TOP_RIGHT].area, sizeof offscreen.area);
- gsk_gl_render_job_load_vertices_from_offscreen (job,
- &GRAPHENE_RECT_INIT (max_x -
(slices[NINE_SLICE_TOP_RIGHT].rect.width / scale_x),
- min_y,
-
slices[NINE_SLICE_TOP_RIGHT].rect.width / scale_x,
-
slices[NINE_SLICE_TOP_RIGHT].rect.height / scale_y),
- &offscreen);
- }
+ {
+ memcpy (&offscreen.area, &slices[NINE_SLICE_TOP_RIGHT].area, sizeof offscreen.area);
+ gsk_ngl_render_job_load_vertices_from_offscreen (job,
+ &GRAPHENE_RECT_INIT (max_x -
(slices[NINE_SLICE_TOP_RIGHT].rect.width / scale_x),
+ min_y,
+
slices[NINE_SLICE_TOP_RIGHT].rect.width / scale_x,
+
slices[NINE_SLICE_TOP_RIGHT].rect.height / scale_y),
+ &offscreen);
+ }
/* Bottom right */
if (nine_slice_is_visible (&slices[NINE_SLICE_BOTTOM_RIGHT]))
- {
- memcpy (&offscreen.area, &slices[NINE_SLICE_BOTTOM_RIGHT].area, sizeof offscreen.area);
- gsk_gl_render_job_load_vertices_from_offscreen (job,
- &GRAPHENE_RECT_INIT (max_x -
(slices[NINE_SLICE_BOTTOM_RIGHT].rect.width / scale_x),
- max_y -
(slices[NINE_SLICE_BOTTOM_RIGHT].rect.height / scale_y),
-
slices[NINE_SLICE_BOTTOM_RIGHT].rect.width / scale_x,
-
slices[NINE_SLICE_BOTTOM_RIGHT].rect.height / scale_y),
- &offscreen);
- }
+ {
+ memcpy (&offscreen.area, &slices[NINE_SLICE_BOTTOM_RIGHT].area, sizeof offscreen.area);
+ gsk_ngl_render_job_load_vertices_from_offscreen (job,
+ &GRAPHENE_RECT_INIT (max_x -
(slices[NINE_SLICE_BOTTOM_RIGHT].rect.width / scale_x),
+ max_y -
(slices[NINE_SLICE_BOTTOM_RIGHT].rect.height / scale_y),
+
slices[NINE_SLICE_BOTTOM_RIGHT].rect.width / scale_x,
+
slices[NINE_SLICE_BOTTOM_RIGHT].rect.height / scale_y),
+ &offscreen);
+ }
/* Bottom left */
if (nine_slice_is_visible (&slices[NINE_SLICE_BOTTOM_LEFT]))
{
memcpy (&offscreen.area, &slices[NINE_SLICE_BOTTOM_LEFT].area, sizeof offscreen.area);
- gsk_gl_render_job_load_vertices_from_offscreen (job,
- &GRAPHENE_RECT_INIT (min_x,
- max_y -
(slices[NINE_SLICE_BOTTOM_LEFT].rect.height / scale_y),
-
slices[NINE_SLICE_BOTTOM_LEFT].rect.width / scale_x,
-
slices[NINE_SLICE_BOTTOM_LEFT].rect.height / scale_y),
- &offscreen);
+ gsk_ngl_render_job_load_vertices_from_offscreen (job,
+ &GRAPHENE_RECT_INIT (min_x,
+ max_y -
(slices[NINE_SLICE_BOTTOM_LEFT].rect.height / scale_y),
+
slices[NINE_SLICE_BOTTOM_LEFT].rect.width / scale_x,
+
slices[NINE_SLICE_BOTTOM_LEFT].rect.height / scale_y),
+ &offscreen);
}
/* Left side */
@@ -2374,12 +2374,12 @@ gsk_gl_render_job_visit_blurred_outset_shadow_node (GskGLRenderJob *job,
memcpy (&offscreen.area, &slices[NINE_SLICE_LEFT_CENTER].area, sizeof offscreen.area);
float height = (max_y - min_y) - (slices[NINE_SLICE_TOP_LEFT].rect.height / scale_y +
slices[NINE_SLICE_BOTTOM_LEFT].rect.height / scale_y);
- gsk_gl_render_job_load_vertices_from_offscreen (job,
- &GRAPHENE_RECT_INIT (min_x,
- min_y +
(slices[NINE_SLICE_TOP_LEFT].rect.height / scale_y),
-
slices[NINE_SLICE_LEFT_CENTER].rect.width / scale_x,
- height),
- &offscreen);
+ gsk_ngl_render_job_load_vertices_from_offscreen (job,
+ &GRAPHENE_RECT_INIT (min_x,
+ min_y +
(slices[NINE_SLICE_TOP_LEFT].rect.height / scale_y),
+
slices[NINE_SLICE_LEFT_CENTER].rect.width / scale_x,
+ height),
+ &offscreen);
}
/* Right side */
@@ -2388,12 +2388,12 @@ gsk_gl_render_job_visit_blurred_outset_shadow_node (GskGLRenderJob *job,
memcpy (&offscreen.area, &slices[NINE_SLICE_RIGHT_CENTER].area, sizeof offscreen.area);
float height = (max_y - min_y) - (slices[NINE_SLICE_TOP_RIGHT].rect.height / scale_y +
slices[NINE_SLICE_BOTTOM_RIGHT].rect.height / scale_y);
- gsk_gl_render_job_load_vertices_from_offscreen (job,
- &GRAPHENE_RECT_INIT (max_x -
(slices[NINE_SLICE_RIGHT_CENTER].rect.width / scale_x),
- min_y +
(slices[NINE_SLICE_TOP_LEFT].rect.height / scale_y),
-
slices[NINE_SLICE_RIGHT_CENTER].rect.width / scale_x,
- height),
- &offscreen);
+ gsk_ngl_render_job_load_vertices_from_offscreen (job,
+ &GRAPHENE_RECT_INIT (max_x -
(slices[NINE_SLICE_RIGHT_CENTER].rect.width / scale_x),
+ min_y +
(slices[NINE_SLICE_TOP_LEFT].rect.height / scale_y),
+
slices[NINE_SLICE_RIGHT_CENTER].rect.width / scale_x,
+ height),
+ &offscreen);
}
/* Bottom side */
@@ -2402,12 +2402,12 @@ gsk_gl_render_job_visit_blurred_outset_shadow_node (GskGLRenderJob *job,
memcpy (&offscreen.area, &slices[NINE_SLICE_BOTTOM_CENTER].area, sizeof offscreen.area);
float width = (max_x - min_x) - (slices[NINE_SLICE_BOTTOM_LEFT].rect.width / scale_x +
slices[NINE_SLICE_BOTTOM_RIGHT].rect.width / scale_x);
- gsk_gl_render_job_load_vertices_from_offscreen (job,
- &GRAPHENE_RECT_INIT (min_x +
(slices[NINE_SLICE_BOTTOM_LEFT].rect.width / scale_x),
- max_y -
(slices[NINE_SLICE_BOTTOM_CENTER].rect.height / scale_y),
- width,
-
slices[NINE_SLICE_BOTTOM_CENTER].rect.height / scale_y),
- &offscreen);
+ gsk_ngl_render_job_load_vertices_from_offscreen (job,
+ &GRAPHENE_RECT_INIT (min_x +
(slices[NINE_SLICE_BOTTOM_LEFT].rect.width / scale_x),
+ max_y -
(slices[NINE_SLICE_BOTTOM_CENTER].rect.height / scale_y),
+ width,
+
slices[NINE_SLICE_BOTTOM_CENTER].rect.height / scale_y),
+ &offscreen);
}
/* Middle */
@@ -2418,15 +2418,15 @@ gsk_gl_render_job_visit_blurred_outset_shadow_node (GskGLRenderJob *job,
slices[NINE_SLICE_RIGHT_CENTER].rect.width / scale_x);
float height = (max_y - min_y) - (slices[NINE_SLICE_TOP_CENTER].rect.height / scale_y +
slices[NINE_SLICE_BOTTOM_CENTER].rect.height / scale_y);
- gsk_gl_render_job_load_vertices_from_offscreen (job,
- &GRAPHENE_RECT_INIT (min_x +
(slices[NINE_SLICE_LEFT_CENTER].rect.width / scale_x),
- min_y +
(slices[NINE_SLICE_TOP_CENTER].rect.height / scale_y),
- width, height),
- &offscreen);
+ gsk_ngl_render_job_load_vertices_from_offscreen (job,
+ &GRAPHENE_RECT_INIT (min_x +
(slices[NINE_SLICE_LEFT_CENTER].rect.width / scale_x),
+ min_y +
(slices[NINE_SLICE_TOP_CENTER].rect.height / scale_y),
+ width, height),
+ &offscreen);
}
}
- gsk_gl_render_job_end_draw (job);
+ gsk_ngl_render_job_end_draw (job);
}
static inline gboolean G_GNUC_PURE
@@ -2445,14 +2445,14 @@ equal_texture_nodes (const GskRenderNode *node1,
}
static inline void
-gsk_gl_render_job_visit_cross_fade_node (GskGLRenderJob *job,
- const GskRenderNode *node)
+gsk_ngl_render_job_visit_cross_fade_node (GskNglRenderJob *job,
+ const GskRenderNode *node)
{
const GskRenderNode *start_node = gsk_cross_fade_node_get_start_child (node);
const GskRenderNode *end_node = gsk_cross_fade_node_get_end_child (node);
float progress = gsk_cross_fade_node_get_progress (node);
- GskGLRenderOffscreen offscreen_start = {0};
- GskGLRenderOffscreen offscreen_end = {0};
+ GskNglRenderOffscreen offscreen_start = {0};
+ GskNglRenderOffscreen offscreen_end = {0};
g_assert (progress > 0.0);
g_assert (progress < 1.0);
@@ -2465,45 +2465,45 @@ gsk_gl_render_job_visit_cross_fade_node (GskGLRenderJob *job,
offscreen_end.reset_clip = TRUE;
offscreen_end.bounds = &node->bounds;
- if (!gsk_gl_render_job_visit_node_with_offscreen (job, start_node, &offscreen_start))
+ if (!gsk_ngl_render_job_visit_node_with_offscreen (job, start_node, &offscreen_start))
{
- gsk_gl_render_job_visit_node (job, end_node);
+ gsk_ngl_render_job_visit_node (job, end_node);
return;
}
g_assert (offscreen_start.texture_id);
- if (!gsk_gl_render_job_visit_node_with_offscreen (job, end_node, &offscreen_end))
+ if (!gsk_ngl_render_job_visit_node_with_offscreen (job, end_node, &offscreen_end))
{
- float prev_alpha = gsk_gl_render_job_set_alpha (job, job->alpha * progress);
- gsk_gl_render_job_visit_node (job, start_node);
- gsk_gl_render_job_set_alpha (job, prev_alpha);
+ float prev_alpha = gsk_ngl_render_job_set_alpha (job, job->alpha * progress);
+ gsk_ngl_render_job_visit_node (job, start_node);
+ gsk_ngl_render_job_set_alpha (job, prev_alpha);
return;
}
g_assert (offscreen_end.texture_id);
- gsk_gl_render_job_begin_draw (job, job->driver->cross_fade);
- gsk_gl_program_set_uniform_texture (job->driver->cross_fade,
- UNIFORM_SHARED_SOURCE, 0,
- GL_TEXTURE_2D,
- GL_TEXTURE0,
- offscreen_start.texture_id);
- gsk_gl_program_set_uniform_texture (job->driver->cross_fade,
- UNIFORM_CROSS_FADE_SOURCE2, 0,
- GL_TEXTURE_2D,
- GL_TEXTURE1,
- offscreen_end.texture_id);
- gsk_gl_program_set_uniform1f (job->driver->cross_fade,
- UNIFORM_CROSS_FADE_PROGRESS, 0,
- progress);
- gsk_gl_render_job_load_vertices_from_offscreen (job, &node->bounds, &offscreen_end);
- gsk_gl_render_job_end_draw (job);
+ gsk_ngl_render_job_begin_draw (job, job->driver->cross_fade);
+ gsk_ngl_program_set_uniform_texture (job->driver->cross_fade,
+ UNIFORM_SHARED_SOURCE, 0,
+ GL_TEXTURE_2D,
+ GL_TEXTURE0,
+ offscreen_start.texture_id);
+ gsk_ngl_program_set_uniform_texture (job->driver->cross_fade,
+ UNIFORM_CROSS_FADE_SOURCE2, 0,
+ GL_TEXTURE_2D,
+ GL_TEXTURE1,
+ offscreen_end.texture_id);
+ gsk_ngl_program_set_uniform1f (job->driver->cross_fade,
+ UNIFORM_CROSS_FADE_PROGRESS, 0,
+ progress);
+ gsk_ngl_render_job_load_vertices_from_offscreen (job, &node->bounds, &offscreen_end);
+ gsk_ngl_render_job_end_draw (job);
}
static inline void
-gsk_gl_render_job_visit_opacity_node (GskGLRenderJob *job,
- const GskRenderNode *node)
+gsk_ngl_render_job_visit_opacity_node (GskNglRenderJob *job,
+ const GskRenderNode *node)
{
const GskRenderNode *child = gsk_opacity_node_get_child (node);
float opacity = gsk_opacity_node_get_opacity (node);
@@ -2511,11 +2511,11 @@ gsk_gl_render_job_visit_opacity_node (GskGLRenderJob *job,
if (!ALPHA_IS_CLEAR (new_alpha))
{
- float prev_alpha = gsk_gl_render_job_set_alpha (job, new_alpha);
+ float prev_alpha = gsk_ngl_render_job_set_alpha (job, new_alpha);
if (gsk_render_node_get_node_type (child) == GSK_CONTAINER_NODE)
{
- GskGLRenderOffscreen offscreen = {0};
+ GskNglRenderOffscreen offscreen = {0};
offscreen.bounds = &child->bounds;
offscreen.force_offscreen = TRUE;
@@ -2524,34 +2524,34 @@ gsk_gl_render_job_visit_opacity_node (GskGLRenderJob *job,
/* The semantics of an opacity node mandate that when, e.g., two
* color nodes overlap, there may not be any blending between them.
*/
- if (!gsk_gl_render_job_visit_node_with_offscreen (job, child, &offscreen))
+ if (!gsk_ngl_render_job_visit_node_with_offscreen (job, child, &offscreen))
return;
g_assert (offscreen.texture_id);
- gsk_gl_render_job_begin_draw (job, job->driver->blit);
- gsk_gl_program_set_uniform_texture (job->driver->blit,
- UNIFORM_SHARED_SOURCE, 0,
- GL_TEXTURE_2D,
- GL_TEXTURE0,
- offscreen.texture_id);
- gsk_gl_render_job_load_vertices_from_offscreen (job, &node->bounds, &offscreen);
- gsk_gl_render_job_end_draw (job);
+ gsk_ngl_render_job_begin_draw (job, job->driver->blit);
+ gsk_ngl_program_set_uniform_texture (job->driver->blit,
+ UNIFORM_SHARED_SOURCE, 0,
+ GL_TEXTURE_2D,
+ GL_TEXTURE0,
+ offscreen.texture_id);
+ gsk_ngl_render_job_load_vertices_from_offscreen (job, &node->bounds, &offscreen);
+ gsk_ngl_render_job_end_draw (job);
}
else
{
- gsk_gl_render_job_visit_node (job, child);
+ gsk_ngl_render_job_visit_node (job, child);
}
- gsk_gl_render_job_set_alpha (job, prev_alpha);
+ gsk_ngl_render_job_set_alpha (job, prev_alpha);
}
}
static inline void
-gsk_gl_render_job_visit_text_node (GskGLRenderJob *job,
- const GskRenderNode *node,
- const GdkRGBA *color,
- gboolean force_color)
+gsk_ngl_render_job_visit_text_node (GskNglRenderJob *job,
+ const GskRenderNode *node,
+ const GdkRGBA *color,
+ gboolean force_color)
{
const PangoFont *font = gsk_text_node_get_font (node);
const PangoGlyphInfo *glyphs = gsk_text_node_get_glyphs (node, NULL);
@@ -2560,13 +2560,13 @@ gsk_gl_render_job_visit_text_node (GskGLRenderJob *job,
guint num_glyphs = gsk_text_node_get_num_glyphs (node);
float x = offset->x + job->offset_x;
float y = offset->y + job->offset_y;
- GskGLGlyphLibrary *library = job->driver->glyphs;
- GskGLCommandBatch *batch;
- GskGLProgram *program;
+ GskNglGlyphLibrary *library = job->driver->glyphs;
+ GskNglCommandBatch *batch;
+ GskNglProgram *program;
int x_position = 0;
- GskGLGlyphKey lookup;
+ GskNglGlyphKey lookup;
guint last_texture = 0;
- GskGLDrawVertex *vertices;
+ GskNglDrawVertex *vertices;
guint used = 0;
if (num_glyphs == 0)
@@ -2580,22 +2580,22 @@ gsk_gl_render_job_visit_text_node (GskGLRenderJob *job,
else
{
program = job->driver->coloring;
- gsk_gl_program_set_uniform_color (program, UNIFORM_COLORING_COLOR, 0, color);
+ gsk_ngl_program_set_uniform_color (program, UNIFORM_COLORING_COLOR, 0, color);
}
lookup.font = (PangoFont *)font;
lookup.scale = (guint) (text_scale * 1024);
- gsk_gl_render_job_begin_draw (job, program);
- batch = gsk_gl_command_queue_get_batch (job->command_queue);
- vertices = gsk_gl_command_queue_add_n_vertices (job->command_queue, num_glyphs);
+ gsk_ngl_render_job_begin_draw (job, program);
+ batch = gsk_ngl_command_queue_get_batch (job->command_queue);
+ vertices = gsk_ngl_command_queue_add_n_vertices (job->command_queue, num_glyphs);
/* We use one quad per character */
for (guint i = 0; i < num_glyphs; i++)
{
const PangoGlyphInfo *gi = &glyphs[i];
- const GskGLGlyphValue *glyph;
- guint base = used * GSK_GL_N_VERTICES;
+ const GskNglGlyphValue *glyph;
+ guint base = used * GSK_NGL_N_VERTICES;
float glyph_x, glyph_y, glyph_x2, glyph_y2;
float tx, ty, tx2, ty2;
float cx;
@@ -2608,12 +2608,12 @@ gsk_gl_render_job_visit_text_node (GskGLRenderJob *job,
cx = (float)(x_position + gi->geometry.x_offset) / PANGO_SCALE;
cy = (float)(gi->geometry.y_offset) / PANGO_SCALE;
- gsk_gl_glyph_key_set_glyph_and_shift (&lookup, gi->glyph, x + cx, y + cy);
+ gsk_ngl_glyph_key_set_glyph_and_shift (&lookup, gi->glyph, x + cx, y + cy);
- if (!gsk_gl_glyph_library_lookup_or_add (library, &lookup, &glyph))
+ if (!gsk_ngl_glyph_library_lookup_or_add (library, &lookup, &glyph))
goto next;
- texture_id = GSK_GL_TEXTURE_ATLAS_ENTRY_TEXTURE (glyph);
+ texture_id = GSK_NGL_TEXTURE_ATLAS_ENTRY_TEXTURE (glyph);
if G_UNLIKELY (last_texture != texture_id)
{
@@ -2628,16 +2628,16 @@ gsk_gl_render_job_visit_text_node (GskGLRenderJob *job,
* of the new batch as otherwise it will point at the end of our
* vbo array.
*/
- gsk_gl_render_job_split_draw (job);
- batch = gsk_gl_command_queue_get_batch (job->command_queue);
+ gsk_ngl_render_job_split_draw (job);
+ batch = gsk_ngl_command_queue_get_batch (job->command_queue);
batch->draw.vbo_offset = vbo_offset;
}
- gsk_gl_program_set_uniform_texture (program,
- UNIFORM_SHARED_SOURCE, 0,
- GL_TEXTURE_2D,
- GL_TEXTURE0,
- texture_id);
+ gsk_ngl_program_set_uniform_texture (program,
+ UNIFORM_SHARED_SOURCE, 0,
+ GL_TEXTURE_2D,
+ GL_TEXTURE0,
+ texture_id);
last_texture = texture_id;
}
@@ -2681,7 +2681,7 @@ gsk_gl_render_job_visit_text_node (GskGLRenderJob *job,
vertices[base+5].uv[0] = tx2;
vertices[base+5].uv[1] = ty;
- batch->draw.vbo_count += GSK_GL_N_VERTICES;
+ batch->draw.vbo_count += GSK_NGL_N_VERTICES;
used++;
next:
@@ -2689,14 +2689,14 @@ next:
}
if (used != num_glyphs)
- gsk_gl_command_queue_retract_n_vertices (job->command_queue, num_glyphs - used);
+ gsk_ngl_command_queue_retract_n_vertices (job->command_queue, num_glyphs - used);
- gsk_gl_render_job_end_draw (job);
+ gsk_ngl_render_job_end_draw (job);
}
static inline void
-gsk_gl_render_job_visit_shadow_node (GskGLRenderJob *job,
- const GskRenderNode *node)
+gsk_ngl_render_job_visit_shadow_node (GskNglRenderJob *job,
+ const GskRenderNode *node)
{
const gsize n_shadows = gsk_shadow_node_get_n_shadows (node);
const GskRenderNode *original_child = gsk_shadow_node_get_child (node);
@@ -2713,15 +2713,15 @@ gsk_gl_render_job_visit_shadow_node (GskGLRenderJob *job,
const GskShadow *shadow = gsk_shadow_node_get_shadow (node, i);
const float dx = shadow->dx;
const float dy = shadow->dy;
- GskGLRenderOffscreen offscreen = {0};
+ GskNglRenderOffscreen offscreen = {0};
graphene_rect_t bounds;
if (shadow->radius == 0 &&
gsk_render_node_get_node_type (shadow_child) == GSK_TEXT_NODE)
{
- gsk_gl_render_job_offset (job, dx, dy);
- gsk_gl_render_job_visit_text_node (job, shadow_child, &shadow->color, TRUE);
- gsk_gl_render_job_offset (job, -dx, -dy);
+ gsk_ngl_render_job_offset (job, dx, dy);
+ gsk_ngl_render_job_visit_text_node (job, shadow_child, &shadow->color, TRUE);
+ gsk_ngl_render_job_offset (job, -dx, -dy);
continue;
}
@@ -2764,38 +2764,38 @@ gsk_gl_render_job_visit_shadow_node (GskGLRenderJob *job,
offscreen.reset_clip = TRUE;
offscreen.do_not_cache = TRUE;
- if (!gsk_gl_render_job_visit_node_with_offscreen (job, shadow_child, &offscreen))
+ if (!gsk_ngl_render_job_visit_node_with_offscreen (job, shadow_child, &offscreen))
g_assert_not_reached ();
bounds = shadow_child->bounds;
}
- gsk_gl_render_job_offset (job, dx, dy);
- gsk_gl_render_job_begin_draw (job, job->driver->coloring);
- gsk_gl_program_set_uniform_texture (job->driver->coloring,
- UNIFORM_SHARED_SOURCE, 0,
- GL_TEXTURE_2D,
- GL_TEXTURE0,
- offscreen.texture_id);
- gsk_gl_program_set_uniform_color (job->driver->coloring,
- UNIFORM_COLORING_COLOR, 0,
- &shadow->color);
- gsk_gl_render_job_load_vertices_from_offscreen (job, &bounds, &offscreen);
- gsk_gl_render_job_end_draw (job);
- gsk_gl_render_job_offset (job, -dx, -dy);
+ gsk_ngl_render_job_offset (job, dx, dy);
+ gsk_ngl_render_job_begin_draw (job, job->driver->coloring);
+ gsk_ngl_program_set_uniform_texture (job->driver->coloring,
+ UNIFORM_SHARED_SOURCE, 0,
+ GL_TEXTURE_2D,
+ GL_TEXTURE0,
+ offscreen.texture_id);
+ gsk_ngl_program_set_uniform_color (job->driver->coloring,
+ UNIFORM_COLORING_COLOR, 0,
+ &shadow->color);
+ gsk_ngl_render_job_load_vertices_from_offscreen (job, &bounds, &offscreen);
+ gsk_ngl_render_job_end_draw (job);
+ gsk_ngl_render_job_offset (job, -dx, -dy);
}
/* Now draw the child normally */
- gsk_gl_render_job_visit_node (job, original_child);
+ gsk_ngl_render_job_visit_node (job, original_child);
}
static inline void
-gsk_gl_render_job_visit_blur_node (GskGLRenderJob *job,
- const GskRenderNode *node)
+gsk_ngl_render_job_visit_blur_node (GskNglRenderJob *job,
+ const GskRenderNode *node)
{
const GskRenderNode *child = gsk_blur_node_get_child (node);
float blur_radius = gsk_blur_node_get_radius (node);
- GskGLRenderOffscreen offscreen = {0};
+ GskNglRenderOffscreen offscreen = {0};
GskTextureKey key;
gboolean cache_texture;
float min_x;
@@ -2814,7 +2814,7 @@ gsk_gl_render_job_visit_blur_node (GskGLRenderJob *job,
key.scale_y = job->scale_y;
key.filter = GL_NEAREST;
- offscreen.texture_id = gsk_next_driver_lookup_texture (job->driver, &key);
+ offscreen.texture_id = gsk_ngl_driver_lookup_texture (job->driver, &key);
cache_texture = offscreen.texture_id == 0;
blur_node (job,
@@ -2826,26 +2826,26 @@ gsk_gl_render_job_visit_blur_node (GskGLRenderJob *job,
g_assert (offscreen.texture_id != 0);
if (cache_texture)
- gsk_next_driver_cache_texture (job->driver, &key, offscreen.texture_id);
+ gsk_ngl_driver_cache_texture (job->driver, &key, offscreen.texture_id);
- gsk_gl_render_job_begin_draw (job, job->driver->blit);
- gsk_gl_program_set_uniform_texture (job->driver->blit,
- UNIFORM_SHARED_SOURCE, 0,
- GL_TEXTURE_2D,
- GL_TEXTURE0,
- offscreen.texture_id);
- gsk_gl_render_job_draw_coords (job, min_x, min_y, max_x, max_y);
- gsk_gl_render_job_end_draw (job);
+ gsk_ngl_render_job_begin_draw (job, job->driver->blit);
+ gsk_ngl_program_set_uniform_texture (job->driver->blit,
+ UNIFORM_SHARED_SOURCE, 0,
+ GL_TEXTURE_2D,
+ GL_TEXTURE0,
+ offscreen.texture_id);
+ gsk_ngl_render_job_draw_coords (job, min_x, min_y, max_x, max_y);
+ gsk_ngl_render_job_end_draw (job);
}
static inline void
-gsk_gl_render_job_visit_blend_node (GskGLRenderJob *job,
- const GskRenderNode *node)
+gsk_ngl_render_job_visit_blend_node (GskNglRenderJob *job,
+ const GskRenderNode *node)
{
const GskRenderNode *top_child = gsk_blend_node_get_top_child (node);
const GskRenderNode *bottom_child = gsk_blend_node_get_bottom_child (node);
- GskGLRenderOffscreen top_offscreen = {0};
- GskGLRenderOffscreen bottom_offscreen = {0};
+ GskNglRenderOffscreen top_offscreen = {0};
+ GskNglRenderOffscreen bottom_offscreen = {0};
top_offscreen.bounds = &node->bounds;
top_offscreen.force_offscreen = TRUE;
@@ -2857,53 +2857,53 @@ gsk_gl_render_job_visit_blend_node (GskGLRenderJob *job,
/* TODO: We create 2 textures here as big as the blend node, but both the
* start and the end node might be a lot smaller than that. */
- if (!gsk_gl_render_job_visit_node_with_offscreen (job, bottom_child, &bottom_offscreen))
+ if (!gsk_ngl_render_job_visit_node_with_offscreen (job, bottom_child, &bottom_offscreen))
{
- gsk_gl_render_job_visit_node (job, top_child);
+ gsk_ngl_render_job_visit_node (job, top_child);
return;
}
g_assert (bottom_offscreen.was_offscreen);
- if (!gsk_gl_render_job_visit_node_with_offscreen (job, top_child, &top_offscreen))
+ if (!gsk_ngl_render_job_visit_node_with_offscreen (job, top_child, &top_offscreen))
{
- gsk_gl_render_job_begin_draw (job, job->driver->blit);
- gsk_gl_program_set_uniform_texture (job->driver->blit,
- UNIFORM_SHARED_SOURCE, 0,
- GL_TEXTURE_2D,
- GL_TEXTURE0,
- bottom_offscreen.texture_id);
- gsk_gl_render_job_load_vertices_from_offscreen (job, &node->bounds, &bottom_offscreen);
- gsk_gl_render_job_end_draw (job);
+ gsk_ngl_render_job_begin_draw (job, job->driver->blit);
+ gsk_ngl_program_set_uniform_texture (job->driver->blit,
+ UNIFORM_SHARED_SOURCE, 0,
+ GL_TEXTURE_2D,
+ GL_TEXTURE0,
+ bottom_offscreen.texture_id);
+ gsk_ngl_render_job_load_vertices_from_offscreen (job, &node->bounds, &bottom_offscreen);
+ gsk_ngl_render_job_end_draw (job);
return;
}
g_assert (top_offscreen.was_offscreen);
- gsk_gl_render_job_begin_draw (job, job->driver->blend);
- gsk_gl_program_set_uniform_texture (job->driver->blend,
- UNIFORM_SHARED_SOURCE, 0,
- GL_TEXTURE_2D,
- GL_TEXTURE0,
- bottom_offscreen.texture_id);
- gsk_gl_program_set_uniform_texture (job->driver->blend,
- UNIFORM_BLEND_SOURCE2, 0,
- GL_TEXTURE_2D,
- GL_TEXTURE1,
- top_offscreen.texture_id);
- gsk_gl_program_set_uniform1i (job->driver->blend,
- UNIFORM_BLEND_MODE, 0,
- gsk_blend_node_get_blend_mode (node));
- gsk_gl_render_job_draw_offscreen_rect (job, &node->bounds);
- gsk_gl_render_job_end_draw (job);
+ gsk_ngl_render_job_begin_draw (job, job->driver->blend);
+ gsk_ngl_program_set_uniform_texture (job->driver->blend,
+ UNIFORM_SHARED_SOURCE, 0,
+ GL_TEXTURE_2D,
+ GL_TEXTURE0,
+ bottom_offscreen.texture_id);
+ gsk_ngl_program_set_uniform_texture (job->driver->blend,
+ UNIFORM_BLEND_SOURCE2, 0,
+ GL_TEXTURE_2D,
+ GL_TEXTURE1,
+ top_offscreen.texture_id);
+ gsk_ngl_program_set_uniform1i (job->driver->blend,
+ UNIFORM_BLEND_MODE, 0,
+ gsk_blend_node_get_blend_mode (node));
+ gsk_ngl_render_job_draw_offscreen_rect (job, &node->bounds);
+ gsk_ngl_render_job_end_draw (job);
}
static inline void
-gsk_gl_render_job_visit_color_matrix_node (GskGLRenderJob *job,
- const GskRenderNode *node)
+gsk_ngl_render_job_visit_color_matrix_node (GskNglRenderJob *job,
+ const GskRenderNode *node)
{
const GskRenderNode *child = gsk_color_matrix_node_get_child (node);
- GskGLRenderOffscreen offscreen = {0};
+ GskNglRenderOffscreen offscreen = {0};
float offset[4];
if (node_is_invisible (child))
@@ -2912,55 +2912,55 @@ gsk_gl_render_job_visit_color_matrix_node (GskGLRenderJob *job,
offscreen.bounds = &node->bounds;
offscreen.reset_clip = TRUE;
- if (!gsk_gl_render_job_visit_node_with_offscreen (job, child, &offscreen))
+ if (!gsk_ngl_render_job_visit_node_with_offscreen (job, child, &offscreen))
g_assert_not_reached ();
g_assert (offscreen.texture_id > 0);
graphene_vec4_to_float (gsk_color_matrix_node_get_color_offset (node), offset);
- gsk_gl_render_job_begin_draw (job, job->driver->color_matrix);
- gsk_gl_program_set_uniform_texture (job->driver->color_matrix,
- UNIFORM_SHARED_SOURCE, 0,
- GL_TEXTURE_2D,
- GL_TEXTURE0,
- offscreen.texture_id);
- gsk_gl_program_set_uniform_matrix (job->driver->color_matrix,
- UNIFORM_COLOR_MATRIX_COLOR_MATRIX, 0,
- gsk_color_matrix_node_get_color_matrix (node));
- gsk_gl_program_set_uniform4fv (job->driver->color_matrix,
- UNIFORM_COLOR_MATRIX_COLOR_OFFSET, 0,
- 1,
- offset);
- gsk_gl_render_job_load_vertices_from_offscreen (job, &node->bounds, &offscreen);
- gsk_gl_render_job_end_draw (job);
+ gsk_ngl_render_job_begin_draw (job, job->driver->color_matrix);
+ gsk_ngl_program_set_uniform_texture (job->driver->color_matrix,
+ UNIFORM_SHARED_SOURCE, 0,
+ GL_TEXTURE_2D,
+ GL_TEXTURE0,
+ offscreen.texture_id);
+ gsk_ngl_program_set_uniform_matrix (job->driver->color_matrix,
+ UNIFORM_COLOR_MATRIX_COLOR_MATRIX, 0,
+ gsk_color_matrix_node_get_color_matrix (node));
+ gsk_ngl_program_set_uniform4fv (job->driver->color_matrix,
+ UNIFORM_COLOR_MATRIX_COLOR_OFFSET, 0,
+ 1,
+ offset);
+ gsk_ngl_render_job_load_vertices_from_offscreen (job, &node->bounds, &offscreen);
+ gsk_ngl_render_job_end_draw (job);
}
static inline void
-gsk_gl_render_job_visit_gl_shader_node_fallback (GskGLRenderJob *job,
- const GskRenderNode *node)
+gsk_ngl_render_job_visit_gl_shader_node_fallback (GskNglRenderJob *job,
+ const GskRenderNode *node)
{
static const GdkRGBA pink = { 255 / 255., 105 / 255., 180 / 255., 1.0 };
- gsk_gl_render_job_begin_draw (job, job->driver->color);
- gsk_gl_program_set_uniform_color (job->driver->color,
- UNIFORM_COLOR_COLOR, 0,
- &pink);
- gsk_gl_render_job_draw_rect (job, &node->bounds);
- gsk_gl_render_job_end_draw (job);
+ gsk_ngl_render_job_begin_draw (job, job->driver->color);
+ gsk_ngl_program_set_uniform_color (job->driver->color,
+ UNIFORM_COLOR_COLOR, 0,
+ &pink);
+ gsk_ngl_render_job_draw_rect (job, &node->bounds);
+ gsk_ngl_render_job_end_draw (job);
}
static inline void
-gsk_gl_render_job_visit_gl_shader_node (GskGLRenderJob *job,
- const GskRenderNode *node)
+gsk_ngl_render_job_visit_gl_shader_node (GskNglRenderJob *job,
+ const GskRenderNode *node)
{
GError *error = NULL;
GskGLShader *shader;
- GskGLProgram *program;
+ GskNglProgram *program;
int n_children;
shader = gsk_gl_shader_node_get_shader (node);
- program = gsk_next_driver_lookup_shader (job->driver, shader, &error);
+ program = gsk_ngl_driver_lookup_shader (job->driver, shader, &error);
n_children = gsk_gl_shader_node_get_n_children (node);
if G_UNLIKELY (program == NULL)
@@ -2970,12 +2970,12 @@ gsk_gl_render_job_visit_gl_shader_node (GskGLRenderJob *job,
g_object_set_data (G_OBJECT (shader), "gsk-did-warn", GUINT_TO_POINTER (1));
g_warning ("Failed to compile gl shader: %s", error->message);
}
- gsk_gl_render_job_visit_gl_shader_node_fallback (job, node);
+ gsk_ngl_render_job_visit_gl_shader_node_fallback (job, node);
g_clear_error (&error);
}
else
{
- GskGLRenderOffscreen offscreens[4] = {{0}};
+ GskNglRenderOffscreen offscreens[4] = {{0}};
const GskGLUniform *uniforms;
const guint8 *base;
GBytes *args;
@@ -2991,7 +2991,7 @@ gsk_gl_render_job_visit_gl_shader_node (GskGLRenderJob *job,
offscreens[i].force_offscreen = TRUE;
offscreens[i].reset_clip = TRUE;
- if (!gsk_gl_render_job_visit_node_with_offscreen (job, child, &offscreens[i]))
+ if (!gsk_ngl_render_job_visit_node_with_offscreen (job, child, &offscreens[i]))
return;
}
@@ -2999,17 +2999,17 @@ gsk_gl_render_job_visit_gl_shader_node (GskGLRenderJob *job,
base = g_bytes_get_data (args, NULL);
uniforms = gsk_gl_shader_get_uniforms (shader, &n_uniforms);
- gsk_gl_render_job_begin_draw (job, program);
+ gsk_ngl_render_job_begin_draw (job, program);
for (guint i = 0; i < n_children; i++)
- gsk_gl_program_set_uniform_texture (program,
- UNIFORM_CUSTOM_TEXTURE1 + i, 0,
- GL_TEXTURE_2D,
- GL_TEXTURE0 + i,
- offscreens[i].texture_id);
- gsk_gl_program_set_uniform2f (program,
- UNIFORM_CUSTOM_SIZE, 0,
- node->bounds.size.width,
- node->bounds.size.height);
+ gsk_ngl_program_set_uniform_texture (program,
+ UNIFORM_CUSTOM_TEXTURE1 + i, 0,
+ GL_TEXTURE_2D,
+ GL_TEXTURE0 + i,
+ offscreens[i].texture_id);
+ gsk_ngl_program_set_uniform2f (program,
+ UNIFORM_CUSTOM_SIZE, 0,
+ node->bounds.size.width,
+ node->bounds.size.height);
for (guint i = 0; i < n_uniforms; i++)
{
const GskGLUniform *u = &uniforms[i];
@@ -3025,75 +3025,75 @@ gsk_gl_render_job_visit_gl_shader_node (GskGLRenderJob *job,
case GSK_GL_UNIFORM_TYPE_NONE:
break;
case GSK_GL_UNIFORM_TYPE_FLOAT:
- gsk_gl_uniform_state_set1fv (job->command_queue->uniforms,
- program->program_info,
- program->args_locations[i],
- 0, 1, (const float *)data);
+ gsk_ngl_uniform_state_set1fv (job->command_queue->uniforms,
+ program->program_info,
+ program->args_locations[i],
+ 0, 1, (const float *)data);
break;
case GSK_GL_UNIFORM_TYPE_INT:
- gsk_gl_uniform_state_set1i (job->command_queue->uniforms,
- program->program_info,
- program->args_locations[i],
- 0, *(const gint32 *)data);
+ gsk_ngl_uniform_state_set1i (job->command_queue->uniforms,
+ program->program_info,
+ program->args_locations[i],
+ 0, *(const gint32 *)data);
break;
case GSK_GL_UNIFORM_TYPE_UINT:
case GSK_GL_UNIFORM_TYPE_BOOL:
- gsk_gl_uniform_state_set1ui (job->command_queue->uniforms,
- program->program_info,
- program->args_locations[i],
- 0, *(const guint32 *)data);
+ gsk_ngl_uniform_state_set1ui (job->command_queue->uniforms,
+ program->program_info,
+ program->args_locations[i],
+ 0, *(const guint32 *)data);
break;
case GSK_GL_UNIFORM_TYPE_VEC2:
- gsk_gl_uniform_state_set2fv (job->command_queue->uniforms,
- program->program_info,
- program->args_locations[i],
- 0, 1, (const float *)data);
+ gsk_ngl_uniform_state_set2fv (job->command_queue->uniforms,
+ program->program_info,
+ program->args_locations[i],
+ 0, 1, (const float *)data);
break;
case GSK_GL_UNIFORM_TYPE_VEC3:
- gsk_gl_uniform_state_set3fv (job->command_queue->uniforms,
- program->program_info,
- program->args_locations[i],
- 0, 1, (const float *)data);
+ gsk_ngl_uniform_state_set3fv (job->command_queue->uniforms,
+ program->program_info,
+ program->args_locations[i],
+ 0, 1, (const float *)data);
break;
case GSK_GL_UNIFORM_TYPE_VEC4:
- gsk_gl_uniform_state_set4fv (job->command_queue->uniforms,
- program->program_info,
- program->args_locations[i],
- 0, 1, (const float *)data);
+ gsk_ngl_uniform_state_set4fv (job->command_queue->uniforms,
+ program->program_info,
+ program->args_locations[i],
+ 0, 1, (const float *)data);
break;
}
}
- gsk_gl_render_job_draw_offscreen_rect (job, &node->bounds);
- gsk_gl_render_job_end_draw (job);
+ gsk_ngl_render_job_draw_offscreen_rect (job, &node->bounds);
+ gsk_ngl_render_job_end_draw (job);
}
}
static void
-gsk_gl_render_job_upload_texture (GskGLRenderJob *job,
- GdkTexture *texture,
- GskGLRenderOffscreen *offscreen)
+gsk_ngl_render_job_upload_texture (GskNglRenderJob *job,
+ GdkTexture *texture,
+ GskNglRenderOffscreen *offscreen)
{
- if (gsk_gl_texture_library_can_cache (GSK_GL_TEXTURE_LIBRARY (job->driver->icons),
+ if (gsk_ngl_texture_library_can_cache (GSK_NGL_TEXTURE_LIBRARY (job->driver->icons),
texture->width,
texture->height) &&
!GDK_IS_GL_TEXTURE (texture))
{
- const GskGLIconData *icon_data;
+ const GskNglIconData *icon_data;
- gsk_gl_icon_library_lookup_or_add (job->driver->icons, texture, &icon_data);
- offscreen->texture_id = GSK_GL_TEXTURE_ATLAS_ENTRY_TEXTURE (icon_data);
+ gsk_ngl_icon_library_lookup_or_add (job->driver->icons, texture, &icon_data);
+ offscreen->texture_id = GSK_NGL_TEXTURE_ATLAS_ENTRY_TEXTURE (icon_data);
memcpy (&offscreen->area, &icon_data->entry.area, sizeof offscreen->area);
}
else
{
- offscreen->texture_id = gsk_next_driver_load_texture (job->driver, texture, GL_LINEAR, GL_LINEAR);
+ offscreen->texture_id = gsk_ngl_driver_load_texture (job->driver, texture, GL_LINEAR, GL_LINEAR);
init_full_texture_region (offscreen);
}
}
static inline void
-gsk_gl_render_job_visit_texture_node (GskGLRenderJob *job,
- const GskRenderNode *node)
+gsk_ngl_render_job_visit_texture_node (GskNglRenderJob *job,
+ const GskRenderNode *node)
{
GdkTexture *texture = gsk_texture_node_get_texture (node);
int max_texture_size = job->command_queue->max_texture_size;
@@ -3101,21 +3101,21 @@ gsk_gl_render_job_visit_texture_node (GskGLRenderJob *job,
if G_LIKELY (texture->width <= max_texture_size &&
texture->height <= max_texture_size)
{
- GskGLRenderOffscreen offscreen = {0};
+ GskNglRenderOffscreen offscreen = {0};
- gsk_gl_render_job_upload_texture (job, texture, &offscreen);
+ gsk_ngl_render_job_upload_texture (job, texture, &offscreen);
g_assert (offscreen.texture_id);
g_assert (offscreen.was_offscreen == FALSE);
- gsk_gl_render_job_begin_draw (job, job->driver->blit);
- gsk_gl_program_set_uniform_texture (job->driver->blit,
- UNIFORM_SHARED_SOURCE, 0,
- GL_TEXTURE_2D,
- GL_TEXTURE0,
- offscreen.texture_id);
- gsk_gl_render_job_load_vertices_from_offscreen (job, &node->bounds, &offscreen);
- gsk_gl_render_job_end_draw (job);
+ gsk_ngl_render_job_begin_draw (job, job->driver->blit);
+ gsk_ngl_program_set_uniform_texture (job->driver->blit,
+ UNIFORM_SHARED_SOURCE, 0,
+ GL_TEXTURE_2D,
+ GL_TEXTURE0,
+ offscreen.texture_id);
+ gsk_ngl_render_job_load_vertices_from_offscreen (job, &node->bounds, &offscreen);
+ gsk_ngl_render_job_end_draw (job);
}
else
{
@@ -3125,20 +3125,20 @@ gsk_gl_render_job_visit_texture_node (GskGLRenderJob *job,
float max_y = min_y + node->bounds.size.height;
float scale_x = (max_x - min_x) / texture->width;
float scale_y = (max_y - min_y) / texture->height;
- GskGLTextureSlice *slices = NULL;
+ GskNglTextureSlice *slices = NULL;
guint n_slices = 0;
- gsk_next_driver_slice_texture (job->driver, texture, &slices, &n_slices);
+ gsk_ngl_driver_slice_texture (job->driver, texture, &slices, &n_slices);
g_assert (slices != NULL);
g_assert (n_slices > 0);
- gsk_gl_render_job_begin_draw (job, job->driver->blit);
+ gsk_ngl_render_job_begin_draw (job, job->driver->blit);
for (guint i = 0; i < n_slices; i ++)
{
- GskGLDrawVertex *vertices;
- const GskGLTextureSlice *slice = &slices[i];
+ GskNglDrawVertex *vertices;
+ const GskNglTextureSlice *slice = &slices[i];
float x1, x2, y1, y2;
x1 = min_x + (scale_x * slice->rect.x);
@@ -3147,13 +3147,13 @@ gsk_gl_render_job_visit_texture_node (GskGLRenderJob *job,
y2 = y1 + (slice->rect.height * scale_y);
if (i > 0)
- gsk_gl_render_job_split_draw (job);
- gsk_gl_program_set_uniform_texture (job->driver->blit,
- UNIFORM_SHARED_SOURCE, 0,
- GL_TEXTURE_2D,
- GL_TEXTURE0,
- slice->texture_id);
- vertices = gsk_gl_command_queue_add_vertices (job->command_queue);
+ gsk_ngl_render_job_split_draw (job);
+ gsk_ngl_program_set_uniform_texture (job->driver->blit,
+ UNIFORM_SHARED_SOURCE, 0,
+ GL_TEXTURE_2D,
+ GL_TEXTURE0,
+ slice->texture_id);
+ vertices = gsk_ngl_command_queue_add_vertices (job->command_queue);
vertices[0].position[0] = x1;
vertices[0].position[1] = y1;
@@ -3186,17 +3186,17 @@ gsk_gl_render_job_visit_texture_node (GskGLRenderJob *job,
vertices[5].uv[1] = 0;
}
- gsk_gl_render_job_end_draw (job);
+ gsk_ngl_render_job_end_draw (job);
}
}
static inline void
-gsk_gl_render_job_visit_repeat_node (GskGLRenderJob *job,
- const GskRenderNode *node)
+gsk_ngl_render_job_visit_repeat_node (GskNglRenderJob *job,
+ const GskRenderNode *node)
{
const GskRenderNode *child = gsk_repeat_node_get_child (node);
const graphene_rect_t *child_bounds = gsk_repeat_node_get_child_bounds (node);
- GskGLRenderOffscreen offscreen = {0};
+ GskNglRenderOffscreen offscreen = {0};
if (node_is_invisible (child))
return;
@@ -3204,7 +3204,7 @@ gsk_gl_render_job_visit_repeat_node (GskGLRenderJob *job,
if (!graphene_rect_equal (child_bounds, &child->bounds))
{
/* TODO: implement these repeat nodes. */
- gsk_gl_render_job_visit_as_fallback (job, node);
+ gsk_ngl_render_job_visit_as_fallback (job, node);
return;
}
@@ -3213,88 +3213,88 @@ gsk_gl_render_job_visit_repeat_node (GskGLRenderJob *job,
* of the child texture... */
if (rect_contains_rect (child_bounds, &node->bounds))
{
- gsk_gl_render_job_visit_clipped_child (job, child, &node->bounds);
+ gsk_ngl_render_job_visit_clipped_child (job, child, &node->bounds);
return;
}
offscreen.bounds = &child->bounds;
offscreen.reset_clip = TRUE;
- if (!gsk_gl_render_job_visit_node_with_offscreen (job, child, &offscreen))
+ if (!gsk_ngl_render_job_visit_node_with_offscreen (job, child, &offscreen))
g_assert_not_reached ();
- gsk_gl_render_job_begin_draw (job, job->driver->repeat);
- gsk_gl_program_set_uniform_texture (job->driver->repeat,
- UNIFORM_SHARED_SOURCE, 0,
- GL_TEXTURE_2D,
- GL_TEXTURE0,
- offscreen.texture_id);
- gsk_gl_program_set_uniform4f (job->driver->repeat,
- UNIFORM_REPEAT_CHILD_BOUNDS, 0,
- (node->bounds.origin.x - child_bounds->origin.x) / child_bounds->size.width,
- (node->bounds.origin.y - child_bounds->origin.y) / child_bounds->size.height,
- node->bounds.size.width / child_bounds->size.width,
- node->bounds.size.height / child_bounds->size.height);
- gsk_gl_program_set_uniform4f (job->driver->repeat,
- UNIFORM_REPEAT_TEXTURE_RECT, 0,
- offscreen.area.x,
- offscreen.was_offscreen ? offscreen.area.y2 : offscreen.area.y,
- offscreen.area.x2,
- offscreen.was_offscreen ? offscreen.area.y : offscreen.area.y2);
- gsk_gl_render_job_load_vertices_from_offscreen (job, &node->bounds, &offscreen);
- gsk_gl_render_job_end_draw (job);
+ gsk_ngl_render_job_begin_draw (job, job->driver->repeat);
+ gsk_ngl_program_set_uniform_texture (job->driver->repeat,
+ UNIFORM_SHARED_SOURCE, 0,
+ GL_TEXTURE_2D,
+ GL_TEXTURE0,
+ offscreen.texture_id);
+ gsk_ngl_program_set_uniform4f (job->driver->repeat,
+ UNIFORM_REPEAT_CHILD_BOUNDS, 0,
+ (node->bounds.origin.x - child_bounds->origin.x) / child_bounds->size.width,
+ (node->bounds.origin.y - child_bounds->origin.y) /
child_bounds->size.height,
+ node->bounds.size.width / child_bounds->size.width,
+ node->bounds.size.height / child_bounds->size.height);
+ gsk_ngl_program_set_uniform4f (job->driver->repeat,
+ UNIFORM_REPEAT_TEXTURE_RECT, 0,
+ offscreen.area.x,
+ offscreen.was_offscreen ? offscreen.area.y2 : offscreen.area.y,
+ offscreen.area.x2,
+ offscreen.was_offscreen ? offscreen.area.y : offscreen.area.y2);
+ gsk_ngl_render_job_load_vertices_from_offscreen (job, &node->bounds, &offscreen);
+ gsk_ngl_render_job_end_draw (job);
}
static void
-gsk_gl_render_job_visit_node (GskGLRenderJob *job,
- const GskRenderNode *node)
+gsk_ngl_render_job_visit_node (GskNglRenderJob *job,
+ const GskRenderNode *node)
{
g_assert (job != NULL);
g_assert (node != NULL);
- g_assert (GSK_IS_NEXT_DRIVER (job->driver));
- g_assert (GSK_IS_GL_COMMAND_QUEUE (job->command_queue));
+ g_assert (GSK_IS_NGL_DRIVER (job->driver));
+ g_assert (GSK_IS_NGL_COMMAND_QUEUE (job->command_queue));
if (node_is_invisible (node) ||
- !gsk_gl_render_job_node_overlaps_clip (job, node))
+ !gsk_ngl_render_job_node_overlaps_clip (job, node))
return;
switch (gsk_render_node_get_node_type (node))
{
case GSK_BLEND_NODE:
- gsk_gl_render_job_visit_blend_node (job, node);
+ gsk_ngl_render_job_visit_blend_node (job, node);
break;
case GSK_BLUR_NODE:
if (gsk_blur_node_get_radius (node) > 0)
- gsk_gl_render_job_visit_blur_node (job, node);
+ gsk_ngl_render_job_visit_blur_node (job, node);
else
- gsk_gl_render_job_visit_node (job, gsk_blur_node_get_child (node));
+ gsk_ngl_render_job_visit_node (job, gsk_blur_node_get_child (node));
break;
case GSK_BORDER_NODE:
if (gsk_border_node_get_uniform (node))
- gsk_gl_render_job_visit_uniform_border_node (job, node);
+ gsk_ngl_render_job_visit_uniform_border_node (job, node);
else
- gsk_gl_render_job_visit_border_node (job, node);
+ gsk_ngl_render_job_visit_border_node (job, node);
break;
case GSK_CLIP_NODE:
- gsk_gl_render_job_visit_clip_node (job, node);
+ gsk_ngl_render_job_visit_clip_node (job, node);
break;
case GSK_COLOR_NODE:
- gsk_gl_render_job_visit_color_node (job, node);
+ gsk_ngl_render_job_visit_color_node (job, node);
break;
case GSK_COLOR_MATRIX_NODE:
- gsk_gl_render_job_visit_color_matrix_node (job, node);
+ gsk_ngl_render_job_visit_color_matrix_node (job, node);
break;
case GSK_CONIC_GRADIENT_NODE:
if (gsk_conic_gradient_node_get_n_color_stops (node) < MAX_GRADIENT_STOPS)
- gsk_gl_render_job_visit_conic_gradient_node (job, node);
+ gsk_ngl_render_job_visit_conic_gradient_node (job, node);
else
- gsk_gl_render_job_visit_as_fallback (job, node);
+ gsk_ngl_render_job_visit_as_fallback (job, node);
break;
case GSK_CONTAINER_NODE:
@@ -3304,7 +3304,7 @@ gsk_gl_render_job_visit_node (GskGLRenderJob *job,
for (guint i = 0; i < n_children; i++)
{
const GskRenderNode *child = gsk_container_node_get_child (node, i);
- gsk_gl_render_job_visit_node (job, child);
+ gsk_ngl_render_job_visit_node (job, child);
}
}
break;
@@ -3316,83 +3316,83 @@ gsk_gl_render_job_visit_node (GskGLRenderJob *job,
float progress = gsk_cross_fade_node_get_progress (node);
if (progress <= 0.0f)
- gsk_gl_render_job_visit_node (job, gsk_cross_fade_node_get_start_child (node));
+ gsk_ngl_render_job_visit_node (job, gsk_cross_fade_node_get_start_child (node));
else if (progress >= 1.0f || equal_texture_nodes (start_node, end_node))
- gsk_gl_render_job_visit_node (job, gsk_cross_fade_node_get_end_child (node));
+ gsk_ngl_render_job_visit_node (job, gsk_cross_fade_node_get_end_child (node));
else
- gsk_gl_render_job_visit_cross_fade_node (job, node);
+ gsk_ngl_render_job_visit_cross_fade_node (job, node);
}
break;
case GSK_DEBUG_NODE:
/* Debug nodes are ignored because draws get reordered anyway */
- gsk_gl_render_job_visit_node (job, gsk_debug_node_get_child (node));
+ gsk_ngl_render_job_visit_node (job, gsk_debug_node_get_child (node));
break;
case GSK_GL_SHADER_NODE:
- gsk_gl_render_job_visit_gl_shader_node (job, node);
+ gsk_ngl_render_job_visit_gl_shader_node (job, node);
break;
case GSK_INSET_SHADOW_NODE:
if (gsk_inset_shadow_node_get_blur_radius (node) > 0)
- gsk_gl_render_job_visit_blurred_inset_shadow_node (job, node);
+ gsk_ngl_render_job_visit_blurred_inset_shadow_node (job, node);
else
- gsk_gl_render_job_visit_unblurred_inset_shadow_node (job, node);
+ gsk_ngl_render_job_visit_unblurred_inset_shadow_node (job, node);
break;
case GSK_LINEAR_GRADIENT_NODE:
case GSK_REPEATING_LINEAR_GRADIENT_NODE:
if (gsk_linear_gradient_node_get_n_color_stops (node) < MAX_GRADIENT_STOPS)
- gsk_gl_render_job_visit_linear_gradient_node (job, node);
+ gsk_ngl_render_job_visit_linear_gradient_node (job, node);
else
- gsk_gl_render_job_visit_as_fallback (job, node);
+ gsk_ngl_render_job_visit_as_fallback (job, node);
break;
case GSK_OPACITY_NODE:
- gsk_gl_render_job_visit_opacity_node (job, node);
+ gsk_ngl_render_job_visit_opacity_node (job, node);
break;
case GSK_OUTSET_SHADOW_NODE:
if (gsk_outset_shadow_node_get_blur_radius (node) > 0)
- gsk_gl_render_job_visit_blurred_outset_shadow_node (job, node);
+ gsk_ngl_render_job_visit_blurred_outset_shadow_node (job, node);
else
- gsk_gl_render_job_visit_unblurred_outset_shadow_node (job, node);
+ gsk_ngl_render_job_visit_unblurred_outset_shadow_node (job, node);
break;
case GSK_RADIAL_GRADIENT_NODE:
case GSK_REPEATING_RADIAL_GRADIENT_NODE:
- gsk_gl_render_job_visit_radial_gradient_node (job, node);
+ gsk_ngl_render_job_visit_radial_gradient_node (job, node);
break;
case GSK_REPEAT_NODE:
- gsk_gl_render_job_visit_repeat_node (job, node);
+ gsk_ngl_render_job_visit_repeat_node (job, node);
break;
case GSK_ROUNDED_CLIP_NODE:
- gsk_gl_render_job_visit_rounded_clip_node (job, node);
+ gsk_ngl_render_job_visit_rounded_clip_node (job, node);
break;
case GSK_SHADOW_NODE:
- gsk_gl_render_job_visit_shadow_node (job, node);
+ gsk_ngl_render_job_visit_shadow_node (job, node);
break;
case GSK_TEXT_NODE:
- gsk_gl_render_job_visit_text_node (job,
- node,
- gsk_text_node_get_color (node),
- FALSE);
+ gsk_ngl_render_job_visit_text_node (job,
+ node,
+ gsk_text_node_get_color (node),
+ FALSE);
break;
case GSK_TEXTURE_NODE:
- gsk_gl_render_job_visit_texture_node (job, node);
+ gsk_ngl_render_job_visit_texture_node (job, node);
break;
case GSK_TRANSFORM_NODE:
- gsk_gl_render_job_visit_transform_node (job, node);
+ gsk_ngl_render_job_visit_transform_node (job, node);
break;
case GSK_CAIRO_NODE:
- gsk_gl_render_job_visit_as_fallback (job, node);
+ gsk_ngl_render_job_visit_as_fallback (job, node);
break;
case GSK_NOT_A_RENDER_NODE:
@@ -3403,9 +3403,9 @@ gsk_gl_render_job_visit_node (GskGLRenderJob *job,
}
static gboolean
-gsk_gl_render_job_visit_node_with_offscreen (GskGLRenderJob *job,
- const GskRenderNode *node,
- GskGLRenderOffscreen *offscreen)
+gsk_ngl_render_job_visit_node_with_offscreen (GskNglRenderJob *job,
+ const GskRenderNode *node,
+ GskNglRenderOffscreen *offscreen)
{
GskTextureKey key;
guint cached_id;
@@ -3430,7 +3430,7 @@ gsk_gl_render_job_visit_node_with_offscreen (GskGLRenderJob *job,
offscreen->force_offscreen == FALSE)
{
GdkTexture *texture = gsk_texture_node_get_texture (node);
- gsk_gl_render_job_upload_texture (job, texture, offscreen);
+ gsk_ngl_render_job_upload_texture (job, texture, offscreen);
g_assert (offscreen->was_offscreen == FALSE);
return TRUE;
}
@@ -3445,7 +3445,7 @@ gsk_gl_render_job_visit_node_with_offscreen (GskGLRenderJob *job,
key.scale_y = job->scale_y;
key.filter = filter;
- cached_id = gsk_next_driver_lookup_texture (job->driver, &key);
+ cached_id = gsk_ngl_driver_lookup_texture (job->driver, &key);
if (cached_id != 0)
{
@@ -3485,7 +3485,7 @@ gsk_gl_render_job_visit_node_with_offscreen (GskGLRenderJob *job,
}
}
- GskGLRenderTarget *render_target;
+ GskNglRenderTarget *render_target;
graphene_matrix_t prev_projection;
graphene_rect_t prev_viewport;
graphene_rect_t viewport;
@@ -3494,7 +3494,7 @@ gsk_gl_render_job_visit_node_with_offscreen (GskGLRenderJob *job,
float prev_alpha;
guint prev_fbo;
- if (!gsk_next_driver_create_render_target (job->driver,
+ if (!gsk_ngl_driver_create_render_target (job->driver,
scaled_width, scaled_height,
filter, filter,
&render_target))
@@ -3516,55 +3516,55 @@ gsk_gl_render_job_visit_node_with_offscreen (GskGLRenderJob *job,
render_target->framebuffer_id);
}
- gsk_gl_render_job_transform_bounds (job, offscreen->bounds, &viewport);
+ gsk_ngl_render_job_transform_bounds (job, offscreen->bounds, &viewport);
/* Code above will scale the size with the scale we use in the render ops,
* but for the viewport size, we need our own size limited by the texture size */
viewport.size.width = scaled_width;
viewport.size.height = scaled_height;
- gsk_gl_render_job_set_viewport (job, &viewport, &prev_viewport);
- gsk_gl_render_job_set_projection_from_rect (job, &job->viewport, &prev_projection);
- gsk_gl_render_job_set_modelview (job, gsk_transform_scale (NULL, scale_x, scale_y));
- prev_alpha = gsk_gl_render_job_set_alpha (job, 1.0f);
+ gsk_ngl_render_job_set_viewport (job, &viewport, &prev_viewport);
+ gsk_ngl_render_job_set_projection_from_rect (job, &job->viewport, &prev_projection);
+ gsk_ngl_render_job_set_modelview (job, gsk_transform_scale (NULL, scale_x, scale_y));
+ prev_alpha = gsk_ngl_render_job_set_alpha (job, 1.0f);
job->offset_x = offset_x;
job->offset_y = offset_y;
- prev_fbo = gsk_gl_command_queue_bind_framebuffer (job->command_queue, render_target->framebuffer_id);
- gsk_gl_command_queue_clear (job->command_queue, 0, &job->viewport);
+ prev_fbo = gsk_ngl_command_queue_bind_framebuffer (job->command_queue, render_target->framebuffer_id);
+ gsk_ngl_command_queue_clear (job->command_queue, 0, &job->viewport);
if (offscreen->reset_clip)
- gsk_gl_render_job_push_clip (job, &GSK_ROUNDED_RECT_INIT_FROM_RECT (job->viewport));
+ gsk_ngl_render_job_push_clip (job, &GSK_ROUNDED_RECT_INIT_FROM_RECT (job->viewport));
- gsk_gl_render_job_visit_node (job, node);
+ gsk_ngl_render_job_visit_node (job, node);
if (offscreen->reset_clip)
- gsk_gl_render_job_pop_clip (job);
+ gsk_ngl_render_job_pop_clip (job);
- gsk_gl_render_job_pop_modelview (job);
- gsk_gl_render_job_set_viewport (job, &prev_viewport, NULL);
- gsk_gl_render_job_set_projection (job, &prev_projection);
- gsk_gl_render_job_set_alpha (job, prev_alpha);
- gsk_gl_command_queue_bind_framebuffer (job->command_queue, prev_fbo);
+ gsk_ngl_render_job_pop_modelview (job);
+ gsk_ngl_render_job_set_viewport (job, &prev_viewport, NULL);
+ gsk_ngl_render_job_set_projection (job, &prev_projection);
+ gsk_ngl_render_job_set_alpha (job, prev_alpha);
+ gsk_ngl_command_queue_bind_framebuffer (job->command_queue, prev_fbo);
job->offset_x = offset_x;
job->offset_y = offset_y;
offscreen->was_offscreen = TRUE;
- offscreen->texture_id = gsk_next_driver_release_render_target (job->driver,
- render_target,
- FALSE);
+ offscreen->texture_id = gsk_ngl_driver_release_render_target (job->driver,
+ render_target,
+ FALSE);
init_full_texture_region (offscreen);
if (!offscreen->do_not_cache)
- gsk_next_driver_cache_texture (job->driver, &key, offscreen->texture_id);
+ gsk_ngl_driver_cache_texture (job->driver, &key, offscreen->texture_id);
return TRUE;
}
void
-gsk_gl_render_job_render_flipped (GskGLRenderJob *job,
- GskRenderNode *root)
+gsk_ngl_render_job_render_flipped (GskNglRenderJob *job,
+ GskRenderNode *root)
{
graphene_matrix_t proj;
guint framebuffer_id;
@@ -3573,7 +3573,7 @@ gsk_gl_render_job_render_flipped (GskGLRenderJob *job,
g_return_if_fail (job != NULL);
g_return_if_fail (root != NULL);
- g_return_if_fail (GSK_IS_NEXT_DRIVER (job->driver));
+ g_return_if_fail (GSK_IS_NGL_DRIVER (job->driver));
surface_height = job->viewport.size.height;
@@ -3586,7 +3586,7 @@ gsk_gl_render_job_render_flipped (GskGLRenderJob *job,
ORTHO_FAR_PLANE);
graphene_matrix_scale (&proj, 1, -1, 1);
- if (!gsk_gl_command_queue_create_render_target (job->command_queue,
+ if (!gsk_ngl_command_queue_create_render_target (job->command_queue,
MAX (1, job->viewport.size.width),
MAX (1, job->viewport.size.height),
GL_NEAREST, GL_NEAREST,
@@ -3594,29 +3594,29 @@ gsk_gl_render_job_render_flipped (GskGLRenderJob *job,
return;
/* Setup drawing to our offscreen texture/framebuffer which is flipped */
- gsk_gl_command_queue_bind_framebuffer (job->command_queue, framebuffer_id);
- gsk_gl_command_queue_clear (job->command_queue, 0, &job->viewport);
+ gsk_ngl_command_queue_bind_framebuffer (job->command_queue, framebuffer_id);
+ gsk_ngl_command_queue_clear (job->command_queue, 0, &job->viewport);
/* Visit all nodes creating batches */
gdk_gl_context_push_debug_group (job->command_queue->context, "Building command queue");
- gsk_gl_render_job_visit_node (job, root);
+ gsk_ngl_render_job_visit_node (job, root);
gdk_gl_context_pop_debug_group (job->command_queue->context);
/* Now draw to our real destination, but flipped */
- gsk_gl_render_job_set_alpha (job, 1.0f);
- gsk_gl_command_queue_bind_framebuffer (job->command_queue, job->framebuffer);
- gsk_gl_command_queue_clear (job->command_queue, 0, &job->viewport);
- gsk_gl_render_job_begin_draw (job, job->driver->blit);
- gsk_gl_program_set_uniform_texture (job->driver->blit,
- UNIFORM_SHARED_SOURCE, 0,
- GL_TEXTURE_2D,
- GL_TEXTURE0,
- texture_id);
- gsk_gl_render_job_draw_rect (job, &job->viewport);
- gsk_gl_render_job_end_draw (job);
+ gsk_ngl_render_job_set_alpha (job, 1.0f);
+ gsk_ngl_command_queue_bind_framebuffer (job->command_queue, job->framebuffer);
+ gsk_ngl_command_queue_clear (job->command_queue, 0, &job->viewport);
+ gsk_ngl_render_job_begin_draw (job, job->driver->blit);
+ gsk_ngl_program_set_uniform_texture (job->driver->blit,
+ UNIFORM_SHARED_SOURCE, 0,
+ GL_TEXTURE_2D,
+ GL_TEXTURE0,
+ texture_id);
+ gsk_ngl_render_job_draw_rect (job, &job->viewport);
+ gsk_ngl_render_job_end_draw (job);
gdk_gl_context_push_debug_group (job->command_queue->context, "Executing command queue");
- gsk_gl_command_queue_execute (job->command_queue, surface_height, 1, NULL);
+ gsk_ngl_command_queue_execute (job->command_queue, surface_height, 1, NULL);
gdk_gl_context_pop_debug_group (job->command_queue->context);
glDeleteFramebuffers (1, &framebuffer_id);
@@ -3624,8 +3624,8 @@ gsk_gl_render_job_render_flipped (GskGLRenderJob *job,
}
void
-gsk_gl_render_job_render (GskGLRenderJob *job,
- GskRenderNode *root)
+gsk_ngl_render_job_render (GskNglRenderJob *job,
+ GskRenderNode *root)
{
G_GNUC_UNUSED gint64 start_time;
guint scale_factor;
@@ -3633,21 +3633,21 @@ gsk_gl_render_job_render (GskGLRenderJob *job,
g_return_if_fail (job != NULL);
g_return_if_fail (root != NULL);
- g_return_if_fail (GSK_IS_NEXT_DRIVER (job->driver));
+ g_return_if_fail (GSK_IS_NGL_DRIVER (job->driver));
scale_factor = MAX (job->scale_x, job->scale_y);
surface_height = job->viewport.size.height;
- gsk_gl_command_queue_make_current (job->command_queue);
+ gsk_ngl_command_queue_make_current (job->command_queue);
/* Build the command queue using the shared GL context for all renderers
* on the same display.
*/
start_time = GDK_PROFILER_CURRENT_TIME;
gdk_gl_context_push_debug_group (job->command_queue->context, "Building command queue");
- gsk_gl_command_queue_bind_framebuffer (job->command_queue, job->framebuffer);
- gsk_gl_command_queue_clear (job->command_queue, 0, &job->viewport);
- gsk_gl_render_job_visit_node (job, root);
+ gsk_ngl_command_queue_bind_framebuffer (job->command_queue, job->framebuffer);
+ gsk_ngl_command_queue_clear (job->command_queue, 0, &job->viewport);
+ gsk_ngl_render_job_visit_node (job, root);
gdk_gl_context_pop_debug_group (job->command_queue->context);
gdk_profiler_add_mark (start_time, GDK_PROFILER_CURRENT_TIME-start_time, "Build GL command queue", "");
@@ -3655,7 +3655,7 @@ gsk_gl_render_job_render (GskGLRenderJob *job,
/* At this point the atlases have uploaded content while we processed
* nodes but have not necessarily been used by the commands in the queue.
*/
- gsk_next_driver_save_atlases_to_png (job->driver, NULL);
+ gsk_ngl_driver_save_atlases_to_png (job->driver, NULL);
#endif
/* But now for executing the command queue, we want to use the context
@@ -3663,42 +3663,42 @@ gsk_gl_render_job_render (GskGLRenderJob *job,
* is bound to that context.
*/
start_time = GDK_PROFILER_CURRENT_TIME;
- gsk_gl_command_queue_make_current (job->command_queue);
+ gsk_ngl_command_queue_make_current (job->command_queue);
gdk_gl_context_push_debug_group (job->command_queue->context, "Executing command queue");
- gsk_gl_command_queue_execute (job->command_queue, surface_height, scale_factor, job->region);
+ gsk_ngl_command_queue_execute (job->command_queue, surface_height, scale_factor, job->region);
gdk_gl_context_pop_debug_group (job->command_queue->context);
gdk_profiler_add_mark (start_time, GDK_PROFILER_CURRENT_TIME-start_time, "Execute GL command queue", "");
}
void
-gsk_gl_render_job_set_debug_fallback (GskGLRenderJob *job,
- gboolean debug_fallback)
+gsk_ngl_render_job_set_debug_fallback (GskNglRenderJob *job,
+ gboolean debug_fallback)
{
g_return_if_fail (job != NULL);
job->debug_fallback = !!debug_fallback;
}
-GskGLRenderJob *
-gsk_gl_render_job_new (GskNextDriver *driver,
- const graphene_rect_t *viewport,
- float scale_factor,
- const cairo_region_t *region,
- guint framebuffer)
+GskNglRenderJob *
+gsk_ngl_render_job_new (GskNglDriver *driver,
+ const graphene_rect_t *viewport,
+ float scale_factor,
+ const cairo_region_t *region,
+ guint framebuffer)
{
const graphene_rect_t *clip_rect = viewport;
graphene_rect_t transformed_extents;
- GskGLRenderJob *job;
+ GskNglRenderJob *job;
- g_return_val_if_fail (GSK_IS_NEXT_DRIVER (driver), NULL);
+ g_return_val_if_fail (GSK_IS_NGL_DRIVER (driver), NULL);
g_return_val_if_fail (viewport != NULL, NULL);
g_return_val_if_fail (scale_factor > 0, NULL);
- job = g_slice_new0 (GskGLRenderJob);
+ job = g_slice_new0 (GskNglRenderJob);
job->driver = g_object_ref (driver);
job->command_queue = job->driver->command_queue;
- job->clip = g_array_sized_new (FALSE, FALSE, sizeof (GskGLRenderClip), 16);
- job->modelview = g_array_sized_new (FALSE, FALSE, sizeof (GskGLRenderModelview), 16);
+ job->clip = g_array_sized_new (FALSE, FALSE, sizeof (GskNglRenderClip), 16);
+ job->modelview = g_array_sized_new (FALSE, FALSE, sizeof (GskNglRenderModelview), 16);
job->framebuffer = framebuffer;
job->offset_x = 0;
job->offset_y = 0;
@@ -3706,9 +3706,9 @@ gsk_gl_render_job_new (GskNextDriver *driver,
job->scale_y = scale_factor;
job->viewport = *viewport;
- gsk_gl_render_job_set_alpha (job, 1.0);
- gsk_gl_render_job_set_projection_from_rect (job, viewport, NULL);
- gsk_gl_render_job_set_modelview (job, gsk_transform_scale (NULL, scale_factor, scale_factor));
+ gsk_ngl_render_job_set_alpha (job, 1.0);
+ gsk_ngl_render_job_set_projection_from_rect (job, viewport, NULL);
+ gsk_ngl_render_job_set_modelview (job, gsk_transform_scale (NULL, scale_factor, scale_factor));
/* Setup our initial clip. If region is NULL then we are drawing the
* whole viewport. Otherwise, we need to convert the region to a
@@ -3720,34 +3720,34 @@ gsk_gl_render_job_new (GskNextDriver *driver,
cairo_rectangle_int_t extents;
cairo_region_get_extents (region, &extents);
- gsk_gl_render_job_transform_bounds (job,
- &GRAPHENE_RECT_INIT (extents.x,
- extents.y,
- extents.width,
- extents.height),
- &transformed_extents);
+ gsk_ngl_render_job_transform_bounds (job,
+ &GRAPHENE_RECT_INIT (extents.x,
+ extents.y,
+ extents.width,
+ extents.height),
+ &transformed_extents);
clip_rect = &transformed_extents;
job->region = cairo_region_create_rectangle (&extents);
}
- gsk_gl_render_job_push_clip (job,
- &GSK_ROUNDED_RECT_INIT (clip_rect->origin.x,
- clip_rect->origin.y,
- clip_rect->size.width,
- clip_rect->size.height));
+ gsk_ngl_render_job_push_clip (job,
+ &GSK_ROUNDED_RECT_INIT (clip_rect->origin.x,
+ clip_rect->origin.y,
+ clip_rect->size.width,
+ clip_rect->size.height));
return job;
}
void
-gsk_gl_render_job_free (GskGLRenderJob *job)
+gsk_ngl_render_job_free (GskNglRenderJob *job)
{
job->current_modelview = NULL;
job->current_clip = NULL;
while (job->modelview->len > 0)
{
- GskGLRenderModelview *modelview = &g_array_index (job->modelview, GskGLRenderModelview,
job->modelview->len-1);
+ GskNglRenderModelview *modelview = &g_array_index (job->modelview, GskNglRenderModelview,
job->modelview->len-1);
g_clear_pointer (&modelview->transform, gsk_transform_unref);
job->modelview->len--;
}
@@ -3756,5 +3756,5 @@ gsk_gl_render_job_free (GskGLRenderJob *job)
g_clear_pointer (&job->region, cairo_region_destroy);
g_clear_pointer (&job->modelview, g_array_unref);
g_clear_pointer (&job->clip, g_array_unref);
- g_slice_free (GskGLRenderJob, job);
+ g_slice_free (GskNglRenderJob, job);
}
diff --git a/gsk/ngl/gsknglrenderjobprivate.h b/gsk/ngl/gsknglrenderjobprivate.h
new file mode 100644
index 0000000000..ba3f3e49b7
--- /dev/null
+++ b/gsk/ngl/gsknglrenderjobprivate.h
@@ -0,0 +1,39 @@
+/* gsknglrenderjobprivate.h
+ *
+ * Copyright 2020 Christian Hergert <chergert redhat com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * SPDX-License-Identifier: LGPL-2.1-or-later
+ */
+
+#ifndef __GSK_NGL_RENDER_JOB_H__
+#define __GSK_NGL_RENDER_JOB_H__
+
+#include "gskngltypesprivate.h"
+
+GskNglRenderJob *gsk_ngl_render_job_new (GskNglDriver *driver,
+ const graphene_rect_t *viewport,
+ float scale_factor,
+ const cairo_region_t *region,
+ guint framebuffer);
+void gsk_ngl_render_job_free (GskNglRenderJob *job);
+void gsk_ngl_render_job_render (GskNglRenderJob *job,
+ GskRenderNode *root);
+void gsk_ngl_render_job_render_flipped (GskNglRenderJob *job,
+ GskRenderNode *root);
+void gsk_ngl_render_job_set_debug_fallback (GskNglRenderJob *job,
+ gboolean debug_fallback);
+
+#endif /* __GSK_NGL_RENDER_JOB_H__ */
diff --git a/gsk/next/gskglshadowlibrary.c b/gsk/ngl/gsknglshadowlibrary.c
similarity index 62%
rename from gsk/next/gskglshadowlibrary.c
rename to gsk/ngl/gsknglshadowlibrary.c
index 24a9481fc2..bcf524c8b7 100644
--- a/gsk/next/gskglshadowlibrary.c
+++ b/gsk/ngl/gsknglshadowlibrary.c
@@ -1,4 +1,4 @@
-/* gskglshadowlibrary.c
+/* gsknglshadowlibrary.c
*
* Copyright 2020 Christian Hergert <chergert redhat com>
*
@@ -22,15 +22,15 @@
#include <string.h>
-#include "gskgldriverprivate.h"
-#include "gskglshadowlibraryprivate.h"
+#include "gskngldriverprivate.h"
+#include "gsknglshadowlibraryprivate.h"
#define MAX_UNUSED_FRAMES (16 * 5)
-struct _GskGLShadowLibrary
+struct _GskNglShadowLibrary
{
GObject parent_instance;
- GskNextDriver *driver;
+ GskNglDriver *driver;
GArray *shadows;
};
@@ -42,7 +42,7 @@ typedef struct _Shadow
gint64 last_used_in_frame;
} Shadow;
-G_DEFINE_TYPE (GskGLShadowLibrary, gsk_gl_shadow_library, G_TYPE_OBJECT)
+G_DEFINE_TYPE (GskNglShadowLibrary, gsk_ngl_shadow_library, G_TYPE_OBJECT)
enum {
PROP_0,
@@ -52,10 +52,10 @@ enum {
static GParamSpec *properties [N_PROPS];
-GskGLShadowLibrary *
-gsk_gl_shadow_library_new (GskNextDriver *driver)
+GskNglShadowLibrary *
+gsk_ngl_shadow_library_new (GskNglDriver *driver)
{
- g_return_val_if_fail (GSK_IS_NEXT_DRIVER (driver), NULL);
+ g_return_val_if_fail (GSK_IS_NGL_DRIVER (driver), NULL);
return g_object_new (GSK_TYPE_GL_SHADOW_LIBRARY,
"driver", driver,
@@ -63,29 +63,29 @@ gsk_gl_shadow_library_new (GskNextDriver *driver)
}
static void
-gsk_gl_shadow_library_dispose (GObject *object)
+gsk_ngl_shadow_library_dispose (GObject *object)
{
- GskGLShadowLibrary *self = (GskGLShadowLibrary *)object;
+ GskNglShadowLibrary *self = (GskNglShadowLibrary *)object;
for (guint i = 0; i < self->shadows->len; i++)
{
const Shadow *shadow = &g_array_index (self->shadows, Shadow, i);
- gsk_next_driver_release_texture_by_id (self->driver, shadow->texture_id);
+ gsk_ngl_driver_release_texture_by_id (self->driver, shadow->texture_id);
}
g_clear_pointer (&self->shadows, g_array_unref);
g_clear_object (&self->driver);
- G_OBJECT_CLASS (gsk_gl_shadow_library_parent_class)->dispose (object);
+ G_OBJECT_CLASS (gsk_ngl_shadow_library_parent_class)->dispose (object);
}
static void
-gsk_gl_shadow_library_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
+gsk_ngl_shadow_library_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
{
- GskGLShadowLibrary *self = GSK_GL_SHADOW_LIBRARY (object);
+ GskNglShadowLibrary *self = GSK_NGL_SHADOW_LIBRARY (object);
switch (prop_id)
{
@@ -99,12 +99,12 @@ gsk_gl_shadow_library_get_property (GObject *object,
}
static void
-gsk_gl_shadow_library_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
+gsk_ngl_shadow_library_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
{
- GskGLShadowLibrary *self = GSK_GL_SHADOW_LIBRARY (object);
+ GskNglShadowLibrary *self = GSK_NGL_SHADOW_LIBRARY (object);
switch (prop_id)
{
@@ -118,43 +118,43 @@ gsk_gl_shadow_library_set_property (GObject *object,
}
static void
-gsk_gl_shadow_library_class_init (GskGLShadowLibraryClass *klass)
+gsk_ngl_shadow_library_class_init (GskNglShadowLibraryClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
- object_class->dispose = gsk_gl_shadow_library_dispose;
- object_class->get_property = gsk_gl_shadow_library_get_property;
- object_class->set_property = gsk_gl_shadow_library_set_property;
+ object_class->dispose = gsk_ngl_shadow_library_dispose;
+ object_class->get_property = gsk_ngl_shadow_library_get_property;
+ object_class->set_property = gsk_ngl_shadow_library_set_property;
properties [PROP_DRIVER] =
g_param_spec_object ("driver",
"Driver",
"Driver",
- GSK_TYPE_NEXT_DRIVER,
+ GSK_TYPE_NGL_DRIVER,
(G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS));
g_object_class_install_properties (object_class, N_PROPS, properties);
}
static void
-gsk_gl_shadow_library_init (GskGLShadowLibrary *self)
+gsk_ngl_shadow_library_init (GskNglShadowLibrary *self)
{
self->shadows = g_array_new (FALSE, FALSE, sizeof (Shadow));
}
void
-gsk_gl_shadow_library_insert (GskGLShadowLibrary *self,
- const GskRoundedRect *outline,
- float blur_radius,
- guint texture_id)
+gsk_ngl_shadow_library_insert (GskNglShadowLibrary *self,
+ const GskRoundedRect *outline,
+ float blur_radius,
+ guint texture_id)
{
Shadow *shadow;
- g_assert (GSK_IS_GL_SHADOW_LIBRARY (self));
+ g_assert (GSK_IS_NGL_SHADOW_LIBRARY (self));
g_assert (outline != NULL);
g_assert (texture_id != 0);
- gsk_next_driver_mark_texture_permanent (self->driver, texture_id);
+ gsk_ngl_driver_mark_texture_permanent (self->driver, texture_id);
g_array_set_size (self->shadows, self->shadows->len + 1);
@@ -166,13 +166,13 @@ gsk_gl_shadow_library_insert (GskGLShadowLibrary *self,
}
guint
-gsk_gl_shadow_library_lookup (GskGLShadowLibrary *self,
- const GskRoundedRect *outline,
- float blur_radius)
+gsk_ngl_shadow_library_lookup (GskNglShadowLibrary *self,
+ const GskRoundedRect *outline,
+ float blur_radius)
{
Shadow *ret = NULL;
- g_assert (GSK_IS_GL_SHADOW_LIBRARY (self));
+ g_assert (GSK_IS_NGL_SHADOW_LIBRARY (self));
g_assert (outline != NULL);
/* Ensure GskRoundedRect is 12 packed floats without padding
@@ -203,13 +203,13 @@ gsk_gl_shadow_library_lookup (GskGLShadowLibrary *self,
}
void
-gsk_gl_shadow_library_begin_frame (GskGLShadowLibrary *self)
+gsk_ngl_shadow_library_begin_frame (GskNglShadowLibrary *self)
{
gint64 watermark;
int i;
int p;
- g_return_if_fail (GSK_IS_GL_SHADOW_LIBRARY (self));
+ g_return_if_fail (GSK_IS_NGL_SHADOW_LIBRARY (self));
watermark = self->driver->current_frame_id - MAX_UNUSED_FRAMES;
@@ -219,7 +219,7 @@ gsk_gl_shadow_library_begin_frame (GskGLShadowLibrary *self)
if (shadow->last_used_in_frame < watermark)
{
- gsk_next_driver_release_texture_by_id (self->driver, shadow->texture_id);
+ gsk_ngl_driver_release_texture_by_id (self->driver, shadow->texture_id);
g_array_remove_index_fast (self->shadows, i);
p--;
i--;
diff --git a/gsk/ngl/gsknglshadowlibraryprivate.h b/gsk/ngl/gsknglshadowlibraryprivate.h
new file mode 100644
index 0000000000..3c534663dc
--- /dev/null
+++ b/gsk/ngl/gsknglshadowlibraryprivate.h
@@ -0,0 +1,44 @@
+/* gsknglshadowlibraryprivate.h
+ *
+ * Copyright 2020 Christian Hergert <chergert redhat com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * SPDX-License-Identifier: LGPL-2.1-or-later
+ */
+
+#ifndef __GSK_NGL_SHADOW_LIBRARY_PRIVATE_H__
+#define __GSK_NGL_SHADOW_LIBRARY_PRIVATE_H__
+
+#include "gskngltexturelibraryprivate.h"
+
+G_BEGIN_DECLS
+
+#define GSK_TYPE_GL_SHADOW_LIBRARY (gsk_ngl_shadow_library_get_type())
+
+G_DECLARE_FINAL_TYPE (GskNglShadowLibrary, gsk_ngl_shadow_library, GSK, NGL_SHADOW_LIBRARY, GObject)
+
+GskNglShadowLibrary *gsk_ngl_shadow_library_new (GskNglDriver *driver);
+void gsk_ngl_shadow_library_begin_frame (GskNglShadowLibrary *self);
+guint gsk_ngl_shadow_library_lookup (GskNglShadowLibrary *self,
+ const GskRoundedRect *outline,
+ float blur_radius);
+void gsk_ngl_shadow_library_insert (GskNglShadowLibrary *self,
+ const GskRoundedRect *outline,
+ float blur_radius,
+ guint texture_id);
+
+G_END_DECLS
+
+#endif /* __GSK_NGL_SHADOW_LIBRARY_PRIVATE_H__ */
diff --git a/gsk/ngl/gskngltexturelibrary.c b/gsk/ngl/gskngltexturelibrary.c
new file mode 100644
index 0000000000..dc9303f373
--- /dev/null
+++ b/gsk/ngl/gskngltexturelibrary.c
@@ -0,0 +1,315 @@
+/* gskngltexturelibrary.c
+ *
+ * Copyright 2020 Christian Hergert <chergert redhat com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * SPDX-License-Identifier: LGPL-2.1-or-later
+ */
+
+#include "config.h"
+
+#include "gsknglcommandqueueprivate.h"
+#include "gskngldriverprivate.h"
+#include "gskngltexturelibraryprivate.h"
+
+G_DEFINE_ABSTRACT_TYPE (GskNglTextureLibrary, gsk_ngl_texture_library, G_TYPE_OBJECT)
+
+enum {
+ PROP_0,
+ PROP_DRIVER,
+ N_PROPS
+};
+
+static GParamSpec *properties [N_PROPS];
+
+static void
+gsk_ngl_texture_library_constructed (GObject *object)
+{
+ G_OBJECT_CLASS (gsk_ngl_texture_library_parent_class)->constructed (object);
+
+ g_assert (GSK_NGL_TEXTURE_LIBRARY (object)->hash_table != NULL);
+}
+
+static void
+gsk_ngl_texture_library_dispose (GObject *object)
+{
+ GskNglTextureLibrary *self = (GskNglTextureLibrary *)object;
+
+ g_clear_object (&self->driver);
+
+ G_OBJECT_CLASS (gsk_ngl_texture_library_parent_class)->dispose (object);
+}
+
+static void
+gsk_ngl_texture_library_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ GskNglTextureLibrary *self = GSK_NGL_TEXTURE_LIBRARY (object);
+
+ switch (prop_id)
+ {
+ case PROP_DRIVER:
+ g_value_set_object (value, self->driver);
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ }
+}
+
+static void
+gsk_ngl_texture_library_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ GskNglTextureLibrary *self = GSK_NGL_TEXTURE_LIBRARY (object);
+
+ switch (prop_id)
+ {
+ case PROP_DRIVER:
+ self->driver = g_value_dup_object (value);
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ }
+}
+
+static void
+gsk_ngl_texture_library_class_init (GskNglTextureLibraryClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->constructed = gsk_ngl_texture_library_constructed;
+ object_class->dispose = gsk_ngl_texture_library_dispose;
+ object_class->get_property = gsk_ngl_texture_library_get_property;
+ object_class->set_property = gsk_ngl_texture_library_set_property;
+
+ properties [PROP_DRIVER] =
+ g_param_spec_object ("driver",
+ "Driver",
+ "Driver",
+ GSK_TYPE_NGL_DRIVER,
+ (G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_properties (object_class, N_PROPS, properties);
+}
+
+static void
+gsk_ngl_texture_library_init (GskNglTextureLibrary *self)
+{
+}
+
+void
+gsk_ngl_texture_library_set_funcs (GskNglTextureLibrary *self,
+ GHashFunc hash_func,
+ GEqualFunc equal_func,
+ GDestroyNotify key_destroy,
+ GDestroyNotify value_destroy)
+{
+ g_return_if_fail (GSK_IS_NGL_TEXTURE_LIBRARY (self));
+ g_return_if_fail (self->hash_table == NULL);
+
+ self->hash_table = g_hash_table_new_full (hash_func, equal_func,
+ key_destroy, value_destroy);
+}
+
+void
+gsk_ngl_texture_library_begin_frame (GskNglTextureLibrary *self)
+{
+ g_return_if_fail (GSK_IS_NGL_TEXTURE_LIBRARY (self));
+
+ if (GSK_NGL_TEXTURE_LIBRARY_GET_CLASS (self)->begin_frame)
+ GSK_NGL_TEXTURE_LIBRARY_GET_CLASS (self)->begin_frame (self);
+}
+
+void
+gsk_ngl_texture_library_end_frame (GskNglTextureLibrary *self)
+{
+ g_return_if_fail (GSK_IS_NGL_TEXTURE_LIBRARY (self));
+
+ if (GSK_NGL_TEXTURE_LIBRARY_GET_CLASS (self)->end_frame)
+ GSK_NGL_TEXTURE_LIBRARY_GET_CLASS (self)->end_frame (self);
+}
+
+static GskNglTexture *
+gsk_ngl_texture_library_pack_one (GskNglTextureLibrary *self,
+ guint width,
+ guint height)
+{
+ GskNglTexture *texture;
+
+ g_assert (GSK_IS_NGL_TEXTURE_LIBRARY (self));
+
+ if (width > self->driver->command_queue->max_texture_size ||
+ height > self->driver->command_queue->max_texture_size)
+ {
+ g_warning ("Clipping requested texture of size %ux%u to maximum allowable size %u.",
+ width, height, self->driver->command_queue->max_texture_size);
+ width = MIN (width, self->driver->command_queue->max_texture_size);
+ height = MIN (height, self->driver->command_queue->max_texture_size);
+ }
+
+ texture = gsk_ngl_driver_create_texture (self->driver, width, height, GL_LINEAR, GL_LINEAR);
+ texture->permanent = TRUE;
+
+ return texture;
+}
+
+static inline gboolean
+gsk_ngl_texture_atlas_pack (GskNglTextureAtlas *self,
+ int width,
+ int height,
+ int *out_x,
+ int *out_y)
+{
+ stbrp_rect rect;
+
+ rect.w = width;
+ rect.h = height;
+
+ stbrp_pack_rects (&self->context, &rect, 1);
+
+ if (rect.was_packed)
+ {
+ *out_x = rect.x;
+ *out_y = rect.y;
+ }
+
+ return rect.was_packed;
+}
+
+static void
+gsk_ngl_texture_atlases_pack (GskNglDriver *driver,
+ int width,
+ int height,
+ GskNglTextureAtlas **out_atlas,
+ int *out_x,
+ int *out_y)
+{
+ GskNglTextureAtlas *atlas = NULL;
+ int x, y;
+
+ for (guint i = 0; i < driver->atlases->len; i++)
+ {
+ atlas = g_ptr_array_index (driver->atlases, i);
+
+ if (gsk_ngl_texture_atlas_pack (atlas, width, height, &x, &y))
+ break;
+
+ atlas = NULL;
+ }
+
+ if (atlas == NULL)
+ {
+ /* No atlas has enough space, so create a new one... */
+ atlas = gsk_ngl_driver_create_atlas (driver);
+
+ /* Pack it onto that one, which surely has enough space... */
+ if (!gsk_ngl_texture_atlas_pack (atlas, width, height, &x, &y))
+ g_assert_not_reached ();
+ }
+
+ *out_atlas = atlas;
+ *out_x = x;
+ *out_y = y;
+}
+
+gpointer
+gsk_ngl_texture_library_pack (GskNglTextureLibrary *self,
+ gpointer key,
+ gsize valuelen,
+ guint width,
+ guint height,
+ int padding,
+ guint *out_packed_x,
+ guint *out_packed_y)
+{
+ GskNglTextureAtlasEntry *entry;
+ GskNglTextureAtlas *atlas = NULL;
+
+ g_assert (GSK_IS_NGL_TEXTURE_LIBRARY (self));
+ g_assert (key != NULL);
+ g_assert (valuelen > sizeof (GskNglTextureAtlasEntry));
+ g_assert (out_packed_x != NULL);
+ g_assert (out_packed_y != NULL);
+
+ entry = g_slice_alloc0 (valuelen);
+ entry->n_pixels = width * height;
+ entry->accessed = TRUE;
+
+ /* If our size is invisible then we just want an entry in the
+ * cache for faster lookups, but do not actually spend any texture
+ * allocations on this entry.
+ */
+ if (width <= 0 && height <= 0)
+ {
+ entry->is_atlased = FALSE;
+ entry->texture = NULL;
+ entry->area.x = 0.0f;
+ entry->area.y = 0.0f;
+ entry->area.x2 = 0.0f;
+ entry->area.y2 = 0.0f;
+
+ *out_packed_x = 0;
+ *out_packed_y = 0;
+ }
+ else if (width <= self->max_entry_size && height <= self->max_entry_size)
+ {
+ int packed_x;
+ int packed_y;
+
+ gsk_ngl_texture_atlases_pack (self->driver,
+ padding + width + padding,
+ padding + height + padding,
+ &atlas,
+ &packed_x,
+ &packed_y);
+
+ entry->atlas = atlas;
+ entry->is_atlased = TRUE;
+ entry->area.x = (float)(packed_x + padding) / atlas->width;
+ entry->area.y = (float)(packed_y + padding) / atlas->height;
+ entry->area.x2 = entry->area.x + (float)width / atlas->width;
+ entry->area.y2 = entry->area.y + (float)height / atlas->height;
+
+ *out_packed_x = packed_x;
+ *out_packed_y = packed_y;
+ }
+ else
+ {
+ GskNglTexture *texture = gsk_ngl_texture_library_pack_one (self,
+ padding + width + padding,
+ padding + height + padding);
+
+ entry->texture = texture;
+ entry->is_atlased = FALSE;
+ entry->accessed = TRUE;
+ entry->area.x = 0.0f;
+ entry->area.y = 0.0f;
+ entry->area.x2 = 1.0f;
+ entry->area.y2 = 1.0f;
+
+ *out_packed_x = padding;
+ *out_packed_y = padding;
+ }
+
+ g_hash_table_insert (self->hash_table, key, entry);
+
+ return entry;
+}
diff --git a/gsk/ngl/gskngltexturelibraryprivate.h b/gsk/ngl/gskngltexturelibraryprivate.h
new file mode 100644
index 0000000000..56c3d604cc
--- /dev/null
+++ b/gsk/ngl/gskngltexturelibraryprivate.h
@@ -0,0 +1,202 @@
+/* gskngltexturelibraryprivate.h
+ *
+ * Copyright 2020 Christian Hergert <chergert redhat com>
+ *
+ * This file is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU Lesser General Public License as published by the Free
+ * Software Foundation; either version 2.1 of the License, or (at your option)
+ * any later version.
+ *
+ * This file is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
+ * License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * SPDX-License-Identifier: LGPL-2.1-or-later
+ */
+
+#ifndef __GSK_NGL_TEXTURE_LIBRARY_PRIVATE_H__
+#define __GSK_NGL_TEXTURE_LIBRARY_PRIVATE_H__
+
+#include "gskngltypesprivate.h"
+#include "gskngltexturepoolprivate.h"
+
+#include "../gl/stb_rect_pack.h"
+
+G_BEGIN_DECLS
+
+#define GSK_TYPE_GL_TEXTURE_LIBRARY (gsk_ngl_texture_library_get_type ())
+#define GSK_NGL_TEXTURE_LIBRARY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj),
GSK_TYPE_GL_TEXTURE_LIBRARY, GskNglTextureLibrary))
+#define GSK_IS_NGL_TEXTURE_LIBRARY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj),
GSK_TYPE_GL_TEXTURE_LIBRARY))
+#define GSK_NGL_TEXTURE_LIBRARY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass),
GSK_TYPE_GL_TEXTURE_LIBRARY, GskNglTextureLibraryClass))
+#define GSK_IS_NGL_TEXTURE_LIBRARY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass),
GSK_TYPE_GL_TEXTURE_LIBRARY))
+#define GSK_NGL_TEXTURE_LIBRARY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj),
GSK_TYPE_GL_TEXTURE_LIBRARY, GskNglTextureLibraryClass))
+
+typedef struct _GskNglTextureAtlas
+{
+ struct stbrp_context context;
+ struct stbrp_node *nodes;
+
+ int width;
+ int height;
+
+ guint texture_id;
+
+ /* Pixels of rects that have been used at some point,
+ * But are now unused.
+ */
+ int unused_pixels;
+
+ void *user_data;
+} GskNglTextureAtlas;
+
+typedef struct _GskNglTextureAtlasEntry
+{
+ /* A backreference to either the atlas or texture containing
+ * the contents of the atlas entry. For larger items, no atlas
+ * is used and instead a direct texture.
+ */
+ union {
+ GskNglTextureAtlas *atlas;
+ GskNglTexture *texture;
+ };
+
+ /* The area within the atlas translated to 0..1 bounds */
+ struct {
+ float x;
+ float y;
+ float x2;
+ float y2;
+ } area;
+
+ /* Number of pixels in the entry, used to calculate usage
+ * of an atlas while processing.
+ */
+ guint n_pixels : 29;
+
+ /* If entry has marked pixels as used in the atlas this frame */
+ guint used : 1;
+
+ /* If entry was accessed this frame */
+ guint accessed : 1;
+
+ /* When true, backref is an atlas, otherwise texture */
+ guint is_atlased : 1;
+
+ /* Suffix data that is per-library specific. gpointer used to
+ * guarantee the alignment for the entries using this.
+ */
+ gpointer data[0];
+} GskNglTextureAtlasEntry;
+
+typedef struct _GskNglTextureLibrary
+{
+ GObject parent_instance;
+ GskNglDriver *driver;
+ GHashTable *hash_table;
+ guint max_entry_size;
+} GskNglTextureLibrary;
+
+typedef struct _GskNglTextureLibraryClass
+{
+ GObjectClass parent_class;
+
+ void (*begin_frame) (GskNglTextureLibrary *library);
+ void (*end_frame) (GskNglTextureLibrary *library);
+} GskNglTextureLibraryClass;
+
+G_DEFINE_AUTOPTR_CLEANUP_FUNC (GskNglTextureLibrary, g_object_unref)
+
+GType gsk_ngl_texture_library_get_type (void) G_GNUC_CONST;
+void gsk_ngl_texture_library_set_funcs (GskNglTextureLibrary *self,
+ GHashFunc hash_func,
+ GEqualFunc equal_func,
+ GDestroyNotify key_destroy,
+ GDestroyNotify value_destroy);
+void gsk_ngl_texture_library_begin_frame (GskNglTextureLibrary *self);
+void gsk_ngl_texture_library_end_frame (GskNglTextureLibrary *self);
+gpointer gsk_ngl_texture_library_pack (GskNglTextureLibrary *self,
+ gpointer key,
+ gsize valuelen,
+ guint width,
+ guint height,
+ int padding,
+ guint *out_packed_x,
+ guint *out_packed_y);
+
+static inline void
+gsk_ngl_texture_atlas_mark_unused (GskNglTextureAtlas *self,
+ int n_pixels)
+{
+ self->unused_pixels += n_pixels;
+}
+
+static inline void
+gsk_ngl_texture_atlas_mark_used (GskNglTextureAtlas *self,
+ int n_pixels)
+{
+ self->unused_pixels -= n_pixels;
+}
+
+static inline gboolean
+gsk_ngl_texture_library_lookup (GskNglTextureLibrary *self,
+ gconstpointer key,
+ GskNglTextureAtlasEntry **out_entry)
+{
+ GskNglTextureAtlasEntry *entry = g_hash_table_lookup (self->hash_table, key);
+
+ if G_LIKELY (entry != NULL && entry->accessed && entry->used)
+ {
+ *out_entry = entry;
+ return TRUE;
+ }
+
+ if (entry != NULL)
+ {
+ if (!entry->used && entry->is_atlased)
+ {
+ g_assert (entry->atlas != NULL);
+ gsk_ngl_texture_atlas_mark_used (entry->atlas, entry->n_pixels);
+ entry->used = TRUE;
+ }
+
+ entry->accessed = TRUE;
+ *out_entry = entry;
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static inline guint
+GSK_NGL_TEXTURE_ATLAS_ENTRY_TEXTURE (gconstpointer d)
+{
+ const GskNglTextureAtlasEntry *e = d;
+
+ return e->is_atlased ? e->atlas->texture_id
+ : e->texture ? e->texture->texture_id : 0;
+}
+
+static inline double
+gsk_ngl_texture_atlas_get_unused_ratio (const GskNglTextureAtlas *self)
+{
+ if (self->unused_pixels > 0)
+ return (double)(self->unused_pixels) / (double)(self->width * self->height);
+ return 0.0;
+}
+
+static inline gboolean
+gsk_ngl_texture_library_can_cache (GskNglTextureLibrary *self,
+ int width,
+ int height)
+{
+ g_assert (self->max_entry_size > 0);
+ return width <= self->max_entry_size && height <= self->max_entry_size;
+}
+
+G_END_DECLS
+
+#endif /* __GSK_NGL_TEXTURE_LIBRARY_PRIVATE_H__ */
diff --git a/gsk/next/gskgltexturepool.c b/gsk/ngl/gskngltexturepool.c
similarity index 72%
rename from gsk/next/gskgltexturepool.c
rename to gsk/ngl/gskngltexturepool.c
index e81c04632a..707ae37455 100644
--- a/gsk/next/gskgltexturepool.c
+++ b/gsk/ngl/gskngltexturepool.c
@@ -1,4 +1,4 @@
-/* gskgltexturepool.c
+/* gskngltexturepool.c
*
* Copyright 2020 Christian Hergert <chergert redhat com>
*
@@ -22,11 +22,11 @@
#include <gdk/gdktextureprivate.h>
-#include "gskgltexturepoolprivate.h"
+#include "gskngltexturepoolprivate.h"
#include "ninesliceprivate.h"
void
-gsk_gl_texture_free (GskGLTexture *texture)
+gsk_ngl_texture_free (GskNglTexture *texture)
{
if (texture != NULL)
{
@@ -51,18 +51,18 @@ gsk_gl_texture_free (GskGLTexture *texture)
g_clear_pointer (&texture->slices, g_free);
g_clear_pointer (&texture->nine_slice, g_free);
- g_slice_free (GskGLTexture, texture);
+ g_slice_free (GskNglTexture, texture);
}
}
void
-gsk_gl_texture_pool_init (GskGLTexturePool *self)
+gsk_ngl_texture_pool_init (GskNglTexturePool *self)
{
g_queue_init (&self->queue);
}
void
-gsk_gl_texture_pool_clear (GskGLTexturePool *self)
+gsk_ngl_texture_pool_clear (GskNglTexturePool *self)
{
guint *free_me = NULL;
guint *texture_ids;
@@ -75,14 +75,14 @@ gsk_gl_texture_pool_clear (GskGLTexturePool *self)
while (self->queue.length > 0)
{
- GskGLTexture *head = g_queue_peek_head (&self->queue);
+ GskNglTexture *head = g_queue_peek_head (&self->queue);
g_queue_unlink (&self->queue, &head->link);
texture_ids[i++] = head->texture_id;
head->texture_id = 0;
- gsk_gl_texture_free (head);
+ gsk_ngl_texture_free (head);
}
g_assert (self->queue.length == 0);
@@ -94,11 +94,9 @@ gsk_gl_texture_pool_clear (GskGLTexturePool *self)
}
void
-gsk_gl_texture_pool_put (GskGLTexturePool *self,
- GskGLTexture *texture)
+gsk_ngl_texture_pool_put (GskNglTexturePool *self,
+ GskNglTexture *texture)
{
- GList *sibling;
-
g_assert (self != NULL);
g_assert (texture != NULL);
g_assert (texture->user == NULL);
@@ -107,23 +105,23 @@ gsk_gl_texture_pool_put (GskGLTexturePool *self,
g_assert (texture->link.data == texture);
if (texture->permanent)
- gsk_gl_texture_free (texture);
+ gsk_ngl_texture_free (texture);
else
g_queue_push_tail_link (&self->queue, &texture->link);
}
-GskGLTexture *
-gsk_gl_texture_pool_get (GskGLTexturePool *self,
- int width,
- int height,
- int min_filter,
- int mag_filter)
+GskNglTexture *
+gsk_ngl_texture_pool_get (GskNglTexturePool *self,
+ int width,
+ int height,
+ int min_filter,
+ int mag_filter)
{
- GskGLTexture *texture;
+ GskNglTexture *texture;
g_assert (self != NULL);
- texture = g_slice_new0 (GskGLTexture);
+ texture = g_slice_new0 (GskNglTexture);
texture->link.data = texture;
texture->min_filter = min_filter;
texture->mag_filter = mag_filter;
@@ -147,17 +145,17 @@ gsk_gl_texture_pool_get (GskGLTexturePool *self,
return texture;
}
-GskGLTexture *
-gsk_gl_texture_new (guint texture_id,
- int width,
- int height,
- int min_filter,
- int mag_filter,
- gint64 frame_id)
+GskNglTexture *
+gsk_ngl_texture_new (guint texture_id,
+ int width,
+ int height,
+ int min_filter,
+ int mag_filter,
+ gint64 frame_id)
{
- GskGLTexture *texture;
+ GskNglTexture *texture;
- texture = g_slice_new0 (GskGLTexture);
+ texture = g_slice_new0 (GskNglTexture);
texture->texture_id = texture_id;
texture->link.data = texture;
texture->min_filter = min_filter;
@@ -169,17 +167,17 @@ gsk_gl_texture_new (guint texture_id,
return texture;
}
-const GskGLTextureNineSlice *
-gsk_gl_texture_get_nine_slice (GskGLTexture *texture,
- const GskRoundedRect *outline,
- float extra_pixels)
+const GskNglTextureNineSlice *
+gsk_ngl_texture_get_nine_slice (GskNglTexture *texture,
+ const GskRoundedRect *outline,
+ float extra_pixels)
{
g_assert (texture != NULL);
g_assert (outline != NULL);
if G_UNLIKELY (texture->nine_slice == NULL)
{
- texture->nine_slice = g_new0 (GskGLTextureNineSlice, 9);
+ texture->nine_slice = g_new0 (GskNglTextureNineSlice, 9);
nine_slice_rounded_rect (texture->nine_slice, outline);
nine_slice_grow (texture->nine_slice, extra_pixels);
diff --git a/gsk/ngl/gskngltexturepoolprivate.h b/gsk/ngl/gskngltexturepoolprivate.h
new file mode 100644
index 0000000000..8b39ec5440
--- /dev/null
+++ b/gsk/ngl/gskngltexturepoolprivate.h
@@ -0,0 +1,102 @@
+/* gskngltexturepoolprivate.h
+ *
+ * Copyright 2020 Christian Hergert <chergert redhat com>
+ *
+ * This file is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU Lesser General Public License as published by the Free
+ * Software Foundation; either version 2.1 of the License, or (at your option)
+ * any later version.
+ *
+ * This file is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
+ * License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * SPDX-License-Identifier: LGPL-2.1-or-later
+ */
+
+#ifndef _GSK_NGL_TEXTURE_POOL_PRIVATE_H__
+#define _GSK_NGL_TEXTURE_POOL_PRIVATE_H__
+
+#include "gskngltypesprivate.h"
+
+G_BEGIN_DECLS
+
+typedef struct _GskNglTexturePool
+{
+ GQueue queue;
+} GskNglTexturePool;
+
+struct _GskNglTextureSlice
+{
+ cairo_rectangle_int_t rect;
+ guint texture_id;
+};
+
+struct _GskNglTextureNineSlice
+{
+ cairo_rectangle_int_t rect;
+ struct {
+ float x;
+ float y;
+ float x2;
+ float y2;
+ } area;
+};
+
+struct _GskNglTexture
+{
+ /* Used to insert into queue */
+ GList link;
+
+ /* Identifier of the frame that created it */
+ gint64 last_used_in_frame;
+
+ /* Backpointer to texture (can be cleared asynchronously) */
+ GdkTexture *user;
+
+ /* Only used by sliced textures */
+ GskNglTextureSlice *slices;
+ guint n_slices;
+
+ /* Only used by nine-slice textures */
+ GskNglTextureNineSlice *nine_slice;
+
+ /* The actual GL texture identifier in some shared context */
+ guint texture_id;
+
+ int width;
+ int height;
+ int min_filter;
+ int mag_filter;
+
+ /* Set when used by an atlas so we don't drop the texture */
+ guint permanent : 1;
+};
+
+void gsk_ngl_texture_pool_init (GskNglTexturePool *self);
+void gsk_ngl_texture_pool_clear (GskNglTexturePool *self);
+GskNglTexture *gsk_ngl_texture_pool_get (GskNglTexturePool *self,
+ int width,
+ int height,
+ int min_filter,
+ int mag_filter);
+void gsk_ngl_texture_pool_put (GskNglTexturePool *self,
+ GskNglTexture *texture);
+GskNglTexture *gsk_ngl_texture_new (guint texture_id,
+ int width,
+ int height,
+ int min_filter,
+ int mag_filter,
+ gint64 frame_id);
+const GskNglTextureNineSlice *gsk_ngl_texture_get_nine_slice (GskNglTexture *texture,
+ const GskRoundedRect *outline,
+ float extra_pixels);
+void gsk_ngl_texture_free (GskNglTexture *texture);
+
+G_END_DECLS
+
+#endif /* _GSK_NGL_TEXTURE_POOL_PRIVATE_H__ */
diff --git a/gsk/ngl/gskngltypesprivate.h b/gsk/ngl/gskngltypesprivate.h
new file mode 100644
index 0000000000..aba6f2f4c9
--- /dev/null
+++ b/gsk/ngl/gskngltypesprivate.h
@@ -0,0 +1,62 @@
+/* gskngltypesprivate.h
+ *
+ * Copyright 2020 Christian Hergert <chergert redhat com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * SPDX-License-Identifier: LGPL-2.1-or-later
+ */
+
+#ifndef __GSK_NGL_TYPES_PRIVATE_H__
+#define __GSK_NGL_TYPES_PRIVATE_H__
+
+#include <epoxy/gl.h>
+#include <graphene.h>
+#include <gdk/gdk.h>
+#include <gsk/gsk.h>
+
+G_BEGIN_DECLS
+
+#define GSK_NGL_N_VERTICES 6
+
+typedef struct _GskNglAttachmentState GskNglAttachmentState;
+typedef struct _GskNglBuffer GskNglBuffer;
+typedef struct _GskNglCommandQueue GskNglCommandQueue;
+typedef struct _GskNglCompiler GskNglCompiler;
+typedef struct _GskNglDrawVertex GskNglDrawVertex;
+typedef struct _GskNglRenderTarget GskNglRenderTarget;
+typedef struct _GskNglGlyphLibrary GskNglGlyphLibrary;
+typedef struct _GskNglIconLibrary GskNglIconLibrary;
+typedef struct _GskNglProgram GskNglProgram;
+typedef struct _GskNglRenderJob GskNglRenderJob;
+typedef struct _GskNglShadowLibrary GskNglShadowLibrary;
+typedef struct _GskNglTexture GskNglTexture;
+typedef struct _GskNglTextureSlice GskNglTextureSlice;
+typedef struct _GskNglTextureAtlas GskNglTextureAtlas;
+typedef struct _GskNglTextureLibrary GskNglTextureLibrary;
+typedef struct _GskNglTextureNineSlice GskNglTextureNineSlice;
+typedef struct _GskNglUniformInfo GskNglUniformInfo;
+typedef struct _GskNglUniformProgram GskNglUniformProgram;
+typedef struct _GskNglUniformState GskNglUniformState;
+typedef struct _GskNglDriver GskNglDriver;
+
+struct _GskNglDrawVertex
+{
+ float position[2];
+ float uv[2];
+};
+
+G_END_DECLS
+
+#endif /* __GSK_NGL_TYPES_PRIVATE_H__ */
diff --git a/gsk/next/gskgluniformstate.c b/gsk/ngl/gskngluniformstate.c
similarity index 72%
rename from gsk/next/gskgluniformstate.c
rename to gsk/ngl/gskngluniformstate.c
index fae38f91bd..9b896e7d1a 100644
--- a/gsk/next/gskgluniformstate.c
+++ b/gsk/ngl/gskngluniformstate.c
@@ -1,4 +1,4 @@
-/* gskgluniformstate.c
+/* gskngluniformstate.c
*
* Copyright 2020 Christian Hergert <chergert redhat com>
*
@@ -23,7 +23,7 @@
#include <gsk/gskroundedrectprivate.h>
#include <string.h>
-#include "gskgluniformstateprivate.h"
+#include "gskngluniformstateprivate.h"
static const guint8 uniform_sizes[] = {
0,
@@ -54,12 +54,12 @@ static const guint8 uniform_sizes[] = {
0,
};
-GskGLUniformState *
-gsk_gl_uniform_state_new (void)
+GskNglUniformState *
+gsk_ngl_uniform_state_new (void)
{
- GskGLUniformState *state;
+ GskNglUniformState *state;
- state = g_atomic_rc_box_new0 (GskGLUniformState);
+ state = g_atomic_rc_box_new0 (GskNglUniformState);
state->programs = g_hash_table_new_full (NULL, NULL, NULL, g_free);
state->values_len = 4096;
state->values_pos = 0;
@@ -68,41 +68,41 @@ gsk_gl_uniform_state_new (void)
return g_steal_pointer (&state);
}
-GskGLUniformState *
-gsk_gl_uniform_state_ref (GskGLUniformState *state)
+GskNglUniformState *
+gsk_ngl_uniform_state_ref (GskNglUniformState *state)
{
return g_atomic_rc_box_acquire (state);
}
static void
-gsk_gl_uniform_state_finalize (gpointer data)
+gsk_ngl_uniform_state_finalize (gpointer data)
{
- GskGLUniformState *state = data;
+ GskNglUniformState *state = data;
g_clear_pointer (&state->programs, g_hash_table_unref);
g_clear_pointer (&state->values_buf, g_free);
}
void
-gsk_gl_uniform_state_unref (GskGLUniformState *state)
+gsk_ngl_uniform_state_unref (GskNglUniformState *state)
{
- g_atomic_rc_box_release_full (state, gsk_gl_uniform_state_finalize);
+ g_atomic_rc_box_release_full (state, gsk_ngl_uniform_state_finalize);
}
gpointer
-gsk_gl_uniform_state_init_value (GskGLUniformState *state,
- GskGLUniformProgram *program,
- GskGLUniformFormat format,
- guint array_count,
- guint location,
- GskGLUniformInfoElement **infoptr)
+gsk_ngl_uniform_state_init_value (GskNglUniformState *state,
+ GskNglUniformProgram *program,
+ GskNglUniformFormat format,
+ guint array_count,
+ guint location,
+ GskNglUniformInfoElement **infoptr)
{
- GskGLUniformInfoElement *info;
+ GskNglUniformInfoElement *info;
guint offset;
g_assert (state != NULL);
g_assert (array_count < 32);
- g_assert ((int)format >= 0 && format < GSK_GL_UNIFORM_FORMAT_LAST);
+ g_assert ((int)format >= 0 && format < GSK_NGL_UNIFORM_FORMAT_LAST);
g_assert (format > 0);
g_assert (program != NULL);
g_assert (program->sparse != NULL);
@@ -121,7 +121,7 @@ gsk_gl_uniform_state_init_value (GskGLUniformState *state,
if G_LIKELY (array_count <= info->info.array_count)
{
*infoptr = info;
- return GSK_GL_UNIFORM_VALUE (state->values_buf, info->info.offset);
+ return GSK_NGL_UNIFORM_VALUE (state->values_buf, info->info.offset);
}
/* We found the uniform, but there is not enough space for the
@@ -151,12 +151,12 @@ gsk_gl_uniform_state_init_value (GskGLUniformState *state,
setup_info:
- gsk_gl_uniform_state_realloc (state,
- uniform_sizes[format] * MAX (1, array_count),
- &offset);
+ gsk_ngl_uniform_state_realloc (state,
+ uniform_sizes[format] * MAX (1, array_count),
+ &offset);
/* we have 21 bits for offset */
- g_assert (offset < (1 << GSK_GL_UNIFORM_OFFSET_BITS));
+ g_assert (offset < (1 << GSK_NGL_UNIFORM_OFFSET_BITS));
/* We could once again be setting up this info if the array size grew.
* So make sure that we have space in our space array for the value.
@@ -173,14 +173,14 @@ setup_info:
*infoptr = info;
- return GSK_GL_UNIFORM_VALUE (state->values_buf, info->info.offset);
+ return GSK_NGL_UNIFORM_VALUE (state->values_buf, info->info.offset);
}
void
-gsk_gl_uniform_state_end_frame (GskGLUniformState *state)
+gsk_ngl_uniform_state_end_frame (GskNglUniformState *state)
{
GHashTableIter iter;
- GskGLUniformProgram *program;
+ GskNglUniformProgram *program;
guint allocator = 0;
g_return_if_fail (state != NULL);
@@ -197,7 +197,7 @@ gsk_gl_uniform_state_end_frame (GskGLUniformState *state)
for (guint j = 0; j < program->n_sparse; j++)
{
guint location = program->sparse[j];
- GskGLUniformInfoElement *info = &program->uniforms[location];
+ GskNglUniformInfoElement *info = &program->uniforms[location];
guint size;
g_assert (info->info.format > 0);
@@ -206,7 +206,7 @@ gsk_gl_uniform_state_end_frame (GskGLUniformState *state)
size = uniform_sizes[info->info.format] * MAX (1, info->info.array_count);
/* Adjust alignment for value */
- allocator += gsk_gl_uniform_state_align (allocator, size);
+ allocator += gsk_ngl_uniform_state_align (allocator, size);
/* Offset is in slots of 4 bytes */
info->info.offset = allocator / 4;
@@ -224,20 +224,20 @@ gsk_gl_uniform_state_end_frame (GskGLUniformState *state)
}
gsize
-gsk_gl_uniform_format_size (GskGLUniformFormat format)
+gsk_ngl_uniform_format_size (GskNglUniformFormat format)
{
g_assert (format > 0);
- g_assert (format < GSK_GL_UNIFORM_FORMAT_LAST);
+ g_assert (format < GSK_NGL_UNIFORM_FORMAT_LAST);
return uniform_sizes[format];
}
-GskGLUniformProgram *
-gsk_gl_uniform_state_get_program (GskGLUniformState *state,
- guint program,
- guint n_uniforms)
+GskNglUniformProgram *
+gsk_ngl_uniform_state_get_program (GskNglUniformState *state,
+ guint program,
+ guint n_uniforms)
{
- GskGLUniformProgram *ret;
+ GskNglUniformProgram *ret;
g_return_val_if_fail (state != NULL, NULL);
g_return_val_if_fail (program > 0, NULL);
@@ -247,12 +247,12 @@ gsk_gl_uniform_state_get_program (GskGLUniformState *state,
if (ret == NULL)
{
- gsize uniform_size = n_uniforms * sizeof (GskGLUniformInfoElement);
+ gsize uniform_size = n_uniforms * sizeof (GskNglUniformInfoElement);
gsize sparse_size = n_uniforms * sizeof (guint);
- gsize size = sizeof (GskGLUniformProgram) + uniform_size + sparse_size;
+ gsize size = sizeof (GskNglUniformProgram) + uniform_size + sparse_size;
/* Must be multiple of 4 for space pointer to align */
- G_STATIC_ASSERT (sizeof (GskGLUniformInfoElement) == 8);
+ G_STATIC_ASSERT (sizeof (GskNglUniformInfoElement) == 8);
ret = g_malloc0 (size);
ret->program_id = program;
diff --git a/gsk/ngl/gskngluniformstateprivate.h b/gsk/ngl/gskngluniformstateprivate.h
new file mode 100644
index 0000000000..1385f93dac
--- /dev/null
+++ b/gsk/ngl/gskngluniformstateprivate.h
@@ -0,0 +1,685 @@
+/* gskngluniformstateprivate.h
+ *
+ * Copyright 2020 Christian Hergert <chergert redhat com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * SPDX-License-Identifier: LGPL-2.1-or-later
+ */
+
+#ifndef GSK_NGL_UNIFORM_STATE_PRIVATE_H
+#define GSK_NGL_UNIFORM_STATE_PRIVATE_H
+
+#include "gskngltypesprivate.h"
+
+G_BEGIN_DECLS
+
+typedef struct { float v0; } Uniform1f;
+typedef struct { float v0; float v1; } Uniform2f;
+typedef struct { float v0; float v1; float v2; } Uniform3f;
+typedef struct { float v0; float v1; float v2; float v3; } Uniform4f;
+
+typedef struct { int v0; } Uniform1i;
+typedef struct { int v0; int v1; } Uniform2i;
+typedef struct { int v0; int v1; int v2; } Uniform3i;
+typedef struct { int v0; int v1; int v2; int v3; } Uniform4i;
+
+typedef struct { guint v0; } Uniform1ui;
+
+#define GSK_NGL_UNIFORM_ARRAY_BITS 5
+#define GSK_NGL_UNIFORM_FORMAT_BITS 5
+#define GSK_NGL_UNIFORM_OFFSET_BITS 21
+
+typedef struct _GskNglUniformInfo
+{
+ guint initial : 1;
+ guint format : GSK_NGL_UNIFORM_FORMAT_BITS;
+ guint array_count : GSK_NGL_UNIFORM_ARRAY_BITS;
+ guint offset : GSK_NGL_UNIFORM_OFFSET_BITS;
+} GskNglUniformInfo;
+
+G_STATIC_ASSERT (sizeof (GskNglUniformInfo) == 4);
+
+typedef struct _GskNglUniformInfoElement
+{
+ GskNglUniformInfo info;
+ guint stamp;
+} GskNglUniformInfoElement;
+
+G_STATIC_ASSERT (sizeof (GskNglUniformInfoElement) == 8);
+
+typedef struct _GskNglUniformProgram
+{
+ guint program_id;
+ guint n_uniforms : 12;
+ guint has_attachments : 1;
+
+ /* To avoid walking our 1:1 array of location->uniform slots, we have
+ * a sparse index that allows us to skip the empty zones.
+ */
+ guint *sparse;
+ guint n_sparse;
+
+ /* Uniforms are provided inline at the end of structure to avoid
+ * an extra dereference.
+ */
+ GskNglUniformInfoElement uniforms[0];
+} GskNglUniformProgram;
+
+typedef struct _GskNglUniformState
+{
+ GHashTable *programs;
+ guint8 *values_buf;
+ guint values_pos;
+ guint values_len;
+} GskNglUniformState;
+
+/**
+ * GskNglUniformStateCallback:
+ * @info: a pointer to the information about the uniform
+ * @location: the location of the uniform within the GPU program.
+ * @user_data: closure data for the callback
+ *
+ * This callback can be used to snapshot state of a program which
+ * is useful when batching commands so that the state may be compared
+ * with future evocations of the program.
+ */
+typedef void (*GskNglUniformStateCallback) (const GskNglUniformInfo *info,
+ guint location,
+ gpointer user_data);
+
+typedef enum _GskNglUniformKind
+{
+ GSK_NGL_UNIFORM_FORMAT_1F = 1,
+ GSK_NGL_UNIFORM_FORMAT_2F,
+ GSK_NGL_UNIFORM_FORMAT_3F,
+ GSK_NGL_UNIFORM_FORMAT_4F,
+
+ GSK_NGL_UNIFORM_FORMAT_1FV,
+ GSK_NGL_UNIFORM_FORMAT_2FV,
+ GSK_NGL_UNIFORM_FORMAT_3FV,
+ GSK_NGL_UNIFORM_FORMAT_4FV,
+
+ GSK_NGL_UNIFORM_FORMAT_1I,
+ GSK_NGL_UNIFORM_FORMAT_2I,
+ GSK_NGL_UNIFORM_FORMAT_3I,
+ GSK_NGL_UNIFORM_FORMAT_4I,
+
+ GSK_NGL_UNIFORM_FORMAT_1UI,
+
+ GSK_NGL_UNIFORM_FORMAT_TEXTURE,
+
+ GSK_NGL_UNIFORM_FORMAT_MATRIX,
+ GSK_NGL_UNIFORM_FORMAT_ROUNDED_RECT,
+ GSK_NGL_UNIFORM_FORMAT_COLOR,
+
+ GSK_NGL_UNIFORM_FORMAT_LAST
+} GskNglUniformFormat;
+
+G_STATIC_ASSERT (GSK_NGL_UNIFORM_FORMAT_LAST < (1 << GSK_NGL_UNIFORM_FORMAT_BITS));
+
+GskNglUniformState *gsk_ngl_uniform_state_new (void);
+GskNglUniformState *gsk_ngl_uniform_state_ref (GskNglUniformState *state);
+void gsk_ngl_uniform_state_unref (GskNglUniformState *state);
+GskNglUniformProgram *gsk_ngl_uniform_state_get_program (GskNglUniformState *state,
+ guint program,
+ guint n_uniforms);
+void gsk_ngl_uniform_state_end_frame (GskNglUniformState *state);
+gsize gsk_ngl_uniform_format_size (GskNglUniformFormat format);
+gpointer gsk_ngl_uniform_state_init_value (GskNglUniformState *state,
+ GskNglUniformProgram *program,
+ GskNglUniformFormat format,
+ guint array_count,
+ guint location,
+ GskNglUniformInfoElement **infoptr);
+
+#define GSK_NGL_UNIFORM_VALUE(base, offset) ((gpointer)((base) + ((offset) * 4)))
+#define gsk_ngl_uniform_state_get_uniform_data(state,offset) GSK_NGL_UNIFORM_VALUE((state)->values_buf,
offset)
+#define gsk_ngl_uniform_state_snapshot(state, program_info, callback, user_data) \
+ G_STMT_START { \
+ for (guint z = 0; z < program_info->n_sparse; z++) \
+ { \
+ guint location = program_info->sparse[z]; \
+ GskNglUniformInfoElement *info = &program_info->uniforms[location]; \
+ \
+ g_assert (location < GL_MAX_UNIFORM_LOCATIONS); \
+ g_assert (location < program_info->n_uniforms); \
+ \
+ if (info->info.format > 0) \
+ callback (&info->info, location, user_data); \
+ } \
+ } G_STMT_END
+
+static inline gpointer
+gsk_ngl_uniform_state_get_value (GskNglUniformState *state,
+ GskNglUniformProgram *program,
+ GskNglUniformFormat format,
+ guint array_count,
+ guint location,
+ guint stamp,
+ GskNglUniformInfoElement **infoptr)
+{
+ GskNglUniformInfoElement *info;
+
+ if (location == (guint)-1)
+ return NULL;
+
+ /* If the stamp is the same, then we can ignore the request
+ * and short-circuit as early as possible. This requires the
+ * caller to increment their private stamp when they change
+ * internal state.
+ *
+ * This is generally used for the shared uniforms like projection,
+ * modelview, clip, etc to avoid so many comparisons which cost
+ * considerable CPU.
+ */
+ info = &program->uniforms[location];
+ if (stamp != 0 && stamp == info->stamp)
+ return NULL;
+
+ if G_LIKELY (format == info->info.format && array_count <= info->info.array_count)
+ {
+ *infoptr = info;
+ return GSK_NGL_UNIFORM_VALUE (state->values_buf, info->info.offset);
+ }
+
+ return gsk_ngl_uniform_state_init_value (state, program, format, array_count, location, infoptr);
+}
+
+static inline guint
+gsk_ngl_uniform_state_align (guint current_pos,
+ guint size)
+{
+ guint align = size > 8 ? 16 : (size > 4 ? 8 : 4);
+ guint masked = current_pos & (align - 1);
+
+ g_assert (size > 0);
+ g_assert (align == 4 || align == 8 || align == 16);
+ g_assert (masked < align);
+
+ return align - masked;
+}
+
+static inline gpointer
+gsk_ngl_uniform_state_realloc (GskNglUniformState *state,
+ guint size,
+ guint *offset)
+{
+ guint padding = gsk_ngl_uniform_state_align (state->values_pos, size);
+
+ if G_UNLIKELY (state->values_len - padding - size < state->values_pos)
+ {
+ state->values_len *= 2;
+ state->values_buf = g_realloc (state->values_buf, state->values_len);
+ }
+
+ /* offsets are in slots of 4 to use fewer bits */
+ g_assert ((state->values_pos + padding) % 4 == 0);
+ *offset = (state->values_pos + padding) / 4;
+ state->values_pos += padding + size;
+
+ return GSK_NGL_UNIFORM_VALUE (state->values_buf, *offset);
+}
+
+#define GSK_NGL_UNIFORM_STATE_REPLACE(info, u, type, count) \
+ G_STMT_START { \
+ if ((info)->info.initial && count == (info)->info.array_count) \
+ { \
+ u = GSK_NGL_UNIFORM_VALUE (state->values_buf, (info)->info.offset); \
+ } \
+ else \
+ { \
+ guint offset; \
+ u = gsk_ngl_uniform_state_realloc (state, sizeof(type) * MAX (1, count), &offset); \
+ g_assert (offset < (1 << GSK_NGL_UNIFORM_OFFSET_BITS)); \
+ (info)->info.offset = offset; \
+ /* We might have increased array length */ \
+ (info)->info.array_count = count; \
+ } \
+ } G_STMT_END
+
+static inline void
+gsk_ngl_uniform_info_changed (GskNglUniformInfoElement *info,
+ guint location,
+ guint stamp)
+{
+ info->stamp = stamp;
+ info->info.initial = FALSE;
+}
+
+static inline void
+gsk_ngl_uniform_state_set1f (GskNglUniformState *state,
+ GskNglUniformProgram *program,
+ guint location,
+ guint stamp,
+ float value0)
+{
+ Uniform1f *u;
+ GskNglUniformInfoElement *info;
+
+ g_assert (state != NULL);
+ g_assert (program != 0);
+
+ if ((u = gsk_ngl_uniform_state_get_value (state, program, GSK_NGL_UNIFORM_FORMAT_1F, 1, location, stamp,
&info)))
+ {
+ GSK_NGL_UNIFORM_STATE_REPLACE (info, u, Uniform1f , 1);
+ u->v0 = value0;
+ gsk_ngl_uniform_info_changed (info, location, stamp);
+ }
+}
+
+static inline void
+gsk_ngl_uniform_state_set2f (GskNglUniformState *state,
+ GskNglUniformProgram *program,
+ guint location,
+ guint stamp,
+ float value0,
+ float value1)
+{
+ Uniform2f *u;
+ GskNglUniformInfoElement *info;
+
+ g_assert (state != NULL);
+ g_assert (program != NULL);
+
+ if ((u = gsk_ngl_uniform_state_get_value (state, program, GSK_NGL_UNIFORM_FORMAT_2F, 1, location, stamp,
&info)))
+ {
+ GSK_NGL_UNIFORM_STATE_REPLACE (info, u, Uniform2f, 1);
+ u->v0 = value0;
+ u->v1 = value1;
+ gsk_ngl_uniform_info_changed (info, location, stamp);
+ }
+}
+
+static inline void
+gsk_ngl_uniform_state_set3f (GskNglUniformState *state,
+ GskNglUniformProgram *program,
+ guint location,
+ guint stamp,
+ float value0,
+ float value1,
+ float value2)
+{
+ Uniform3f *u;
+ GskNglUniformInfoElement *info;
+
+ g_assert (state != NULL);
+ g_assert (program != NULL);
+
+ if ((u = gsk_ngl_uniform_state_get_value (state, program, GSK_NGL_UNIFORM_FORMAT_3F, 1, location, stamp,
&info)))
+ {
+ GSK_NGL_UNIFORM_STATE_REPLACE (info, u, Uniform3f, 1);
+ u->v0 = value0;
+ u->v1 = value1;
+ u->v2 = value2;
+ gsk_ngl_uniform_info_changed (info, location, stamp);
+ }
+}
+
+static inline void
+gsk_ngl_uniform_state_set4f (GskNglUniformState *state,
+ GskNglUniformProgram *program,
+ guint location,
+ guint stamp,
+ float value0,
+ float value1,
+ float value2,
+ float value3)
+{
+ Uniform4f *u;
+ GskNglUniformInfoElement *info;
+
+ g_assert (state != NULL);
+ g_assert (program != NULL);
+
+ if ((u = gsk_ngl_uniform_state_get_value (state, program, GSK_NGL_UNIFORM_FORMAT_4F, 1, location, stamp,
&info)))
+ {
+ GSK_NGL_UNIFORM_STATE_REPLACE (info, u, Uniform4f, 1);
+ u->v0 = value0;
+ u->v1 = value1;
+ u->v2 = value2;
+ u->v3 = value3;
+ gsk_ngl_uniform_info_changed (info, location, stamp);
+ }
+}
+
+static inline void
+gsk_ngl_uniform_state_set1ui (GskNglUniformState *state,
+ GskNglUniformProgram *program,
+ guint location,
+ guint stamp,
+ guint value0)
+{
+ Uniform1ui *u;
+ GskNglUniformInfoElement *info;
+
+ g_assert (state != NULL);
+ g_assert (program != NULL);
+
+ if ((u = gsk_ngl_uniform_state_get_value (state, program, GSK_NGL_UNIFORM_FORMAT_1UI, 1, location, stamp,
&info)))
+ {
+ GSK_NGL_UNIFORM_STATE_REPLACE (info, u, Uniform1ui, 1);
+ u->v0 = value0;
+ gsk_ngl_uniform_info_changed (info, location, stamp);
+ }
+}
+
+static inline void
+gsk_ngl_uniform_state_set1i (GskNglUniformState *state,
+ GskNglUniformProgram *program,
+ guint location,
+ guint stamp,
+ int value0)
+{
+ Uniform1i *u;
+ GskNglUniformInfoElement *info;
+
+ g_assert (state != NULL);
+ g_assert (program != NULL);
+
+ if ((u = gsk_ngl_uniform_state_get_value (state, program, GSK_NGL_UNIFORM_FORMAT_1I, 1, location, stamp,
&info)))
+ {
+ GSK_NGL_UNIFORM_STATE_REPLACE (info, u, Uniform1i, 1);
+ u->v0 = value0;
+ gsk_ngl_uniform_info_changed (info, location, stamp);
+ }
+}
+
+static inline void
+gsk_ngl_uniform_state_set2i (GskNglUniformState *state,
+ GskNglUniformProgram *program,
+ guint location,
+ guint stamp,
+ int value0,
+ int value1)
+{
+ Uniform2i *u;
+ GskNglUniformInfoElement *info;
+
+ g_assert (state != NULL);
+ g_assert (program != NULL);
+
+ if ((u = gsk_ngl_uniform_state_get_value (state, program, GSK_NGL_UNIFORM_FORMAT_2I, 1, location, stamp,
&info)))
+ {
+ GSK_NGL_UNIFORM_STATE_REPLACE (info, u, Uniform2i, 1);
+ u->v0 = value0;
+ u->v1 = value1;
+ gsk_ngl_uniform_info_changed (info, location, stamp);
+ }
+}
+
+static inline void
+gsk_ngl_uniform_state_set3i (GskNglUniformState *state,
+ GskNglUniformProgram *program,
+ guint location,
+ guint stamp,
+ int value0,
+ int value1,
+ int value2)
+{
+ Uniform3i *u;
+ GskNglUniformInfoElement *info;
+
+ g_assert (state != NULL);
+ g_assert (program != NULL);
+
+ if ((u = gsk_ngl_uniform_state_get_value (state, program, GSK_NGL_UNIFORM_FORMAT_3I, 1, location, stamp,
&info)))
+ {
+ GSK_NGL_UNIFORM_STATE_REPLACE (info, u, Uniform3i, 1);
+ u->v0 = value0;
+ u->v1 = value1;
+ u->v2 = value2;
+ gsk_ngl_uniform_info_changed (info, location, stamp);
+ }
+}
+
+static inline void
+gsk_ngl_uniform_state_set4i (GskNglUniformState *state,
+ GskNglUniformProgram *program,
+ guint location,
+ guint stamp,
+ int value0,
+ int value1,
+ int value2,
+ int value3)
+{
+ Uniform4i *u;
+ GskNglUniformInfoElement *info;
+
+ g_assert (state != NULL);
+ g_assert (program != NULL);
+
+ if ((u = gsk_ngl_uniform_state_get_value (state, program, GSK_NGL_UNIFORM_FORMAT_4I, 1, location, stamp,
&info)))
+ {
+ GSK_NGL_UNIFORM_STATE_REPLACE (info, u, Uniform4i, 1);
+ u->v0 = value0;
+ u->v1 = value1;
+ u->v2 = value2;
+ u->v3 = value3;
+ gsk_ngl_uniform_info_changed (info, location, stamp);
+ }
+}
+
+static inline void
+gsk_ngl_uniform_state_set_rounded_rect (GskNglUniformState *state,
+ GskNglUniformProgram *program,
+ guint location,
+ guint stamp,
+ const GskRoundedRect *rounded_rect)
+{
+ GskRoundedRect *u;
+ GskNglUniformInfoElement *info;
+
+ g_assert (state != NULL);
+ g_assert (program != NULL);
+ g_assert (rounded_rect != NULL);
+
+ if ((u = gsk_ngl_uniform_state_get_value (state, program, GSK_NGL_UNIFORM_FORMAT_ROUNDED_RECT, 1,
location, stamp, &info)))
+ {
+ GSK_NGL_UNIFORM_STATE_REPLACE (info, u, GskRoundedRect, 1);
+ memcpy (u, rounded_rect, sizeof *rounded_rect);
+ gsk_ngl_uniform_info_changed (info, location, stamp);
+ }
+}
+
+static inline void
+gsk_ngl_uniform_state_set_matrix (GskNglUniformState *state,
+ GskNglUniformProgram *program,
+ guint location,
+ guint stamp,
+ const graphene_matrix_t *matrix)
+{
+ graphene_matrix_t *u;
+ GskNglUniformInfoElement *info;
+
+ g_assert (state != NULL);
+ g_assert (program != NULL);
+ g_assert (matrix != NULL);
+
+ if ((u = gsk_ngl_uniform_state_get_value (state, program, GSK_NGL_UNIFORM_FORMAT_MATRIX, 1, location,
stamp, &info)))
+ {
+ GSK_NGL_UNIFORM_STATE_REPLACE (info, u, graphene_matrix_t, 1);
+ memcpy (u, matrix, sizeof *matrix);
+ gsk_ngl_uniform_info_changed (info, location, stamp);
+ }
+}
+
+/**
+ * gsk_ngl_uniform_state_set_texture:
+ * @state: a #GskNglUniformState
+ * @program: the program id
+ * @location: the location of the texture
+ * @texture_slot: a texturing slot such as GL_TEXTURE0
+ *
+ * Sets the uniform expecting a texture to @texture_slot. This API
+ * expects a texture slot such as GL_TEXTURE0 to reduce chances of
+ * miss-use by the caller.
+ *
+ * The value stored to the uniform is in the form of 0 for GL_TEXTURE0,
+ * 1 for GL_TEXTURE1, and so on.
+ */
+static inline void
+gsk_ngl_uniform_state_set_texture (GskNglUniformState *state,
+ GskNglUniformProgram *program,
+ guint location,
+ guint stamp,
+ guint texture_slot)
+{
+ GskNglUniformInfoElement *info;
+ guint *u;
+
+ g_assert (texture_slot >= GL_TEXTURE0);
+ g_assert (texture_slot < GL_TEXTURE16);
+
+ texture_slot -= GL_TEXTURE0;
+
+ if ((u = gsk_ngl_uniform_state_get_value (state, program, GSK_NGL_UNIFORM_FORMAT_TEXTURE, 1, location,
stamp, &info)))
+ {
+ GSK_NGL_UNIFORM_STATE_REPLACE (info, u, guint, 1);
+ *u = texture_slot;
+ gsk_ngl_uniform_info_changed (info, location, stamp);
+ }
+}
+
+/**
+ * gsk_ngl_uniform_state_set_color:
+ * @state: a #GskNglUniformState
+ * @program: a program id > 0
+ * @location: the uniform location
+ * @color: a color to set or %NULL for transparent
+ *
+ * Sets a uniform to the color described by @color. This is a convenience
+ * function to allow callers to avoid having to translate colors to floats
+ * in other portions of the renderer.
+ */
+static inline void
+gsk_ngl_uniform_state_set_color (GskNglUniformState *state,
+ GskNglUniformProgram *program,
+ guint location,
+ guint stamp,
+ const GdkRGBA *color)
+{
+ static const GdkRGBA transparent = {0};
+ GskNglUniformInfoElement *info;
+ GdkRGBA *u;
+
+ g_assert (state != NULL);
+ g_assert (program != NULL);
+
+ if ((u = gsk_ngl_uniform_state_get_value (state, program, GSK_NGL_UNIFORM_FORMAT_COLOR, 1, location,
stamp, &info)))
+ {
+ if (color == NULL)
+ color = &transparent;
+
+ GSK_NGL_UNIFORM_STATE_REPLACE (info, u, GdkRGBA, 1);
+ memcpy (u, color, sizeof *color);
+ gsk_ngl_uniform_info_changed (info, location, stamp);
+ }
+}
+
+static inline void
+gsk_ngl_uniform_state_set1fv (GskNglUniformState *state,
+ GskNglUniformProgram *program,
+ guint location,
+ guint stamp,
+ guint count,
+ const float *value)
+{
+ Uniform1f *u;
+ GskNglUniformInfoElement *info;
+
+ g_assert (state != NULL);
+ g_assert (program != NULL);
+ g_assert (count > 0);
+
+ if ((u = gsk_ngl_uniform_state_get_value (state, program, GSK_NGL_UNIFORM_FORMAT_1FV, count, location,
stamp, &info)))
+ {
+ GSK_NGL_UNIFORM_STATE_REPLACE (info, u, Uniform1f, count);
+ memcpy (u, value, sizeof (Uniform1f) * count);
+ gsk_ngl_uniform_info_changed (info, location, stamp);
+ }
+}
+
+static inline void
+gsk_ngl_uniform_state_set2fv (GskNglUniformState *state,
+ GskNglUniformProgram *program,
+ guint location,
+ guint stamp,
+ guint count,
+ const float *value)
+{
+ Uniform2f *u;
+ GskNglUniformInfoElement *info;
+
+ g_assert (state != NULL);
+ g_assert (program != NULL);
+ g_assert (count > 0);
+
+ if ((u = gsk_ngl_uniform_state_get_value (state, program, GSK_NGL_UNIFORM_FORMAT_2FV, count, location,
stamp, &info)))
+ {
+ GSK_NGL_UNIFORM_STATE_REPLACE (info, u, Uniform2f, count);
+ memcpy (u, value, sizeof (Uniform2f) * count);
+ gsk_ngl_uniform_info_changed (info, location, stamp);
+ }
+}
+
+static inline void
+gsk_ngl_uniform_state_set3fv (GskNglUniformState *state,
+ GskNglUniformProgram *program,
+ guint location,
+ guint stamp,
+ guint count,
+ const float *value)
+{
+ Uniform3f *u;
+ GskNglUniformInfoElement *info;
+
+ g_assert (state != NULL);
+ g_assert (program != NULL);
+ g_assert (count > 0);
+
+ if ((u = gsk_ngl_uniform_state_get_value (state, program, GSK_NGL_UNIFORM_FORMAT_3FV, count, location,
stamp, &info)))
+ {
+ GSK_NGL_UNIFORM_STATE_REPLACE (info, u, Uniform3f, count);
+ memcpy (u, value, sizeof (Uniform3f) * count);
+ gsk_ngl_uniform_info_changed (info, location, stamp);
+ }
+}
+
+static inline void
+gsk_ngl_uniform_state_set4fv (GskNglUniformState *state,
+ GskNglUniformProgram *program,
+ guint location,
+ guint stamp,
+ guint count,
+ const float *value)
+{
+ Uniform4f *u;
+ GskNglUniformInfoElement *info;
+
+ g_assert (state != NULL);
+ g_assert (program != NULL);
+ g_assert (count > 0);
+
+ if ((u = gsk_ngl_uniform_state_get_value (state, program, GSK_NGL_UNIFORM_FORMAT_4FV, count, location,
stamp, &info)))
+ {
+ GSK_NGL_UNIFORM_STATE_REPLACE (info, u, Uniform4f, count);
+ memcpy (u, value, sizeof (Uniform4f) * count);
+ gsk_ngl_uniform_info_changed (info, location, stamp);
+ }
+}
+
+G_END_DECLS
+
+#endif /* GSK_NGL_UNIFORM_STATE_PRIVATE_H */
diff --git a/gsk/next/inlinearray.h b/gsk/ngl/inlinearray.h
similarity index 100%
rename from gsk/next/inlinearray.h
rename to gsk/ngl/inlinearray.h
diff --git a/gsk/next/ninesliceprivate.h b/gsk/ngl/ninesliceprivate.h
similarity index 93%
rename from gsk/next/ninesliceprivate.h
rename to gsk/ngl/ninesliceprivate.h
index 46677b437f..fe787acc1d 100644
--- a/gsk/next/ninesliceprivate.h
+++ b/gsk/ngl/ninesliceprivate.h
@@ -22,7 +22,7 @@
#ifndef __NINE_SLICE_PRIVATE_H__
#define __NINE_SLICE_PRIVATE_H__
-#include "gskgltexturepoolprivate.h"
+#include "gskngltexturepoolprivate.h"
#if 0
# define DEBUG_NINE_SLICE
@@ -43,14 +43,14 @@ enum {
};
static inline bool G_GNUC_PURE
-nine_slice_is_visible (const GskGLTextureNineSlice *slice)
+nine_slice_is_visible (const GskNglTextureNineSlice *slice)
{
return slice->rect.width > 0 && slice->rect.height > 0;
}
static inline void
-nine_slice_rounded_rect (GskGLTextureNineSlice *slices,
- const GskRoundedRect *rect)
+nine_slice_rounded_rect (GskNglTextureNineSlice *slices,
+ const GskRoundedRect *rect)
{
const graphene_point_t *origin = &rect->bounds.origin;
const graphene_size_t *size = &rect->bounds.size;
@@ -130,16 +130,16 @@ nine_slice_rounded_rect (GskGLTextureNineSlice *slices,
}
static inline void
-nine_slice_to_texture_coords (GskGLTextureNineSlice *slices,
- int texture_width,
- int texture_height)
+nine_slice_to_texture_coords (GskNglTextureNineSlice *slices,
+ int texture_width,
+ int texture_height)
{
float fw = texture_width;
float fh = texture_height;
for (guint i = 0; i < 9; i++)
{
- GskGLTextureNineSlice *slice = &slices[i];
+ GskNglTextureNineSlice *slice = &slices[i];
slice->area.x = slice->rect.x / fw;
slice->area.y = 1.0 - ((slice->rect.y + slice->rect.height) / fh);
@@ -158,8 +158,8 @@ nine_slice_to_texture_coords (GskGLTextureNineSlice *slices,
}
static inline void
-nine_slice_grow (GskGLTextureNineSlice *slices,
- int amount)
+nine_slice_grow (GskNglTextureNineSlice *slices,
+ int amount)
{
if (amount == 0)
return;
diff --git a/gtk/gtktestutils.c b/gtk/gtktestutils.c
index 64d4e5a4a1..35dcff797c 100644
--- a/gtk/gtktestutils.c
+++ b/gtk/gtktestutils.c
@@ -41,7 +41,7 @@
#define GTK_COMPILATION
#include <gsk/gl/gskglrenderer.h>
-#include <gsk/next/gskglrenderer.h>
+#include <gsk/ngl/gsknglrenderer.h>
#ifdef GDK_WINDOWING_BROADWAY
#include <gsk/broadway/gskbroadwayrenderer.h>
diff --git a/gtk/inspector/general.c b/gtk/inspector/general.c
index 7e410b6c36..451300bb5a 100644
--- a/gtk/inspector/general.c
+++ b/gtk/inspector/general.c
@@ -147,8 +147,8 @@ init_version (GtkInspectorGeneral *gen)
renderer = "Vulkan";
else if (strcmp (G_OBJECT_TYPE_NAME (gsk_renderer), "GskGLRenderer") == 0)
renderer = "GL";
- else if (strcmp (G_OBJECT_TYPE_NAME (gsk_renderer), "GskNextRenderer") == 0)
- renderer = "GL (Next)";
+ else if (strcmp (G_OBJECT_TYPE_NAME (gsk_renderer), "GskNgltRenderer") == 0)
+ renderer = "NGL";
else if (strcmp (G_OBJECT_TYPE_NAME (gsk_renderer), "GskCairoRenderer") == 0)
renderer = "Cairo";
else
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]