forked from AuroraMiddleware/gtk
gdkgl: Change prototype of function
The function does not upload a cairo surface, it uploads pixel data. So don't take a cairo surface as an argument, take pixel data.
This commit is contained in:
parent
02c615cc34
commit
3d8b00600e
14
gdk/gdkgl.c
14
gdk/gdkgl.c
@ -780,7 +780,12 @@ gdk_gl_texture_from_surface (cairo_surface_t *surface,
|
||||
e.height *= sy;
|
||||
image = cairo_surface_map_to_image (surface, &e);
|
||||
|
||||
gdk_gl_context_upload_texture (paint_context, image, e.width, e.height, target);
|
||||
gdk_gl_context_upload_texture (paint_context,
|
||||
cairo_image_surface_get_data (image),
|
||||
e.width,
|
||||
e.height,
|
||||
cairo_image_surface_get_stride (image),
|
||||
target);
|
||||
|
||||
cairo_surface_unmap_image (surface, image);
|
||||
|
||||
@ -855,7 +860,12 @@ gdk_cairo_surface_upload_to_gl (cairo_surface_t *surface,
|
||||
rect.height = height;
|
||||
tmp = cairo_surface_map_to_image (surface, &rect);
|
||||
|
||||
gdk_gl_context_upload_texture (context, tmp, rect.width, rect.height, target);
|
||||
gdk_gl_context_upload_texture (context,
|
||||
cairo_image_surface_get_data (tmp),
|
||||
rect.width,
|
||||
rect.height,
|
||||
cairo_image_surface_get_stride (tmp),
|
||||
target);
|
||||
|
||||
cairo_surface_unmap_image (surface, tmp);
|
||||
}
|
||||
|
@ -237,9 +237,10 @@ gdk_gl_context_get_property (GObject *gobject,
|
||||
|
||||
void
|
||||
gdk_gl_context_upload_texture (GdkGLContext *context,
|
||||
cairo_surface_t *image_surface,
|
||||
const guchar *data,
|
||||
int width,
|
||||
int height,
|
||||
int stride,
|
||||
guint texture_target)
|
||||
{
|
||||
GdkGLContextPrivate *priv = gdk_gl_context_get_instance_private (context);
|
||||
@ -253,21 +254,19 @@ gdk_gl_context_upload_texture (GdkGLContext *context,
|
||||
(priv->use_es && (priv->gl_version >= 30 || priv->has_unpack_subimage)))
|
||||
{
|
||||
glPixelStorei (GL_UNPACK_ALIGNMENT, 4);
|
||||
glPixelStorei (GL_UNPACK_ROW_LENGTH, cairo_image_surface_get_stride (image_surface) / 4);
|
||||
glPixelStorei (GL_UNPACK_ROW_LENGTH, stride / 4);
|
||||
|
||||
if (priv->use_es)
|
||||
glTexImage2D (texture_target, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE,
|
||||
cairo_image_surface_get_data (image_surface));
|
||||
data);
|
||||
else
|
||||
glTexImage2D (texture_target, 0, GL_RGBA, width, height, 0, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV,
|
||||
cairo_image_surface_get_data (image_surface));
|
||||
data);
|
||||
|
||||
glPixelStorei (GL_UNPACK_ROW_LENGTH, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
GLvoid *data = cairo_image_surface_get_data (image_surface);
|
||||
int stride = cairo_image_surface_get_stride (image_surface);
|
||||
int i;
|
||||
|
||||
if (priv->use_es)
|
||||
@ -275,14 +274,14 @@ gdk_gl_context_upload_texture (GdkGLContext *context,
|
||||
glTexImage2D (texture_target, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
|
||||
|
||||
for (i = 0; i < height; i++)
|
||||
glTexSubImage2D (texture_target, 0, 0, i, width, 1, GL_RGBA, GL_UNSIGNED_BYTE, (unsigned char*) data + (i * stride));
|
||||
glTexSubImage2D (texture_target, 0, 0, i, width, 1, GL_RGBA, GL_UNSIGNED_BYTE, data + (i * stride));
|
||||
}
|
||||
else
|
||||
{
|
||||
glTexImage2D (texture_target, 0, GL_RGBA, width, height, 0, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, NULL);
|
||||
|
||||
for (i = 0; i < height; i++)
|
||||
glTexSubImage2D (texture_target, 0, 0, i, width, 1, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, (unsigned char*) data + (i * stride));
|
||||
glTexSubImage2D (texture_target, 0, 0, i, width, 1, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, data + (i * stride));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -77,9 +77,10 @@ void gdk_gl_context_set_is_legacy (GdkGLContext
|
||||
gboolean is_legacy);
|
||||
|
||||
void gdk_gl_context_upload_texture (GdkGLContext *context,
|
||||
cairo_surface_t *image_surface,
|
||||
const guchar *data,
|
||||
int width,
|
||||
int height,
|
||||
int stride,
|
||||
guint texture_target);
|
||||
GdkGLContextPaintData * gdk_gl_context_get_paint_data (GdkGLContext *context);
|
||||
gboolean gdk_gl_context_use_texture_rectangle (GdkGLContext *context);
|
||||
|
Loading…
Reference in New Issue
Block a user