summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTimm Bäder <mail@baedert.org>2020-12-29 16:58:55 +0000
committerTimm Bäder <mail@baedert.org>2020-12-29 16:58:55 +0000
commit6c09832b9bec4c816b90b81e584b4627f75d6e09 (patch)
tree261c87ea9290206e9ecb112e19f410531727e0f1
parent1758f88492a1d46693931edc67f53d6fa6c1c46b (diff)
parent34ffdc6e3f5f1548ac2ded575cdd0e391cf9b66a (diff)
downloadgtk+-6c09832b9bec4c816b90b81e584b4627f75d6e09.tar.gz
Merge branch 'xndcn/fix-shader' into 'master'
gl: Fix implicit leaking of shader object See merge request GNOME/gtk!3013
-rw-r--r--demos/gtk-demo/gtkgears.c2
-rw-r--r--gdk/gdkgl.c3
-rw-r--r--gsk/gl/gskglshaderbuilder.c7
-rw-r--r--tests/gtkgears.c2
4 files changed, 9 insertions, 5 deletions
diff --git a/demos/gtk-demo/gtkgears.c b/demos/gtk-demo/gtkgears.c
index ba52ddd1b0..1463cbb6b5 100644
--- a/demos/gtk-demo/gtkgears.c
+++ b/demos/gtk-demo/gtkgears.c
@@ -787,6 +787,8 @@ gtk_gears_realize (GtkWidget *widget)
glLinkProgram(program);
glGetProgramInfoLog(program, sizeof msg, NULL, msg);
g_debug ("program info: %s\n", msg);
+ glDetachShader (program, v);
+ glDetachShader (program, f);
glDeleteShader (v);
glDeleteShader (f);
diff --git a/gdk/gdkgl.c b/gdk/gdkgl.c
index 56dce18333..5ebd2138d8 100644
--- a/gdk/gdkgl.c
+++ b/gdk/gdkgl.c
@@ -107,6 +107,9 @@ make_program (GdkGLContextProgram *program,
glLinkProgram (program->program);
+ glDetachShader (program->program, vertex_shader);
+ glDetachShader (program->program, fragment_shader);
+
glDeleteShader (vertex_shader);
glDeleteShader (fragment_shader);
diff --git a/gsk/gl/gskglshaderbuilder.c b/gsk/gl/gskglshaderbuilder.c
index 1a4ddc301b..75aef60e7d 100644
--- a/gsk/gl/gskglshaderbuilder.c
+++ b/gsk/gl/gskglshaderbuilder.c
@@ -232,6 +232,8 @@ gsk_gl_shader_builder_create_program (GskGLShaderBuilder *self,
glBindAttribLocation (program_id, 0, "aPosition");
glBindAttribLocation (program_id, 1, "vUv");
glLinkProgram (program_id);
+ glDetachShader (program_id, vertex_id);
+ glDetachShader (program_id, fragment_id);
glGetProgramiv (program_id, GL_LINK_STATUS, &status);
if (status == GL_FALSE)
@@ -252,14 +254,9 @@ gsk_gl_shader_builder_create_program (GskGLShaderBuilder *self,
glDeleteProgram (program_id);
program_id = -1;
-
- goto out;
}
- glDetachShader (program_id, vertex_id);
glDeleteShader (vertex_id);
-
- glDetachShader (program_id, fragment_id);
glDeleteShader (fragment_id);
out:
diff --git a/tests/gtkgears.c b/tests/gtkgears.c
index 5f5686c883..2ece67dcf9 100644
--- a/tests/gtkgears.c
+++ b/tests/gtkgears.c
@@ -787,6 +787,8 @@ gtk_gears_realize (GtkWidget *widget)
glLinkProgram(program);
glGetProgramInfoLog(program, sizeof msg, NULL, msg);
g_print ("program info: %s\n", msg);
+ glDetachShader (program, v);
+ glDetachShader (program, f);
glDeleteShader (v);
glDeleteShader (f);