void uterm_drm3d_deinit_shaders(struct uterm_video *video) { struct uterm_drm3d_video *v3d = uterm_drm_video_get_data(video); if (v3d->sinit == 0) return; v3d->sinit = 0; gl_tex_free(&v3d->tex, 1); gl_shader_unref(v3d->blit_shader); gl_shader_unref(v3d->blend_shader); gl_shader_unref(v3d->fill_shader); }
static void gltex_unset(struct kmscon_text *txt) { struct gltex *gt = txt->data; int ret; struct shl_dlist *iter; struct atlas *atlas; bool gl = true; ret = uterm_display_use(txt->disp, NULL); if (ret) { gl = false; log_warning("cannot activate OpenGL-CTX during destruction"); } shl_hashtable_free(gt->bold_glyphs); shl_hashtable_free(gt->glyphs); while (!shl_dlist_empty(>->atlases)) { iter = gt->atlases.next; shl_dlist_unlink(iter); atlas = shl_dlist_entry(iter, struct atlas, list); free(atlas->cache_pos); free(atlas->cache_texpos); free(atlas->cache_fgcol); free(atlas->cache_bgcol); if (gl) gl_tex_free(&atlas->tex, 1); free(atlas); } if (gl) { gl_shader_unref(gt->shader); gl_clear_error(); } }