mirror of
https://gitlab.freedesktop.org/wlroots/wlroots.git
synced 2024-11-25 16:42:26 +00:00
render: drop support for ellipses
For anything more complicated than quads, compositors can easily ship their own shaders. Closes: https://github.com/swaywm/wlroots/issues/2759
This commit is contained in:
parent
9ecfa4343a
commit
a109a80dca
@ -61,13 +61,6 @@ struct wlr_gles2_renderer {
|
|||||||
GLint color;
|
GLint color;
|
||||||
GLint pos_attrib;
|
GLint pos_attrib;
|
||||||
} quad;
|
} quad;
|
||||||
struct {
|
|
||||||
GLuint program;
|
|
||||||
GLint proj;
|
|
||||||
GLint color;
|
|
||||||
GLint pos_attrib;
|
|
||||||
GLint tex_attrib;
|
|
||||||
} ellipse;
|
|
||||||
struct wlr_gles2_tex_shader tex_rgba;
|
struct wlr_gles2_tex_shader tex_rgba;
|
||||||
struct wlr_gles2_tex_shader tex_rgbx;
|
struct wlr_gles2_tex_shader tex_rgbx;
|
||||||
struct wlr_gles2_tex_shader tex_ext;
|
struct wlr_gles2_tex_shader tex_ext;
|
||||||
|
@ -30,8 +30,6 @@ struct wlr_renderer_impl {
|
|||||||
const float matrix[static 9], float alpha);
|
const float matrix[static 9], float alpha);
|
||||||
void (*render_quad_with_matrix)(struct wlr_renderer *renderer,
|
void (*render_quad_with_matrix)(struct wlr_renderer *renderer,
|
||||||
const float color[static 4], const float matrix[static 9]);
|
const float color[static 4], const float matrix[static 9]);
|
||||||
void (*render_ellipse_with_matrix)(struct wlr_renderer *renderer,
|
|
||||||
const float color[static 4], const float matrix[static 9]);
|
|
||||||
const uint32_t *(*get_shm_texture_formats)(struct wlr_renderer *renderer,
|
const uint32_t *(*get_shm_texture_formats)(struct wlr_renderer *renderer,
|
||||||
size_t *len);
|
size_t *len);
|
||||||
bool (*resource_is_wl_drm_buffer)(struct wlr_renderer *renderer,
|
bool (*resource_is_wl_drm_buffer)(struct wlr_renderer *renderer,
|
||||||
|
@ -71,16 +71,6 @@ void wlr_render_rect(struct wlr_renderer *r, const struct wlr_box *box,
|
|||||||
*/
|
*/
|
||||||
void wlr_render_quad_with_matrix(struct wlr_renderer *r,
|
void wlr_render_quad_with_matrix(struct wlr_renderer *r,
|
||||||
const float color[static 4], const float matrix[static 9]);
|
const float color[static 4], const float matrix[static 9]);
|
||||||
/**
|
|
||||||
* Renders a solid ellipse in the specified color.
|
|
||||||
*/
|
|
||||||
void wlr_render_ellipse(struct wlr_renderer *r, const struct wlr_box *box,
|
|
||||||
const float color[static 4], const float projection[static 9]);
|
|
||||||
/**
|
|
||||||
* Renders a solid ellipse in the specified color with the specified matrix.
|
|
||||||
*/
|
|
||||||
void wlr_render_ellipse_with_matrix(struct wlr_renderer *r,
|
|
||||||
const float color[static 4], const float matrix[static 9]);
|
|
||||||
/**
|
/**
|
||||||
* Get the shared-memory formats supporting import usage. Buffers allocated
|
* Get the shared-memory formats supporting import usage. Buffers allocated
|
||||||
* with a format from this list may be imported via wlr_texture_from_pixels.
|
* with a format from this list may be imported via wlr_texture_from_pixels.
|
||||||
|
@ -356,47 +356,6 @@ static void gles2_render_quad_with_matrix(struct wlr_renderer *wlr_renderer,
|
|||||||
pop_gles2_debug(renderer);
|
pop_gles2_debug(renderer);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void gles2_render_ellipse_with_matrix(struct wlr_renderer *wlr_renderer,
|
|
||||||
const float color[static 4], const float matrix[static 9]) {
|
|
||||||
struct wlr_gles2_renderer *renderer =
|
|
||||||
gles2_get_renderer_in_context(wlr_renderer);
|
|
||||||
|
|
||||||
float gl_matrix[9];
|
|
||||||
wlr_matrix_multiply(gl_matrix, renderer->projection, matrix);
|
|
||||||
wlr_matrix_multiply(gl_matrix, flip_180, gl_matrix);
|
|
||||||
|
|
||||||
// OpenGL ES 2 requires the glUniformMatrix3fv transpose parameter to be set
|
|
||||||
// to GL_FALSE
|
|
||||||
wlr_matrix_transpose(gl_matrix, gl_matrix);
|
|
||||||
|
|
||||||
static const GLfloat texcoord[] = {
|
|
||||||
1, 0, // top right
|
|
||||||
0, 0, // top left
|
|
||||||
1, 1, // bottom right
|
|
||||||
0, 1, // bottom left
|
|
||||||
};
|
|
||||||
|
|
||||||
push_gles2_debug(renderer);
|
|
||||||
glUseProgram(renderer->shaders.ellipse.program);
|
|
||||||
|
|
||||||
glUniformMatrix3fv(renderer->shaders.ellipse.proj, 1, GL_FALSE, gl_matrix);
|
|
||||||
glUniform4f(renderer->shaders.ellipse.color, color[0], color[1], color[2], color[3]);
|
|
||||||
|
|
||||||
glVertexAttribPointer(renderer->shaders.ellipse.pos_attrib, 2, GL_FLOAT,
|
|
||||||
GL_FALSE, 0, verts);
|
|
||||||
glVertexAttribPointer(renderer->shaders.ellipse.tex_attrib, 2, GL_FLOAT,
|
|
||||||
GL_FALSE, 0, texcoord);
|
|
||||||
|
|
||||||
glEnableVertexAttribArray(renderer->shaders.ellipse.pos_attrib);
|
|
||||||
glEnableVertexAttribArray(renderer->shaders.ellipse.tex_attrib);
|
|
||||||
|
|
||||||
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
|
|
||||||
|
|
||||||
glDisableVertexAttribArray(renderer->shaders.ellipse.pos_attrib);
|
|
||||||
glDisableVertexAttribArray(renderer->shaders.ellipse.tex_attrib);
|
|
||||||
pop_gles2_debug(renderer);
|
|
||||||
}
|
|
||||||
|
|
||||||
static const uint32_t *gles2_get_shm_texture_formats(
|
static const uint32_t *gles2_get_shm_texture_formats(
|
||||||
struct wlr_renderer *wlr_renderer, size_t *len) {
|
struct wlr_renderer *wlr_renderer, size_t *len) {
|
||||||
return get_gles2_shm_formats(len);
|
return get_gles2_shm_formats(len);
|
||||||
@ -584,7 +543,6 @@ static void gles2_destroy(struct wlr_renderer *wlr_renderer) {
|
|||||||
|
|
||||||
push_gles2_debug(renderer);
|
push_gles2_debug(renderer);
|
||||||
glDeleteProgram(renderer->shaders.quad.program);
|
glDeleteProgram(renderer->shaders.quad.program);
|
||||||
glDeleteProgram(renderer->shaders.ellipse.program);
|
|
||||||
glDeleteProgram(renderer->shaders.tex_rgba.program);
|
glDeleteProgram(renderer->shaders.tex_rgba.program);
|
||||||
glDeleteProgram(renderer->shaders.tex_rgbx.program);
|
glDeleteProgram(renderer->shaders.tex_rgbx.program);
|
||||||
glDeleteProgram(renderer->shaders.tex_ext.program);
|
glDeleteProgram(renderer->shaders.tex_ext.program);
|
||||||
@ -614,7 +572,6 @@ static const struct wlr_renderer_impl renderer_impl = {
|
|||||||
.scissor = gles2_scissor,
|
.scissor = gles2_scissor,
|
||||||
.render_subtexture_with_matrix = gles2_render_subtexture_with_matrix,
|
.render_subtexture_with_matrix = gles2_render_subtexture_with_matrix,
|
||||||
.render_quad_with_matrix = gles2_render_quad_with_matrix,
|
.render_quad_with_matrix = gles2_render_quad_with_matrix,
|
||||||
.render_ellipse_with_matrix = gles2_render_ellipse_with_matrix,
|
|
||||||
.get_shm_texture_formats = gles2_get_shm_texture_formats,
|
.get_shm_texture_formats = gles2_get_shm_texture_formats,
|
||||||
.resource_is_wl_drm_buffer = gles2_resource_is_wl_drm_buffer,
|
.resource_is_wl_drm_buffer = gles2_resource_is_wl_drm_buffer,
|
||||||
.wl_drm_buffer_get_size = gles2_wl_drm_buffer_get_size,
|
.wl_drm_buffer_get_size = gles2_wl_drm_buffer_get_size,
|
||||||
@ -755,7 +712,6 @@ static void load_gl_proc(void *proc_ptr, const char *name) {
|
|||||||
|
|
||||||
extern const GLchar quad_vertex_src[];
|
extern const GLchar quad_vertex_src[];
|
||||||
extern const GLchar quad_fragment_src[];
|
extern const GLchar quad_fragment_src[];
|
||||||
extern const GLchar ellipse_fragment_src[];
|
|
||||||
extern const GLchar tex_vertex_src[];
|
extern const GLchar tex_vertex_src[];
|
||||||
extern const GLchar tex_fragment_src_rgba[];
|
extern const GLchar tex_fragment_src_rgba[];
|
||||||
extern const GLchar tex_fragment_src_rgbx[];
|
extern const GLchar tex_fragment_src_rgbx[];
|
||||||
@ -848,16 +804,6 @@ struct wlr_renderer *wlr_gles2_renderer_create(struct wlr_egl *egl) {
|
|||||||
renderer->shaders.quad.color = glGetUniformLocation(prog, "color");
|
renderer->shaders.quad.color = glGetUniformLocation(prog, "color");
|
||||||
renderer->shaders.quad.pos_attrib = glGetAttribLocation(prog, "pos");
|
renderer->shaders.quad.pos_attrib = glGetAttribLocation(prog, "pos");
|
||||||
|
|
||||||
renderer->shaders.ellipse.program = prog =
|
|
||||||
link_program(renderer, quad_vertex_src, ellipse_fragment_src);
|
|
||||||
if (!renderer->shaders.ellipse.program) {
|
|
||||||
goto error;
|
|
||||||
}
|
|
||||||
renderer->shaders.ellipse.proj = glGetUniformLocation(prog, "proj");
|
|
||||||
renderer->shaders.ellipse.color = glGetUniformLocation(prog, "color");
|
|
||||||
renderer->shaders.ellipse.pos_attrib = glGetAttribLocation(prog, "pos");
|
|
||||||
renderer->shaders.ellipse.tex_attrib = glGetAttribLocation(prog, "texcoord");
|
|
||||||
|
|
||||||
renderer->shaders.tex_rgba.program = prog =
|
renderer->shaders.tex_rgba.program = prog =
|
||||||
link_program(renderer, tex_vertex_src, tex_fragment_src_rgba);
|
link_program(renderer, tex_vertex_src, tex_fragment_src_rgba);
|
||||||
if (!renderer->shaders.tex_rgba.program) {
|
if (!renderer->shaders.tex_rgba.program) {
|
||||||
@ -904,7 +850,6 @@ struct wlr_renderer *wlr_gles2_renderer_create(struct wlr_egl *egl) {
|
|||||||
|
|
||||||
error:
|
error:
|
||||||
glDeleteProgram(renderer->shaders.quad.program);
|
glDeleteProgram(renderer->shaders.quad.program);
|
||||||
glDeleteProgram(renderer->shaders.ellipse.program);
|
|
||||||
glDeleteProgram(renderer->shaders.tex_rgba.program);
|
glDeleteProgram(renderer->shaders.tex_rgba.program);
|
||||||
glDeleteProgram(renderer->shaders.tex_rgbx.program);
|
glDeleteProgram(renderer->shaders.tex_rgbx.program);
|
||||||
glDeleteProgram(renderer->shaders.tex_ext.program);
|
glDeleteProgram(renderer->shaders.tex_ext.program);
|
||||||
|
@ -25,20 +25,6 @@ const GLchar quad_fragment_src[] =
|
|||||||
" gl_FragColor = v_color;\n"
|
" gl_FragColor = v_color;\n"
|
||||||
"}\n";
|
"}\n";
|
||||||
|
|
||||||
// Colored ellipses
|
|
||||||
const GLchar ellipse_fragment_src[] =
|
|
||||||
"precision mediump float;\n"
|
|
||||||
"varying vec4 v_color;\n"
|
|
||||||
"varying vec2 v_texcoord;\n"
|
|
||||||
"\n"
|
|
||||||
"void main() {\n"
|
|
||||||
" float l = length(v_texcoord - vec2(0.5, 0.5));\n"
|
|
||||||
" if (l > 0.5) {\n"
|
|
||||||
" discard;\n"
|
|
||||||
" }\n"
|
|
||||||
" gl_FragColor = v_color;\n"
|
|
||||||
"}\n";
|
|
||||||
|
|
||||||
// Textured quads
|
// Textured quads
|
||||||
const GLchar tex_vertex_src[] =
|
const GLchar tex_vertex_src[] =
|
||||||
"uniform mat3 proj;\n"
|
"uniform mat3 proj;\n"
|
||||||
|
@ -20,7 +20,6 @@ void wlr_renderer_init(struct wlr_renderer *renderer,
|
|||||||
assert(impl->scissor);
|
assert(impl->scissor);
|
||||||
assert(impl->render_subtexture_with_matrix);
|
assert(impl->render_subtexture_with_matrix);
|
||||||
assert(impl->render_quad_with_matrix);
|
assert(impl->render_quad_with_matrix);
|
||||||
assert(impl->render_ellipse_with_matrix);
|
|
||||||
assert(impl->get_shm_texture_formats);
|
assert(impl->get_shm_texture_formats);
|
||||||
assert(impl->texture_from_pixels);
|
assert(impl->texture_from_pixels);
|
||||||
renderer->impl = impl;
|
renderer->impl = impl;
|
||||||
@ -133,25 +132,6 @@ void wlr_render_quad_with_matrix(struct wlr_renderer *r,
|
|||||||
r->impl->render_quad_with_matrix(r, color, matrix);
|
r->impl->render_quad_with_matrix(r, color, matrix);
|
||||||
}
|
}
|
||||||
|
|
||||||
void wlr_render_ellipse(struct wlr_renderer *r, const struct wlr_box *box,
|
|
||||||
const float color[static 4], const float projection[static 9]) {
|
|
||||||
if (box->width == 0 || box->height == 0) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
assert(box->width > 0 && box->height > 0);
|
|
||||||
float matrix[9];
|
|
||||||
wlr_matrix_project_box(matrix, box, WL_OUTPUT_TRANSFORM_NORMAL, 0,
|
|
||||||
projection);
|
|
||||||
|
|
||||||
wlr_render_ellipse_with_matrix(r, color, matrix);
|
|
||||||
}
|
|
||||||
|
|
||||||
void wlr_render_ellipse_with_matrix(struct wlr_renderer *r,
|
|
||||||
const float color[static 4], const float matrix[static 9]) {
|
|
||||||
assert(r->rendering);
|
|
||||||
r->impl->render_ellipse_with_matrix(r, color, matrix);
|
|
||||||
}
|
|
||||||
|
|
||||||
const uint32_t *wlr_renderer_get_shm_texture_formats(struct wlr_renderer *r,
|
const uint32_t *wlr_renderer_get_shm_texture_formats(struct wlr_renderer *r,
|
||||||
size_t *len) {
|
size_t *len) {
|
||||||
return r->impl->get_shm_texture_formats(r, len);
|
return r->impl->get_shm_texture_formats(r, len);
|
||||||
|
Loading…
Reference in New Issue
Block a user