commit
189c0cf1c9
@ -1,117 +0,0 @@
|
||||
From 988e021960eb372be50038fdf0b2874f063c02b6 Mon Sep 17 00:00:00 2001
|
||||
From: Adam Jackson <ajax@redhat.com>
|
||||
Date: Tue, 11 Oct 2016 16:16:38 -0400
|
||||
Subject: [PATCH] egl: Use eglGetPlatformDisplay not eglGetDisplay
|
||||
|
||||
The latter requires the implementation to guess which kind of display it
|
||||
is. Different implementations do different thing, in particular glvnd
|
||||
does something different from Mesa, and it's better to be explicit about
|
||||
what we need.
|
||||
|
||||
Signed-off-by: Adam Jackson <ajax@redhat.com>
|
||||
---
|
||||
cogl/cogl-egl.h | 1 -
|
||||
cogl/winsys/cogl-winsys-egl-kms.c | 3 ++-
|
||||
cogl/winsys/cogl-winsys-egl-private.h | 33 +++++++++++++++++++++++++++++++++
|
||||
cogl/winsys/cogl-winsys-egl-wayland.c | 3 ++-
|
||||
cogl/winsys/cogl-winsys-egl-x11.c | 2 +-
|
||||
5 files changed, 38 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/cogl/cogl-egl.h b/cogl/cogl-egl.h
|
||||
index cea7b10..5dac55f 100644
|
||||
--- a/cogl/cogl-egl.h
|
||||
+++ b/cogl/cogl-egl.h
|
||||
@@ -98,7 +98,6 @@ cogl_egl_context_get_egl_display (CoglContext *context);
|
||||
EGLContext
|
||||
cogl_egl_context_get_egl_context (CoglContext *context);
|
||||
|
||||
-
|
||||
COGL_END_DECLS
|
||||
|
||||
/* The gobject introspection scanner seems to parse public headers in
|
||||
diff --git a/cogl/winsys/cogl-winsys-egl-kms.c b/cogl/winsys/cogl-winsys-egl-kms.c
|
||||
index 4da1f14..ae9f6fc 100644
|
||||
--- a/cogl/winsys/cogl-winsys-egl-kms.c
|
||||
+++ b/cogl/winsys/cogl-winsys-egl-kms.c
|
||||
@@ -342,7 +342,8 @@ _cogl_winsys_renderer_connect (CoglRenderer *renderer,
|
||||
goto fail;
|
||||
}
|
||||
|
||||
- egl_renderer->edpy = eglGetDisplay ((EGLNativeDisplayType)kms_renderer->gbm);
|
||||
+ egl_renderer->edpy = cogl_winsys_egl_get_display(EGL_PLATFORM_GBM_KHR,
|
||||
+ kms_renderer->gbm);
|
||||
if (egl_renderer->edpy == EGL_NO_DISPLAY)
|
||||
{
|
||||
_cogl_set_error (error, COGL_WINSYS_ERROR,
|
||||
diff --git a/cogl/winsys/cogl-winsys-egl-private.h b/cogl/winsys/cogl-winsys-egl-private.h
|
||||
index 5d21b4f..27ac25c 100644
|
||||
--- a/cogl/winsys/cogl-winsys-egl-private.h
|
||||
+++ b/cogl/winsys/cogl-winsys-egl-private.h
|
||||
@@ -200,4 +200,37 @@ CoglBool
|
||||
_cogl_winsys_egl_renderer_connect_common (CoglRenderer *renderer,
|
||||
CoglError **error);
|
||||
|
||||
+static inline EGLDisplay
|
||||
+cogl_winsys_egl_get_display (EGLint type, void *native)
|
||||
+{
|
||||
+ EGLDisplay dpy = NULL;
|
||||
+ const char *client_exts = eglQueryString (NULL, EGL_EXTENSIONS);
|
||||
+
|
||||
+ if (g_strstr_len (client_exts, -1, "EGL_KHR_platform_base"))
|
||||
+ {
|
||||
+ PFNEGLGETPLATFORMDISPLAYEXTPROC get_platform_display =
|
||||
+ (void *) eglGetProcAddress ("eglGetPlatformDisplay");
|
||||
+
|
||||
+ if (get_platform_display)
|
||||
+ dpy = get_platform_display (type, native, NULL);
|
||||
+
|
||||
+ if (dpy)
|
||||
+ return dpy;
|
||||
+ }
|
||||
+
|
||||
+ if (g_strstr_len (client_exts, -1, "EGL_EXT_platform_base"))
|
||||
+ {
|
||||
+ PFNEGLGETPLATFORMDISPLAYEXTPROC get_platform_display =
|
||||
+ (void *) eglGetProcAddress ("eglGetPlatformDisplayEXT");
|
||||
+
|
||||
+ if (get_platform_display)
|
||||
+ dpy = get_platform_display (type, native, NULL);
|
||||
+
|
||||
+ if (dpy)
|
||||
+ return dpy;
|
||||
+ }
|
||||
+
|
||||
+ return eglGetDisplay ((EGLNativeDisplayType) native);
|
||||
+}
|
||||
+
|
||||
#endif /* __COGL_WINSYS_EGL_PRIVATE_H */
|
||||
diff --git a/cogl/winsys/cogl-winsys-egl-wayland.c b/cogl/winsys/cogl-winsys-egl-wayland.c
|
||||
index 2e22052..463041b 100644
|
||||
--- a/cogl/winsys/cogl-winsys-egl-wayland.c
|
||||
+++ b/cogl/winsys/cogl-winsys-egl-wayland.c
|
||||
@@ -289,7 +289,8 @@ _cogl_winsys_renderer_connect (CoglRenderer *renderer,
|
||||
}
|
||||
|
||||
egl_renderer->edpy =
|
||||
- eglGetDisplay ((EGLNativeDisplayType) wayland_renderer->wayland_display);
|
||||
+ cogl_winsys_egl_get_display (EGL_PLATFORM_WAYLAND_KHR,
|
||||
+ wayland_renderer->wayland_display);
|
||||
|
||||
if (!_cogl_winsys_egl_renderer_connect_common (renderer, error))
|
||||
goto error;
|
||||
diff --git a/cogl/winsys/cogl-winsys-egl-x11.c b/cogl/winsys/cogl-winsys-egl-x11.c
|
||||
index 724a4d0..a7e9c2f 100644
|
||||
--- a/cogl/winsys/cogl-winsys-egl-x11.c
|
||||
+++ b/cogl/winsys/cogl-winsys-egl-x11.c
|
||||
@@ -278,7 +278,7 @@ _cogl_winsys_renderer_connect (CoglRenderer *renderer,
|
||||
goto error;
|
||||
|
||||
egl_renderer->edpy =
|
||||
- eglGetDisplay ((EGLNativeDisplayType) xlib_renderer->xdpy);
|
||||
+ cogl_winsys_egl_get_display (EGL_PLATFORM_X11_KHR, xlib_renderer->xdpy);
|
||||
|
||||
if (!_cogl_winsys_egl_renderer_connect_common (renderer, error))
|
||||
goto error;
|
||||
--
|
||||
2.9.3
|
||||
|
||||
@ -1,96 +0,0 @@
|
||||
From 78636289b073d67209a20145ef0dc003f2d77db6 Mon Sep 17 00:00:00 2001
|
||||
From: Sian Cao <yinshuiboy@gmail.com>
|
||||
Date: Tue, 12 Apr 2016 11:36:51 +0800
|
||||
Subject: Add GL_ARB_shader_texture_lod support
|
||||
|
||||
The patch is used to do lod biased texturing. I can achieve
|
||||
faster blurring of images instead of using large blur radius.
|
||||
|
||||
Signed-off-by:
|
||||
Sian Cao <yinshuiboy@gmail.com>: initial
|
||||
|
||||
---
|
||||
cogl/cogl-context.h | 1 +
|
||||
cogl/cogl-glsl-shader.c | 13 +++++++++++--
|
||||
cogl/cogl-types.h | 3 ++-
|
||||
cogl/driver/gl/gl/cogl-driver-gl.c | 7 +++++++
|
||||
4 files changed, 21 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/cogl/cogl-context.h b/cogl/cogl-context.h
|
||||
index 07badeb..261ce49 100644
|
||||
--- a/cogl/cogl-context.h
|
||||
+++ b/cogl/cogl-context.h
|
||||
@@ -290,6 +290,7 @@ typedef enum _CoglFeatureID
|
||||
COGL_FEATURE_ID_PER_VERTEX_POINT_SIZE,
|
||||
COGL_FEATURE_ID_TEXTURE_RG,
|
||||
COGL_FEATURE_ID_BUFFER_AGE,
|
||||
+ COGL_FEATURE_ID_SHADER_TEXTURE_LOD,
|
||||
|
||||
/*< private >*/
|
||||
_COGL_N_FEATURE_IDS /*< skip >*/
|
||||
diff --git a/cogl/cogl-glsl-shader.c b/cogl/cogl-glsl-shader.c
|
||||
index 196e0c7..4fb0eb5 100644
|
||||
--- a/cogl/cogl-glsl-shader.c
|
||||
+++ b/cogl/cogl-glsl-shader.c
|
||||
@@ -87,8 +87,8 @@ _cogl_glsl_shader_set_source_with_boilerplate (CoglContext *ctx,
|
||||
const char *vertex_boilerplate;
|
||||
const char *fragment_boilerplate;
|
||||
|
||||
- const char **strings = g_alloca (sizeof (char *) * (count_in + 4));
|
||||
- GLint *lengths = g_alloca (sizeof (GLint) * (count_in + 4));
|
||||
+ const char **strings = g_alloca (sizeof (char *) * (count_in + 5));
|
||||
+ GLint *lengths = g_alloca (sizeof (GLint) * (count_in + 5));
|
||||
char *version_string;
|
||||
int count = 0;
|
||||
|
||||
@@ -111,6 +111,15 @@ _cogl_glsl_shader_set_source_with_boilerplate (CoglContext *ctx,
|
||||
lengths[count++] = sizeof (texture_3d_extension) - 1;
|
||||
}
|
||||
|
||||
+ if (_cogl_has_private_feature (ctx, COGL_PRIVATE_FEATURE_GL_PROGRAMMABLE) &&
|
||||
+ cogl_has_feature (ctx, COGL_FEATURE_ID_SHADER_TEXTURE_LOD))
|
||||
+ {
|
||||
+ static const char shader_texture_lod_ext[] =
|
||||
+ "#extension GL_ARB_shader_texture_lod : enable\n";
|
||||
+ strings[count] = shader_texture_lod_ext;
|
||||
+ lengths[count++] = sizeof (shader_texture_lod_ext) - 1;
|
||||
+ }
|
||||
+
|
||||
if (shader_gl_type == GL_VERTEX_SHADER)
|
||||
{
|
||||
strings[count] = vertex_boilerplate;
|
||||
diff --git a/cogl/cogl-types.h b/cogl/cogl-types.h
|
||||
index 6accf8d..77964c6 100644
|
||||
--- a/cogl/cogl-types.h
|
||||
+++ b/cogl/cogl-types.h
|
||||
@@ -470,7 +470,8 @@ typedef enum
|
||||
COGL_FEATURE_MAP_BUFFER_FOR_READ = (1 << 21),
|
||||
COGL_FEATURE_MAP_BUFFER_FOR_WRITE = (1 << 22),
|
||||
COGL_FEATURE_ONSCREEN_MULTIPLE = (1 << 23),
|
||||
- COGL_FEATURE_DEPTH_TEXTURE = (1 << 24)
|
||||
+ COGL_FEATURE_DEPTH_TEXTURE = (1 << 24),
|
||||
+ COGL_FEATURE_SHADER_TEXTURE_LOD = (1 << 25)
|
||||
} CoglFeatureFlags;
|
||||
|
||||
/**
|
||||
diff --git a/cogl/driver/gl/gl/cogl-driver-gl.c b/cogl/driver/gl/gl/cogl-driver-gl.c
|
||||
index 716d1dd..f305b6a 100644
|
||||
--- a/cogl/driver/gl/gl/cogl-driver-gl.c
|
||||
+++ b/cogl/driver/gl/gl/cogl-driver-gl.c
|
||||
@@ -568,6 +568,13 @@ _cogl_driver_update_features (CoglContext *ctx,
|
||||
COGL_FEATURE_ID_TEXTURE_RECTANGLE, TRUE);
|
||||
}
|
||||
|
||||
+ if (_cogl_check_extension ("GL_ARB_shader_texture_lod", gl_extensions))
|
||||
+ {
|
||||
+ flags |= COGL_FEATURE_SHADER_TEXTURE_LOD;
|
||||
+ COGL_FLAGS_SET (ctx->features,
|
||||
+ COGL_FEATURE_ID_SHADER_TEXTURE_LOD, TRUE);
|
||||
+ }
|
||||
+
|
||||
if (ctx->glTexImage3D)
|
||||
{
|
||||
flags |= COGL_FEATURE_TEXTURE_3D;
|
||||
--
|
||||
2.9.5
|
||||
|
||||
@ -1,373 +0,0 @@
|
||||
From d8b34ab0604d80d0be22b8b78e9aa6bf4fac7db0 Mon Sep 17 00:00:00 2001
|
||||
From: Sian Cao <yinshuiboy@gmail.com>
|
||||
Date: Thu, 27 Oct 2016 15:19:32 +0800
|
||||
Subject: texture: Support copy_sub_image
|
||||
|
||||
The patch is used to implement feature similar with kwin blur effect
|
||||
by being abel to copy partial of framebuffer contents as texture and
|
||||
do post blurring.
|
||||
|
||||
Signed-off-by:
|
||||
Sian Cao <yinshuiboy@gmail.com>: initial
|
||||
Bowen Li <sensor.wen@gmail.com>: fix coding style
|
||||
|
||||
---
|
||||
cogl/cogl-atlas-texture.c | 1 +
|
||||
cogl/cogl-driver.h | 10 ++++++++
|
||||
cogl/cogl-sub-texture.c | 1 +
|
||||
cogl/cogl-texture-2d-sliced.c | 1 +
|
||||
cogl/cogl-texture-2d.c | 30 ++++++++++++++++++++++
|
||||
cogl/cogl-texture-3d.c | 1 +
|
||||
cogl/cogl-texture-private.h | 9 +++++++
|
||||
cogl/cogl-texture-rectangle.c | 1 +
|
||||
cogl/cogl-texture.c | 33 ++++++++++++++++++++++++
|
||||
cogl/cogl-texture.h | 9 +++++++
|
||||
cogl/driver/gl/cogl-texture-2d-gl-private.h | 9 +++++++
|
||||
cogl/driver/gl/cogl-texture-2d-gl.c | 39 +++++++++++++++++++++++++++++
|
||||
cogl/driver/gl/gl/cogl-driver-gl.c | 1 +
|
||||
cogl/driver/gl/gles/cogl-driver-gles.c | 1 +
|
||||
cogl/driver/nop/cogl-driver-nop.c | 1 +
|
||||
cogl/winsys/cogl-texture-pixmap-x11.c | 1 +
|
||||
16 files changed, 148 insertions(+)
|
||||
|
||||
diff --git a/cogl/cogl-atlas-texture.c b/cogl/cogl-atlas-texture.c
|
||||
index 1c8b569..e411302 100644
|
||||
--- a/cogl/cogl-atlas-texture.c
|
||||
+++ b/cogl/cogl-atlas-texture.c
|
||||
@@ -1027,6 +1027,7 @@ cogl_atlas_texture_vtable =
|
||||
FALSE, /* not primitive */
|
||||
_cogl_atlas_texture_allocate,
|
||||
_cogl_atlas_texture_set_region,
|
||||
+ NULL, /* copy_sub_image */
|
||||
NULL, /* get_data */
|
||||
_cogl_atlas_texture_foreach_sub_texture_in_region,
|
||||
_cogl_atlas_texture_get_max_waste,
|
||||
diff --git a/cogl/cogl-driver.h b/cogl/cogl-driver.h
|
||||
index 648228c..4a0aeaf 100644
|
||||
--- a/cogl/cogl-driver.h
|
||||
+++ b/cogl/cogl-driver.h
|
||||
@@ -192,6 +192,16 @@ struct _CoglDriverVtable
|
||||
int level,
|
||||
CoglError **error);
|
||||
|
||||
+ CoglBool
|
||||
+ (* texture_2d_copy_sub_image) (CoglTexture2D *tex_2d,
|
||||
+ GLint xoffset,
|
||||
+ GLint yoffset,
|
||||
+ GLint x,
|
||||
+ GLint y,
|
||||
+ GLsizei width,
|
||||
+ GLsizei height,
|
||||
+ CoglError **error);
|
||||
+
|
||||
/* Reads back the full contents of the given texture and write it to
|
||||
* @data in the given @format and with the given @rowstride.
|
||||
*
|
||||
diff --git a/cogl/cogl-sub-texture.c b/cogl/cogl-sub-texture.c
|
||||
index 7baf95e..0a16193 100644
|
||||
--- a/cogl/cogl-sub-texture.c
|
||||
+++ b/cogl/cogl-sub-texture.c
|
||||
@@ -460,6 +460,7 @@ cogl_sub_texture_vtable =
|
||||
FALSE, /* not primitive */
|
||||
_cogl_sub_texture_allocate,
|
||||
_cogl_sub_texture_set_region,
|
||||
+ NULL, /* copy_sub_image */
|
||||
NULL, /* get_data */
|
||||
_cogl_sub_texture_foreach_sub_texture_in_region,
|
||||
_cogl_sub_texture_get_max_waste,
|
||||
diff --git a/cogl/cogl-texture-2d-sliced.c b/cogl/cogl-texture-2d-sliced.c
|
||||
index e76bef6..b0b099f 100644
|
||||
--- a/cogl/cogl-texture-2d-sliced.c
|
||||
+++ b/cogl/cogl-texture-2d-sliced.c
|
||||
@@ -1526,6 +1526,7 @@ cogl_texture_2d_sliced_vtable =
|
||||
FALSE, /* not primitive */
|
||||
_cogl_texture_2d_sliced_allocate,
|
||||
_cogl_texture_2d_sliced_set_region,
|
||||
+ NULL, /* copy_sub_image */
|
||||
NULL, /* get_data */
|
||||
_cogl_texture_2d_sliced_foreach_sub_texture_in_region,
|
||||
_cogl_texture_2d_sliced_get_max_waste,
|
||||
diff --git a/cogl/cogl-texture-2d.c b/cogl/cogl-texture-2d.c
|
||||
index cc28cd9..d9ab188 100644
|
||||
--- a/cogl/cogl-texture-2d.c
|
||||
+++ b/cogl/cogl-texture-2d.c
|
||||
@@ -628,6 +628,35 @@ _cogl_texture_2d_set_region (CoglTexture *tex,
|
||||
}
|
||||
|
||||
static CoglBool
|
||||
+_cogl_texture_2d_copy_sub_image (CoglTexture *tex,
|
||||
+ GLint xoffset,
|
||||
+ GLint yoffset,
|
||||
+ GLint x,
|
||||
+ GLint y,
|
||||
+ GLsizei width,
|
||||
+ GLsizei height,
|
||||
+ CoglError **error)
|
||||
+{
|
||||
+ CoglContext *ctx = tex->context;
|
||||
+ CoglTexture2D *tex_2d = COGL_TEXTURE_2D (tex);
|
||||
+
|
||||
+ cogl_texture_allocate (tex, NULL); /* (abort on error) */
|
||||
+
|
||||
+ ctx->driver_vtable->texture_2d_copy_sub_image (tex_2d,
|
||||
+ xoffset,
|
||||
+ yoffset,
|
||||
+ x,
|
||||
+ y,
|
||||
+ width,
|
||||
+ height,
|
||||
+ error);
|
||||
+
|
||||
+ tex_2d->mipmaps_dirty = TRUE;
|
||||
+
|
||||
+ return TRUE;
|
||||
+}
|
||||
+
|
||||
+static CoglBool
|
||||
_cogl_texture_2d_get_data (CoglTexture *tex,
|
||||
CoglPixelFormat format,
|
||||
int rowstride,
|
||||
@@ -675,6 +704,7 @@ cogl_texture_2d_vtable =
|
||||
TRUE, /* primitive */
|
||||
_cogl_texture_2d_allocate,
|
||||
_cogl_texture_2d_set_region,
|
||||
+ _cogl_texture_2d_copy_sub_image,
|
||||
_cogl_texture_2d_get_data,
|
||||
NULL, /* foreach_sub_texture_in_region */
|
||||
_cogl_texture_2d_get_max_waste,
|
||||
diff --git a/cogl/cogl-texture-3d.c b/cogl/cogl-texture-3d.c
|
||||
index 8e2ff08..a59d386 100644
|
||||
--- a/cogl/cogl-texture-3d.c
|
||||
+++ b/cogl/cogl-texture-3d.c
|
||||
@@ -741,6 +741,7 @@ cogl_texture_3d_vtable =
|
||||
TRUE, /* primitive */
|
||||
_cogl_texture_3d_allocate,
|
||||
_cogl_texture_3d_set_region,
|
||||
+ NULL, /* copy_sub_image */
|
||||
_cogl_texture_3d_get_data,
|
||||
NULL, /* foreach_sub_texture_in_region */
|
||||
_cogl_texture_3d_get_max_waste,
|
||||
diff --git a/cogl/cogl-texture-private.h b/cogl/cogl-texture-private.h
|
||||
index 472c41d..34ff81c 100644
|
||||
--- a/cogl/cogl-texture-private.h
|
||||
+++ b/cogl/cogl-texture-private.h
|
||||
@@ -90,6 +90,15 @@ struct _CoglTextureVtable
|
||||
CoglBitmap *bitmap,
|
||||
CoglError **error);
|
||||
|
||||
+ CoglBool (* copy_sub_image) (CoglTexture *texture,
|
||||
+ GLint xoffset,
|
||||
+ GLint yoffset,
|
||||
+ GLint x,
|
||||
+ GLint y,
|
||||
+ GLsizei width,
|
||||
+ GLsizei height,
|
||||
+ CoglError **error);
|
||||
+
|
||||
/* This should copy the image data of the texture into @data. The
|
||||
requested format will have been first passed through
|
||||
ctx->texture_driver->find_best_gl_get_data_format so it should
|
||||
diff --git a/cogl/cogl-texture-rectangle.c b/cogl/cogl-texture-rectangle.c
|
||||
index 65d2f06..9f533c9 100644
|
||||
--- a/cogl/cogl-texture-rectangle.c
|
||||
+++ b/cogl/cogl-texture-rectangle.c
|
||||
@@ -761,6 +761,7 @@ cogl_texture_rectangle_vtable =
|
||||
TRUE, /* primitive */
|
||||
_cogl_texture_rectangle_allocate,
|
||||
_cogl_texture_rectangle_set_region,
|
||||
+ NULL, /* copy_sub_image */
|
||||
_cogl_texture_rectangle_get_data,
|
||||
NULL, /* foreach_sub_texture_in_region */
|
||||
_cogl_texture_rectangle_get_max_waste,
|
||||
diff --git a/cogl/cogl-texture.c b/cogl/cogl-texture.c
|
||||
index d93db22..1f4b43c 100644
|
||||
--- a/cogl/cogl-texture.c
|
||||
+++ b/cogl/cogl-texture.c
|
||||
@@ -514,6 +514,39 @@ cogl_texture_set_region (CoglTexture *texture,
|
||||
}
|
||||
|
||||
CoglBool
|
||||
+cogl_texture_copy_sub_image (CoglTexture *texture,
|
||||
+ int xoffset,
|
||||
+ int yoffset,
|
||||
+ int x,
|
||||
+ int y,
|
||||
+ size_t width,
|
||||
+ size_t height)
|
||||
+{
|
||||
+ CoglError *ignore_error = NULL;
|
||||
+ CoglBool status;
|
||||
+
|
||||
+ if (!texture->allocated)
|
||||
+ cogl_texture_allocate (texture, NULL);
|
||||
+
|
||||
+ if (!texture->vtable->copy_sub_image)
|
||||
+ return FALSE;
|
||||
+
|
||||
+ status = texture->vtable->copy_sub_image (texture,
|
||||
+ xoffset,
|
||||
+ yoffset,
|
||||
+ x,
|
||||
+ y,
|
||||
+ width,
|
||||
+ height,
|
||||
+ &ignore_error);
|
||||
+
|
||||
+ if (!status)
|
||||
+ cogl_error_free (ignore_error);
|
||||
+ return status;
|
||||
+}
|
||||
+
|
||||
+
|
||||
+CoglBool
|
||||
cogl_texture_set_data (CoglTexture *texture,
|
||||
CoglPixelFormat format,
|
||||
int rowstride,
|
||||
diff --git a/cogl/cogl-texture.h b/cogl/cogl-texture.h
|
||||
index 2718830..81657d1 100644
|
||||
--- a/cogl/cogl-texture.h
|
||||
+++ b/cogl/cogl-texture.h
|
||||
@@ -399,6 +399,15 @@ cogl_texture_set_region (CoglTexture *texture,
|
||||
unsigned int rowstride,
|
||||
const uint8_t *data);
|
||||
|
||||
+CoglBool
|
||||
+cogl_texture_copy_sub_image (CoglTexture *texture,
|
||||
+ int xoffset,
|
||||
+ int yoffset,
|
||||
+ int x,
|
||||
+ int y,
|
||||
+ size_t width,
|
||||
+ size_t height);
|
||||
+
|
||||
#if defined (COGL_ENABLE_EXPERIMENTAL_API)
|
||||
|
||||
/**
|
||||
diff --git a/cogl/driver/gl/cogl-texture-2d-gl-private.h b/cogl/driver/gl/cogl-texture-2d-gl-private.h
|
||||
index e5c6585..d2f9985 100644
|
||||
--- a/cogl/driver/gl/cogl-texture-2d-gl-private.h
|
||||
+++ b/cogl/driver/gl/cogl-texture-2d-gl-private.h
|
||||
@@ -109,6 +109,15 @@ _cogl_texture_2d_gl_copy_from_bitmap (CoglTexture2D *tex_2d,
|
||||
int dst_y,
|
||||
int level,
|
||||
CoglError **error);
|
||||
+CoglBool
|
||||
+_cogl_texture_2d_gl_copy_sub_image (CoglTexture2D *tex_2d,
|
||||
+ GLint xoffset,
|
||||
+ GLint yoffset,
|
||||
+ GLint x,
|
||||
+ GLint y,
|
||||
+ GLsizei width,
|
||||
+ GLsizei height,
|
||||
+ CoglError **error);
|
||||
|
||||
void
|
||||
_cogl_texture_2d_gl_get_data (CoglTexture2D *tex_2d,
|
||||
diff --git a/cogl/driver/gl/cogl-texture-2d-gl.c b/cogl/driver/gl/cogl-texture-2d-gl.c
|
||||
index 8675f52..bc15ac5 100644
|
||||
--- a/cogl/driver/gl/cogl-texture-2d-gl.c
|
||||
+++ b/cogl/driver/gl/cogl-texture-2d-gl.c
|
||||
@@ -35,6 +35,7 @@
|
||||
#include <config.h>
|
||||
|
||||
#include <string.h>
|
||||
+#include <stdio.h>
|
||||
|
||||
#include "cogl-private.h"
|
||||
#include "cogl-texture-private.h"
|
||||
@@ -719,6 +720,44 @@ _cogl_texture_2d_gl_copy_from_bitmap (CoglTexture2D *tex_2d,
|
||||
return status;
|
||||
}
|
||||
|
||||
+CoglBool
|
||||
+_cogl_texture_2d_gl_copy_sub_image (CoglTexture2D *tex_2d,
|
||||
+ GLint xoffset,
|
||||
+ GLint yoffset,
|
||||
+ GLint x,
|
||||
+ GLint y,
|
||||
+ GLsizei width,
|
||||
+ GLsizei height,
|
||||
+ CoglError **error)
|
||||
+{
|
||||
+ CoglContext *ctx = COGL_TEXTURE (tex_2d)->context;
|
||||
+
|
||||
+ if (ctx->current_read_buffer == NULL)
|
||||
+ return FALSE;
|
||||
+
|
||||
+ if (ctx->current_draw_buffer)
|
||||
+ _cogl_framebuffer_flush_journal (ctx->current_draw_buffer);
|
||||
+
|
||||
+ if (ctx->current_read_buffer != NULL &&
|
||||
+ ctx->current_read_buffer != ctx->current_draw_buffer)
|
||||
+ _cogl_framebuffer_flush_journal (ctx->current_read_buffer);
|
||||
+
|
||||
+ _cogl_bind_gl_texture_transient (GL_TEXTURE_2D,
|
||||
+ tex_2d->gl_texture,
|
||||
+ tex_2d->is_foreign);
|
||||
+
|
||||
+ ctx->glCopyTexSubImage2D (GL_TEXTURE_2D,
|
||||
+ 0,
|
||||
+ xoffset,
|
||||
+ yoffset,
|
||||
+ x,
|
||||
+ y,
|
||||
+ width,
|
||||
+ height);
|
||||
+
|
||||
+ return TRUE;
|
||||
+}
|
||||
+
|
||||
void
|
||||
_cogl_texture_2d_gl_get_data (CoglTexture2D *tex_2d,
|
||||
CoglPixelFormat format,
|
||||
diff --git a/cogl/driver/gl/gl/cogl-driver-gl.c b/cogl/driver/gl/gl/cogl-driver-gl.c
|
||||
index f305b6a..f7f5020 100644
|
||||
--- a/cogl/driver/gl/gl/cogl-driver-gl.c
|
||||
+++ b/cogl/driver/gl/gl/cogl-driver-gl.c
|
||||
@@ -695,6 +695,7 @@ _cogl_driver_gl =
|
||||
_cogl_texture_2d_gl_get_gl_handle,
|
||||
_cogl_texture_2d_gl_generate_mipmap,
|
||||
_cogl_texture_2d_gl_copy_from_bitmap,
|
||||
+ _cogl_texture_2d_gl_copy_sub_image,
|
||||
_cogl_texture_2d_gl_get_data,
|
||||
_cogl_gl_flush_attributes_state,
|
||||
_cogl_clip_stack_gl_flush,
|
||||
diff --git a/cogl/driver/gl/gles/cogl-driver-gles.c b/cogl/driver/gl/gles/cogl-driver-gles.c
|
||||
index e94449f..f5ac771 100644
|
||||
--- a/cogl/driver/gl/gles/cogl-driver-gles.c
|
||||
+++ b/cogl/driver/gl/gles/cogl-driver-gles.c
|
||||
@@ -476,6 +476,7 @@ _cogl_driver_gles =
|
||||
_cogl_texture_2d_gl_get_gl_handle,
|
||||
_cogl_texture_2d_gl_generate_mipmap,
|
||||
_cogl_texture_2d_gl_copy_from_bitmap,
|
||||
+ _cogl_texture_2d_gl_copy_sub_image,
|
||||
NULL, /* texture_2d_get_data */
|
||||
_cogl_gl_flush_attributes_state,
|
||||
_cogl_clip_stack_gl_flush,
|
||||
diff --git a/cogl/driver/nop/cogl-driver-nop.c b/cogl/driver/nop/cogl-driver-nop.c
|
||||
index 53f5975..9d88955 100644
|
||||
--- a/cogl/driver/nop/cogl-driver-nop.c
|
||||
+++ b/cogl/driver/nop/cogl-driver-nop.c
|
||||
@@ -80,6 +80,7 @@ _cogl_driver_nop =
|
||||
_cogl_texture_2d_nop_get_gl_handle,
|
||||
_cogl_texture_2d_nop_generate_mipmap,
|
||||
_cogl_texture_2d_nop_copy_from_bitmap,
|
||||
+ NULL, /* texture_2d_copy_from_image */
|
||||
NULL, /* texture_2d_get_data */
|
||||
_cogl_nop_flush_attributes_state,
|
||||
_cogl_clip_stack_nop_flush,
|
||||
diff --git a/cogl/winsys/cogl-texture-pixmap-x11.c b/cogl/winsys/cogl-texture-pixmap-x11.c
|
||||
index 398c357..a44cdaf 100644
|
||||
--- a/cogl/winsys/cogl-texture-pixmap-x11.c
|
||||
+++ b/cogl/winsys/cogl-texture-pixmap-x11.c
|
||||
@@ -1164,6 +1164,7 @@ cogl_texture_pixmap_x11_vtable =
|
||||
FALSE, /* not primitive */
|
||||
_cogl_texture_pixmap_x11_allocate,
|
||||
_cogl_texture_pixmap_x11_set_region,
|
||||
+ NULL, /* copy_sub_image */
|
||||
_cogl_texture_pixmap_x11_get_data,
|
||||
_cogl_texture_pixmap_x11_foreach_sub_texture_in_region,
|
||||
_cogl_texture_pixmap_x11_get_max_waste,
|
||||
--
|
||||
2.9.5
|
||||
|
||||
12
cogl.spec
12
cogl.spec
@ -1,6 +1,6 @@
|
||||
Name: cogl
|
||||
Version: 1.22.4
|
||||
Release: 1
|
||||
Release: 2
|
||||
Summary: Cogl is a modern 3D graphics API with associated utility APIs
|
||||
|
||||
License: LGPLv2+
|
||||
@ -12,10 +12,6 @@ BuildRequires: mesa-libGL-devel glib2-devel gobject-introspection-devel gtk-doc
|
||||
BuildRequires: wayland-devel libXcomposite-devel libXdamage-devel libXext-devel
|
||||
BuildRequires: libXfixes-devel libxkbcommon-devel libXrandr-devel libxslt
|
||||
|
||||
Patch0: 0001-egl-Use-eglGetPlatformDisplay-not-eglGetDisplay.patch
|
||||
Patch1: 0002-add-GL_ARB_shader_texture_lod-support.patch
|
||||
Patch2: 0003-texture-support-copy_sub_image.patch
|
||||
|
||||
%description
|
||||
COGL is a low level OpenGL abstraction library developed for (and part of)
|
||||
Clutter. It is used primarily by Clutter to provide a common rendering API
|
||||
@ -82,6 +78,12 @@ chrpath --delete %{buildroot}%{_libdir}/libcogl-pango.so
|
||||
%exclude %{_datadir}/cogl/examples-data/crate.jpg
|
||||
|
||||
%changelog
|
||||
* Thu Jan 9 2020 openEuler Buildteam <buildteam@openeuler.org> - 1.22.4-2
|
||||
- Type:enhancement
|
||||
- ID:NA
|
||||
- SUG:NA
|
||||
- DESC:delete patches
|
||||
|
||||
* Tue Sep 3 2019 openEuler Buildteam <buildteam@openeuler.org> - 1.22.4-1
|
||||
- Type:enhancement
|
||||
- ID:NA
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user