mirror of
https://gitlab.freedesktop.org/wayland/weston
synced 2024-09-29 05:18:47 +00:00
gl-renderer: Define attrib array locations in an enum
This makes the code slightly easier to read and prevents using incorrect locations now that shader permutations can provide different vertex streams. Signed-off-by: Loïc Molinari <loic.molinari@collabora.com>
This commit is contained in:
parent
26a69cb2f2
commit
06436d8adc
|
@ -72,6 +72,12 @@ enum gl_shader_color_mapping {
|
|||
SHADER_COLOR_MAPPING_MATRIX,
|
||||
};
|
||||
|
||||
enum gl_shader_attrib_loc {
|
||||
SHADER_ATTRIB_LOC_POSITION = 0,
|
||||
SHADER_ATTRIB_LOC_TEXCOORD,
|
||||
SHADER_ATTRIB_LOC_COLOR,
|
||||
};
|
||||
|
||||
/** GL shader requirements key
|
||||
*
|
||||
* This structure is used as a binary blob key for building and searching
|
||||
|
|
|
@ -1450,10 +1450,11 @@ draw_mesh(struct gl_renderer *gr,
|
|||
if (!gl_renderer_use_program(gr, &alt))
|
||||
return;
|
||||
|
||||
glEnableVertexAttribArray(2);
|
||||
glVertexAttribPointer(2, 4, GL_UNSIGNED_BYTE, GL_FALSE, 0, colors);
|
||||
glEnableVertexAttribArray(SHADER_ATTRIB_LOC_COLOR);
|
||||
glVertexAttribPointer(SHADER_ATTRIB_LOC_COLOR, 4, GL_UNSIGNED_BYTE,
|
||||
GL_FALSE, 0, colors);
|
||||
glDrawElements(GL_LINES, nlines, GL_UNSIGNED_SHORT, lines);
|
||||
glDisableVertexAttribArray(2);
|
||||
glDisableVertexAttribArray(SHADER_ATTRIB_LOC_COLOR);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -1652,7 +1653,7 @@ repaint_views(struct weston_output *output, pixman_region32_t *damage)
|
|||
struct weston_paint_node *pnode;
|
||||
|
||||
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
|
||||
glEnableVertexAttribArray(0);
|
||||
glEnableVertexAttribArray(SHADER_ATTRIB_LOC_POSITION);
|
||||
|
||||
wl_list_for_each_reverse(pnode, &output->paint_node_z_order_list,
|
||||
z_order_link) {
|
||||
|
@ -1660,7 +1661,7 @@ repaint_views(struct weston_output *output, pixman_region32_t *damage)
|
|||
draw_paint_node(pnode, damage);
|
||||
}
|
||||
|
||||
glDisableVertexAttribArray(0);
|
||||
glDisableVertexAttribArray(SHADER_ATTRIB_LOC_POSITION);
|
||||
}
|
||||
|
||||
static int
|
||||
|
@ -1784,15 +1785,17 @@ draw_output_border_texture(struct gl_renderer *gr,
|
|||
0.0f, 1.0f,
|
||||
};
|
||||
|
||||
GLfloat verts[] = {
|
||||
GLfloat position[] = {
|
||||
x, y,
|
||||
x + width, y,
|
||||
x + width, y + height,
|
||||
x, y + height
|
||||
};
|
||||
|
||||
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, verts);
|
||||
glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 0, texcoord);
|
||||
glVertexAttribPointer(SHADER_ATTRIB_LOC_POSITION, 2, GL_FLOAT, GL_FALSE,
|
||||
0, position);
|
||||
glVertexAttribPointer(SHADER_ATTRIB_LOC_TEXCOORD, 2, GL_FLOAT, GL_FALSE,
|
||||
0, texcoord);
|
||||
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, indices);
|
||||
}
|
||||
|
||||
|
@ -1885,8 +1888,8 @@ draw_output_borders(struct weston_output *output,
|
|||
2.0 / fb->width, -2.0 / fb->height, 1);
|
||||
|
||||
glActiveTexture(GL_TEXTURE0);
|
||||
glEnableVertexAttribArray(0);
|
||||
glEnableVertexAttribArray(1);
|
||||
glEnableVertexAttribArray(SHADER_ATTRIB_LOC_POSITION);
|
||||
glEnableVertexAttribArray(SHADER_ATTRIB_LOC_TEXCOORD);
|
||||
|
||||
for (side = 0; side < 4; side++) {
|
||||
struct weston_geometry g;
|
||||
|
@ -1899,8 +1902,8 @@ draw_output_borders(struct weston_output *output,
|
|||
g.x, g.y, g.width, g.height);
|
||||
}
|
||||
|
||||
glDisableVertexAttribArray(1);
|
||||
glDisableVertexAttribArray(0);
|
||||
glDisableVertexAttribArray(SHADER_ATTRIB_LOC_TEXCOORD);
|
||||
glDisableVertexAttribArray(SHADER_ATTRIB_LOC_POSITION);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -2102,8 +2105,8 @@ blit_shadow_to_output(struct weston_output *output,
|
|||
weston_region_global_to_output(&translated_damage, output,
|
||||
&translated_damage);
|
||||
|
||||
glEnableVertexAttribArray(0);
|
||||
glEnableVertexAttribArray(1);
|
||||
glEnableVertexAttribArray(SHADER_ATTRIB_LOC_POSITION);
|
||||
glEnableVertexAttribArray(SHADER_ATTRIB_LOC_TEXCOORD);
|
||||
|
||||
rects = pixman_region32_rectangles(&translated_damage, &n_rects);
|
||||
for (i = 0; i < n_rects; i++) {
|
||||
|
@ -2118,16 +2121,15 @@ blit_shadow_to_output(struct weston_output *output,
|
|||
verts[6] = rects[i].x1 / width;
|
||||
verts[7] = (height - rects[i].y2) / height;
|
||||
|
||||
/* position: */
|
||||
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, verts);
|
||||
/* texcoord: */
|
||||
glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 0, verts);
|
||||
|
||||
glVertexAttribPointer(SHADER_ATTRIB_LOC_POSITION, 2, GL_FLOAT,
|
||||
GL_FALSE, 0, verts);
|
||||
glVertexAttribPointer(SHADER_ATTRIB_LOC_TEXCOORD, 2, GL_FLOAT,
|
||||
GL_FALSE, 0, verts);
|
||||
glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
|
||||
}
|
||||
|
||||
glDisableVertexAttribArray(1);
|
||||
glDisableVertexAttribArray(0);
|
||||
glDisableVertexAttribArray(SHADER_ATTRIB_LOC_TEXCOORD);
|
||||
glDisableVertexAttribArray(SHADER_ATTRIB_LOC_POSITION);
|
||||
|
||||
glBindTexture(GL_TEXTURE_2D, 0);
|
||||
pixman_region32_fini(&translated_damage);
|
||||
|
@ -3663,18 +3665,15 @@ gl_renderer_surface_copy_content(struct weston_surface *surface,
|
|||
if (!gl_renderer_use_program(gr, &sconf))
|
||||
goto out;
|
||||
|
||||
/* position: */
|
||||
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, verts);
|
||||
glEnableVertexAttribArray(0);
|
||||
|
||||
/* texcoord: */
|
||||
glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 0, verts);
|
||||
glEnableVertexAttribArray(1);
|
||||
|
||||
glEnableVertexAttribArray(SHADER_ATTRIB_LOC_POSITION);
|
||||
glEnableVertexAttribArray(SHADER_ATTRIB_LOC_TEXCOORD);
|
||||
glVertexAttribPointer(SHADER_ATTRIB_LOC_POSITION, 2, GL_FLOAT, GL_FALSE,
|
||||
0, verts);
|
||||
glVertexAttribPointer(SHADER_ATTRIB_LOC_TEXCOORD, 2, GL_FLOAT, GL_FALSE,
|
||||
0, verts);
|
||||
glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
|
||||
|
||||
glDisableVertexAttribArray(1);
|
||||
glDisableVertexAttribArray(0);
|
||||
glDisableVertexAttribArray(SHADER_ATTRIB_LOC_TEXCOORD);
|
||||
glDisableVertexAttribArray(SHADER_ATTRIB_LOC_POSITION);
|
||||
|
||||
if (gr->has_pack_reverse)
|
||||
glPixelStorei(GL_PACK_REVERSE_ROW_ORDER_ANGLE, GL_FALSE);
|
||||
|
|
|
@ -330,11 +330,15 @@ gl_shader_create(struct gl_renderer *gr,
|
|||
shader->program = glCreateProgram();
|
||||
glAttachShader(shader->program, shader->vertex_shader);
|
||||
glAttachShader(shader->program, shader->fragment_shader);
|
||||
glBindAttribLocation(shader->program, 0, "position");
|
||||
|
||||
glBindAttribLocation(shader->program, SHADER_ATTRIB_LOC_POSITION,
|
||||
"position");
|
||||
if (requirements->texcoord_input == SHADER_TEXCOORD_INPUT_ATTRIB)
|
||||
glBindAttribLocation(shader->program, 1, "texcoord");
|
||||
glBindAttribLocation(shader->program,
|
||||
SHADER_ATTRIB_LOC_TEXCOORD, "texcoord");
|
||||
if (requirements->wireframe)
|
||||
glBindAttribLocation(shader->program, 2, "color");
|
||||
glBindAttribLocation(shader->program, SHADER_ATTRIB_LOC_COLOR,
|
||||
"color");
|
||||
|
||||
glLinkProgram(shader->program);
|
||||
glGetProgramiv(shader->program, GL_LINK_STATUS, &status);
|
||||
|
|
Loading…
Reference in a new issue