mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-12-26 13:41:07 +00:00
Refactor gdk_gl_context_upload_texture slightly
Introduce a gl_internalformat variable. This will let us handle more formats in a uniform way in future commits.
This commit is contained in:
parent
155a4fac5c
commit
c1c1d4431d
@ -229,6 +229,7 @@ gdk_gl_context_upload_texture (GdkGLContext *context,
|
|||||||
{
|
{
|
||||||
GdkGLContextPrivate *priv = gdk_gl_context_get_instance_private (context);
|
GdkGLContextPrivate *priv = gdk_gl_context_get_instance_private (context);
|
||||||
guchar *copy = NULL;
|
guchar *copy = NULL;
|
||||||
|
guint gl_internalformat;
|
||||||
guint gl_format;
|
guint gl_format;
|
||||||
guint gl_type;
|
guint gl_type;
|
||||||
guint bpp;
|
guint bpp;
|
||||||
@ -250,6 +251,7 @@ gdk_gl_context_upload_texture (GdkGLContext *context,
|
|||||||
}
|
}
|
||||||
|
|
||||||
bpp = 4;
|
bpp = 4;
|
||||||
|
gl_internalformat = GL_RGBA8;
|
||||||
gl_format = GL_RGBA;
|
gl_format = GL_RGBA;
|
||||||
gl_type = GL_UNSIGNED_BYTE;
|
gl_type = GL_UNSIGNED_BYTE;
|
||||||
}
|
}
|
||||||
@ -257,18 +259,21 @@ gdk_gl_context_upload_texture (GdkGLContext *context,
|
|||||||
{
|
{
|
||||||
if (data_format == GDK_MEMORY_DEFAULT) /* Cairo surface format */
|
if (data_format == GDK_MEMORY_DEFAULT) /* Cairo surface format */
|
||||||
{
|
{
|
||||||
|
gl_internalformat = GL_RGBA8;
|
||||||
gl_format = GL_BGRA;
|
gl_format = GL_BGRA;
|
||||||
gl_type = GL_UNSIGNED_INT_8_8_8_8_REV;
|
gl_type = GL_UNSIGNED_INT_8_8_8_8_REV;
|
||||||
bpp = 4;
|
bpp = 4;
|
||||||
}
|
}
|
||||||
else if (data_format == GDK_MEMORY_R8G8B8) /* Pixmap non-alpha data */
|
else if (data_format == GDK_MEMORY_R8G8B8) /* Pixmap non-alpha data */
|
||||||
{
|
{
|
||||||
|
gl_internalformat = GL_RGBA8;
|
||||||
gl_format = GL_RGB;
|
gl_format = GL_RGB;
|
||||||
gl_type = GL_UNSIGNED_BYTE;
|
gl_type = GL_UNSIGNED_BYTE;
|
||||||
bpp = 3;
|
bpp = 3;
|
||||||
}
|
}
|
||||||
else if (data_format == GDK_MEMORY_B8G8R8)
|
else if (data_format == GDK_MEMORY_B8G8R8)
|
||||||
{
|
{
|
||||||
|
gl_internalformat = GL_RGBA8;
|
||||||
gl_format = GL_BGR;
|
gl_format = GL_BGR;
|
||||||
gl_type = GL_UNSIGNED_BYTE;
|
gl_type = GL_UNSIGNED_BYTE;
|
||||||
bpp = 3;
|
bpp = 3;
|
||||||
@ -283,6 +288,7 @@ gdk_gl_context_upload_texture (GdkGLContext *context,
|
|||||||
stride = width * 4;
|
stride = width * 4;
|
||||||
bpp = 4;
|
bpp = 4;
|
||||||
data = copy;
|
data = copy;
|
||||||
|
gl_internalformat = GL_RGBA8;
|
||||||
gl_format = GL_BGRA;
|
gl_format = GL_BGRA;
|
||||||
gl_type = GL_UNSIGNED_INT_8_8_8_8_REV;
|
gl_type = GL_UNSIGNED_INT_8_8_8_8_REV;
|
||||||
}
|
}
|
||||||
@ -295,7 +301,7 @@ gdk_gl_context_upload_texture (GdkGLContext *context,
|
|||||||
{
|
{
|
||||||
glPixelStorei (GL_UNPACK_ALIGNMENT, 1);
|
glPixelStorei (GL_UNPACK_ALIGNMENT, 1);
|
||||||
|
|
||||||
glTexImage2D (texture_target, 0, GL_RGBA, width, height, 0, gl_format, gl_type, data);
|
glTexImage2D (texture_target, 0, gl_internalformat, width, height, 0, gl_format, gl_type, data);
|
||||||
glPixelStorei (GL_UNPACK_ALIGNMENT, 4);
|
glPixelStorei (GL_UNPACK_ALIGNMENT, 4);
|
||||||
}
|
}
|
||||||
else if ((!priv->use_es ||
|
else if ((!priv->use_es ||
|
||||||
@ -303,14 +309,14 @@ gdk_gl_context_upload_texture (GdkGLContext *context,
|
|||||||
{
|
{
|
||||||
glPixelStorei (GL_UNPACK_ROW_LENGTH, stride / bpp);
|
glPixelStorei (GL_UNPACK_ROW_LENGTH, stride / bpp);
|
||||||
|
|
||||||
glTexImage2D (texture_target, 0, GL_RGBA, width, height, 0, gl_format, gl_type, data);
|
glTexImage2D (texture_target, 0, gl_internalformat, width, height, 0, gl_format, gl_type, data);
|
||||||
|
|
||||||
glPixelStorei (GL_UNPACK_ROW_LENGTH, 0);
|
glPixelStorei (GL_UNPACK_ROW_LENGTH, 0);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
glTexImage2D (texture_target, 0, GL_RGBA, width, height, 0, gl_format, gl_type, NULL);
|
glTexImage2D (texture_target, 0, gl_internalformat, width, height, 0, gl_format, gl_type, NULL);
|
||||||
for (i = 0; i < height; i++)
|
for (i = 0; i < height; i++)
|
||||||
glTexSubImage2D (texture_target, 0, 0, i, width, 1, gl_format, gl_type, data + (i * stride));
|
glTexSubImage2D (texture_target, 0, 0, i, width, 1, gl_format, gl_type, data + (i * stride));
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user