diff options
Diffstat (limited to 'render/renderer.c')
-rw-r--r-- | render/renderer.c | 138 |
1 files changed, 0 insertions, 138 deletions
diff --git a/render/renderer.c b/render/renderer.c deleted file mode 100644 index 174272a9..00000000 --- a/render/renderer.c +++ /dev/null @@ -1,138 +0,0 @@ -#include <stdint.h> -#include <stdlib.h> -#include <assert.h> -#include <GLES3/gl3.h> -#include <wayland-util.h> -#include <wayland-server-protocol.h> -#include <wlr/render.h> -#include <wlr/render/matrix.h> -#include <common/log.h> -#include "render.h" - -static struct wlr_shader *default_shader = NULL; - -static const GLchar vert_src[] = -"uniform mat4 proj;\n" -"attribute vec2 pos;\n" -"attribute vec2 texcoord;\n" -"varying vec2 v_texcoord;\n" -"void main() {\n" -" gl_Position = proj * vec4(pos, 0.0, 1.0);\n" -" v_texcoord = texcoord;\n" -"}\n"; - -static const GLchar frag_src_RGB[] = -"precision mediump float;\n" -"varying vec2 v_texcoord;\n" -"uniform sampler2D tex;\n" -"void main() {\n" -" gl_FragColor = vec4(texture2D(tex, v_texcoord).rgb, 1.0);\n" -"}\n"; - -static const GLchar frag_src_RGBA[] = -"precision mediump float;\n" -"varying vec2 v_texcoord;\n" -"uniform sampler2D tex;\n" -"void main() {\n" -" gl_FragColor = texture2D(tex, v_texcoord);\n" -"}\n"; - -static void default_shader_init() { - if (default_shader) { - return; - } - default_shader = wlr_shader_init(vert_src); - if (!default_shader) { - goto error; - } - if (!wlr_shader_add_format(default_shader, GL_RGB, frag_src_RGB)) { - goto error; - } - if (!wlr_shader_add_format(default_shader, GL_RGBA, frag_src_RGBA)) { - goto error; - } - return; -error: - wlr_shader_destroy(default_shader); - wlr_log(L_ERROR, "Failed to set up default shaders!"); -} - -static GLuint vao, vbo, ebo; - -static void default_quad_init() { - GLfloat verticies[] = { - 1, 1, 1, 1, // bottom right - 1, 0, 1, 0, // top right - 0, 0, 0, 0, // top left - 0, 1, 0, 1, // bottom left - }; - GLuint indicies[] = { - 0, 1, 3, - 1, 2, 3, - }; - - glGenVertexArrays(1, &vao); - glGenBuffers(1, &vbo); - - glBindVertexArray(vao); - glBindBuffer(GL_ARRAY_BUFFER, vbo); - - glEnableVertexAttribArray(0); - glEnableVertexAttribArray(1); - glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 4 * sizeof(GLfloat), (void *)0); - glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 4 * sizeof(GLfloat), (void *)(2 * sizeof(GLfloat))); - glBufferData(GL_ARRAY_BUFFER, sizeof(verticies), verticies, GL_STATIC_DRAW); - - glGenBuffers(1, &ebo); - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo); - glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indicies), indicies, GL_STATIC_DRAW); -} - -static void global_init() { - default_shader_init(); - default_quad_init(); -} - -struct wlr_renderer *wlr_renderer_init() { - global_init(); - struct wlr_renderer *r = calloc(sizeof(struct wlr_renderer), 1); - r->shader = default_shader; - return r; -} - -void wlr_renderer_set_shader(struct wlr_renderer *renderer, - struct wlr_shader *shader) { - assert(renderer); - renderer->shader = shader; -} - -bool wlr_render_quad(struct wlr_renderer *renderer, - struct wlr_surface *surf, float (*transform)[16], - float x, float y) { - assert(renderer && surf && renderer->shader && surf->valid); - wlr_shader_use(renderer->shader, surf->format); - - glBindVertexArray(vao); - glBindBuffer(GL_ARRAY_BUFFER, vbo); - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo); - glActiveTexture(GL_TEXTURE0 + 1); - glBindTexture(GL_TEXTURE_2D, surf->tex_id); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - - float world[16], final[16]; - wlr_matrix_identity(&final); - wlr_matrix_translate(&world, x, y, 0); - wlr_matrix_mul(&final, &world, &final); - wlr_matrix_scale(&world, surf->width, surf->height, 1); - wlr_matrix_mul(&final, &world, &final); - wlr_matrix_mul(transform, &final, &final); - glUniformMatrix4fv(0, 1, GL_TRUE, final); - - glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0); - return false; -} - -void wlr_renderer_destroy(struct wlr_renderer *renderer) { - // TODO -} |