diff options
| author | Timm Bäder <mail@baedert.org> | 2020-12-29 16:58:55 +0000 |
|---|---|---|
| committer | Timm Bäder <mail@baedert.org> | 2020-12-29 16:58:55 +0000 |
| commit | 6c09832b9bec4c816b90b81e584b4627f75d6e09 (patch) | |
| tree | 261c87ea9290206e9ecb112e19f410531727e0f1 | |
| parent | 1758f88492a1d46693931edc67f53d6fa6c1c46b (diff) | |
| parent | 34ffdc6e3f5f1548ac2ded575cdd0e391cf9b66a (diff) | |
| download | gtk+-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.c | 2 | ||||
| -rw-r--r-- | gdk/gdkgl.c | 3 | ||||
| -rw-r--r-- | gsk/gl/gskglshaderbuilder.c | 7 | ||||
| -rw-r--r-- | tests/gtkgears.c | 2 |
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); |
