gl-renderer: Assume default GL texture unit
Revert active unit to default value right after use so that other functions can assume the default state. A best practices section is added to the internal header for reference. Signed-off-by: Loïc Molinari <loic.molinari@collabora.com>
This commit is contained in:
parent
b755345a46
commit
fb4cccc290
|
@ -26,6 +26,15 @@
|
||||||
* SOFTWARE.
|
* SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* GL renderer best practices:
|
||||||
|
*
|
||||||
|
* 1. Texture units
|
||||||
|
* 1. Fixed allocation using the gl_tex_unit enumeration.
|
||||||
|
* 2. Any functions changing the active unit must restore it to 0 before
|
||||||
|
* return so that other functions can assume a default value.
|
||||||
|
*/
|
||||||
|
|
||||||
#ifndef GL_RENDERER_INTERNAL_H
|
#ifndef GL_RENDERER_INTERNAL_H
|
||||||
#define GL_RENDERER_INTERNAL_H
|
#define GL_RENDERER_INTERNAL_H
|
||||||
|
|
||||||
|
|
|
@ -574,7 +574,6 @@ gl_fbo_texture_init(struct gl_fbo_texture *fbotex,
|
||||||
GLuint shadow_fbo;
|
GLuint shadow_fbo;
|
||||||
GLuint shadow_tex;
|
GLuint shadow_tex;
|
||||||
|
|
||||||
glActiveTexture(GL_TEXTURE0);
|
|
||||||
glGenTextures(1, &shadow_tex);
|
glGenTextures(1, &shadow_tex);
|
||||||
glBindTexture(GL_TEXTURE_2D, shadow_tex);
|
glBindTexture(GL_TEXTURE_2D, shadow_tex);
|
||||||
glTexImage2D(GL_TEXTURE_2D, 0, internal_format, width, height, 0,
|
glTexImage2D(GL_TEXTURE_2D, 0, internal_format, width, height, 0,
|
||||||
|
@ -1834,6 +1833,8 @@ update_wireframe_tex(struct gl_renderer *gr,
|
||||||
glTexImage2D(GL_TEXTURE_2D, i, GL_LUMINANCE, new_size, 1, 0,
|
glTexImage2D(GL_TEXTURE_2D, i, GL_LUMINANCE, new_size, 1, 0,
|
||||||
GL_LUMINANCE, GL_UNSIGNED_BYTE, buffer);
|
GL_LUMINANCE, GL_UNSIGNED_BYTE, buffer);
|
||||||
free(buffer);
|
free(buffer);
|
||||||
|
|
||||||
|
glActiveTexture(GL_TEXTURE0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -1986,7 +1987,6 @@ draw_output_borders(struct weston_output *output,
|
||||||
weston_matrix_scale(&sconf.projection,
|
weston_matrix_scale(&sconf.projection,
|
||||||
2.0 / fb->width, go->y_flip * 2.0 / fb->height, 1);
|
2.0 / fb->width, go->y_flip * 2.0 / fb->height, 1);
|
||||||
|
|
||||||
glActiveTexture(GL_TEXTURE0);
|
|
||||||
glEnableVertexAttribArray(SHADER_ATTRIB_LOC_POSITION);
|
glEnableVertexAttribArray(SHADER_ATTRIB_LOC_POSITION);
|
||||||
glEnableVertexAttribArray(SHADER_ATTRIB_LOC_TEXCOORD);
|
glEnableVertexAttribArray(SHADER_ATTRIB_LOC_TEXCOORD);
|
||||||
|
|
||||||
|
@ -2547,8 +2547,6 @@ gl_renderer_flush_damage(struct weston_paint_node *pnode)
|
||||||
|
|
||||||
data = wl_shm_buffer_get_data(buffer->shm_buffer);
|
data = wl_shm_buffer_get_data(buffer->shm_buffer);
|
||||||
|
|
||||||
glActiveTexture(GL_TEXTURE0);
|
|
||||||
|
|
||||||
if (gb->needs_full_upload || quirks->gl_force_full_upload) {
|
if (gb->needs_full_upload || quirks->gl_force_full_upload) {
|
||||||
wl_shm_buffer_begin_access(buffer->shm_buffer);
|
wl_shm_buffer_begin_access(buffer->shm_buffer);
|
||||||
|
|
||||||
|
@ -2650,8 +2648,6 @@ ensure_textures(struct gl_buffer_state *gb, GLenum target, int num_textures)
|
||||||
|
|
||||||
assert(gb->num_textures == 0);
|
assert(gb->num_textures == 0);
|
||||||
|
|
||||||
glActiveTexture(GL_TEXTURE0);
|
|
||||||
|
|
||||||
for (i = 0; i < num_textures; i++) {
|
for (i = 0; i < num_textures; i++) {
|
||||||
glGenTextures(1, &gb->textures[i]);
|
glGenTextures(1, &gb->textures[i]);
|
||||||
glBindTexture(target, gb->textures[i]);
|
glBindTexture(target, gb->textures[i]);
|
||||||
|
@ -3458,6 +3454,7 @@ gl_renderer_attach_buffer(struct weston_surface *surface,
|
||||||
glBindTexture(target, gb->textures[i]);
|
glBindTexture(target, gb->textures[i]);
|
||||||
gr->image_target_texture_2d(target, gb->images[i]);
|
gr->image_target_texture_2d(target, gb->images[i]);
|
||||||
}
|
}
|
||||||
|
glActiveTexture(GL_TEXTURE0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct weston_drm_format_array *
|
static const struct weston_drm_format_array *
|
||||||
|
@ -3710,7 +3707,6 @@ gl_renderer_surface_copy_content(struct weston_surface *surface,
|
||||||
|
|
||||||
gl_shader_config_set_input_textures(&sconf, gs);
|
gl_shader_config_set_input_textures(&sconf, gs);
|
||||||
|
|
||||||
glActiveTexture(GL_TEXTURE0);
|
|
||||||
glGenTextures(1, &tex);
|
glGenTextures(1, &tex);
|
||||||
glBindTexture(GL_TEXTURE_2D, tex);
|
glBindTexture(GL_TEXTURE_2D, tex);
|
||||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, cw, ch,
|
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, cw, ch,
|
||||||
|
|
|
@ -201,7 +201,6 @@ gl_color_curve_lut_3x1d(struct gl_renderer *gr,
|
||||||
|
|
||||||
curve->u.lut_3x1d.fill_in(xform, lut, lut_len);
|
curve->u.lut_3x1d.fill_in(xform, lut, lut_len);
|
||||||
|
|
||||||
glActiveTexture(GL_TEXTURE0);
|
|
||||||
glGenTextures(1, &tex);
|
glGenTextures(1, &tex);
|
||||||
glBindTexture(GL_TEXTURE_2D, tex);
|
glBindTexture(GL_TEXTURE_2D, tex);
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||||
|
@ -238,7 +237,6 @@ gl_3d_lut(struct gl_renderer *gr,
|
||||||
|
|
||||||
xform->mapping.u.lut3d.fill_in(xform, lut, dim_size);
|
xform->mapping.u.lut3d.fill_in(xform, lut, dim_size);
|
||||||
|
|
||||||
glActiveTexture(GL_TEXTURE0);
|
|
||||||
glGenTextures(1, &tex3d);
|
glGenTextures(1, &tex3d);
|
||||||
glBindTexture(GL_TEXTURE_3D, tex3d);
|
glBindTexture(GL_TEXTURE_3D, tex3d);
|
||||||
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||||
|
|
|
@ -767,6 +767,8 @@ gl_shader_load_config(struct gl_shader *shader,
|
||||||
|
|
||||||
if (sconf->req.wireframe)
|
if (sconf->req.wireframe)
|
||||||
glUniform1i(shader->tex_uniform_wireframe, TEX_UNIT_WIREFRAME);
|
glUniform1i(shader->tex_uniform_wireframe, TEX_UNIT_WIREFRAME);
|
||||||
|
|
||||||
|
glActiveTexture(GL_TEXTURE0);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
|
|
Loading…
Reference in New Issue