render/gles2: drop legacy rendering API

master
Simon Ser 1 year ago
parent 0c83c331ca
commit 4635717d82

@ -28,13 +28,6 @@
#include "tex_rgbx_frag_src.h" #include "tex_rgbx_frag_src.h"
#include "tex_external_frag_src.h" #include "tex_external_frag_src.h"
static const GLfloat verts[] = {
1, 0, // top right
0, 0, // top left
1, 1, // bottom right
0, 1, // bottom left
};
static const struct wlr_renderer_impl renderer_impl; static const struct wlr_renderer_impl renderer_impl;
static const struct wlr_render_timer_impl render_timer_impl; static const struct wlr_render_timer_impl render_timer_impl;
@ -258,139 +251,6 @@ static void gles2_end(struct wlr_renderer *wlr_renderer) {
// no-op // no-op
} }
static void gles2_clear(struct wlr_renderer *wlr_renderer,
const float color[static 4]) {
struct wlr_gles2_renderer *renderer =
gles2_get_renderer_in_context(wlr_renderer);
push_gles2_debug(renderer);
glClearColor(color[0], color[1], color[2], color[3]);
glClear(GL_COLOR_BUFFER_BIT);
pop_gles2_debug(renderer);
}
static void gles2_scissor(struct wlr_renderer *wlr_renderer,
struct wlr_box *box) {
struct wlr_gles2_renderer *renderer =
gles2_get_renderer_in_context(wlr_renderer);
push_gles2_debug(renderer);
if (box != NULL) {
glScissor(box->x, box->y, box->width, box->height);
glEnable(GL_SCISSOR_TEST);
} else {
glDisable(GL_SCISSOR_TEST);
}
pop_gles2_debug(renderer);
}
static bool gles2_render_subtexture_with_matrix(
struct wlr_renderer *wlr_renderer, struct wlr_texture *wlr_texture,
const struct wlr_fbox *box, const float matrix[static 9],
float alpha) {
struct wlr_gles2_renderer *renderer =
gles2_get_renderer_in_context(wlr_renderer);
struct wlr_gles2_texture *texture =
gles2_get_texture(wlr_texture);
assert(texture->renderer == renderer);
struct wlr_gles2_tex_shader *shader = NULL;
switch (texture->target) {
case GL_TEXTURE_2D:
if (texture->has_alpha) {
shader = &renderer->shaders.tex_rgba;
} else {
shader = &renderer->shaders.tex_rgbx;
}
break;
case GL_TEXTURE_EXTERNAL_OES:
// EGL_EXT_image_dma_buf_import_modifiers requires
// GL_OES_EGL_image_external
assert(renderer->exts.OES_egl_image_external);
shader = &renderer->shaders.tex_ext;
break;
default:
abort();
}
float gl_matrix[9];
wlr_matrix_multiply(gl_matrix, renderer->projection, matrix);
push_gles2_debug(renderer);
if (!texture->has_alpha && alpha == 1.0) {
glDisable(GL_BLEND);
} else {
glEnable(GL_BLEND);
}
glActiveTexture(GL_TEXTURE0);
glBindTexture(texture->target, texture->tex);
glTexParameteri(texture->target, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glUseProgram(shader->program);
glUniformMatrix3fv(shader->proj, 1, GL_FALSE, gl_matrix);
glUniform1i(shader->tex, 0);
glUniform1f(shader->alpha, alpha);
float tex_matrix[9];
wlr_matrix_identity(tex_matrix);
wlr_matrix_translate(tex_matrix, box->x / texture->wlr_texture.width,
box->y / texture->wlr_texture.height);
wlr_matrix_scale(tex_matrix, box->width / texture->wlr_texture.width,
box->height / texture->wlr_texture.height);
glUniformMatrix3fv(shader->tex_proj, 1, GL_FALSE, tex_matrix);
glVertexAttribPointer(shader->pos_attrib, 2, GL_FLOAT, GL_FALSE, 0, verts);
glEnableVertexAttribArray(shader->pos_attrib);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
glDisableVertexAttribArray(shader->pos_attrib);
glBindTexture(texture->target, 0);
pop_gles2_debug(renderer);
return true;
}
static void gles2_render_quad_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);
push_gles2_debug(renderer);
if (color[3] == 1.0) {
glDisable(GL_BLEND);
} else {
glEnable(GL_BLEND);
}
glUseProgram(renderer->shaders.quad.program);
glUniformMatrix3fv(renderer->shaders.quad.proj, 1, GL_FALSE, gl_matrix);
glUniform4f(renderer->shaders.quad.color, color[0], color[1], color[2], color[3]);
glVertexAttribPointer(renderer->shaders.quad.pos_attrib, 2, GL_FLOAT, GL_FALSE,
0, verts);
glEnableVertexAttribArray(renderer->shaders.quad.pos_attrib);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
glDisableVertexAttribArray(renderer->shaders.quad.pos_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) {
struct wlr_gles2_renderer *renderer = gles2_get_renderer(wlr_renderer); struct wlr_gles2_renderer *renderer = gles2_get_renderer(wlr_renderer);
@ -651,10 +511,6 @@ static const struct wlr_renderer_impl renderer_impl = {
.bind_buffer = gles2_bind_buffer, .bind_buffer = gles2_bind_buffer,
.begin = gles2_begin, .begin = gles2_begin,
.end = gles2_end, .end = gles2_end,
.clear = gles2_clear,
.scissor = gles2_scissor,
.render_subtexture_with_matrix = gles2_render_subtexture_with_matrix,
.render_quad_with_matrix = gles2_render_quad_with_matrix,
.get_shm_texture_formats = gles2_get_shm_texture_formats, .get_shm_texture_formats = gles2_get_shm_texture_formats,
.get_dmabuf_texture_formats = gles2_get_dmabuf_texture_formats, .get_dmabuf_texture_formats = gles2_get_dmabuf_texture_formats,
.get_render_formats = gles2_get_render_formats, .get_render_formats = gles2_get_render_formats,

Loading…
Cancel
Save