diff options
| -rw-r--r-- | src/graphics.cc | 33 | ||||
| -rw-r--r-- | src/graphics.h | 13 | ||||
| -rw-r--r-- | src/wayclock.cc | 6 |
3 files changed, 42 insertions, 10 deletions
diff --git a/src/graphics.cc b/src/graphics.cc index 44a4333..40e67ab 100644 --- a/src/graphics.cc +++ b/src/graphics.cc @@ -117,6 +117,9 @@ enum renderer_error_e wayc_renderer_init(struct renderer_s* renderer, return RENDERER_ERROR_SURFACE_CREATION; } + sg_desc desc = {}; + sg_setup(&desc); + renderer->graphics = graphics; renderer->ewindow = ewindow; renderer->esurface = esurface; @@ -132,6 +135,34 @@ enum renderer_error_e wayc_renderer_init(struct renderer_s* renderer, return RENDERER_ERROR_NONE; } +void wayc_renderer_begin(struct renderer_s* renderer) { + wayc_notnull(renderer); + + sg_gl_swapchain gl_swap = {}; + gl_swap.framebuffer = 0; + + sg_swapchain swap = {}; + swap.gl = gl_swap; + swap.width = renderer->width; + swap.height = renderer->height; + + sg_pass pass = {}; + pass.swapchain = swap; + + sg_begin_pass(&pass); +} + +void wayc_renderer_end(struct renderer_s* renderer) { + wayc_notnull(renderer); + + struct graphics_s* graphics = renderer->graphics; + + sg_end_pass(); + sg_commit(); + + eglSwapBuffers(graphics->display, renderer->esurface); +} + void wayc_renderer_deinit(struct renderer_s* renderer) { wayc_notnull(renderer); @@ -139,6 +170,8 @@ void wayc_renderer_deinit(struct renderer_s* renderer) { renderer->ewindow == nullptr) return; + sg_shutdown(); + eglDestroySurface(renderer->graphics->display, renderer->esurface); wl_egl_window_destroy(renderer->ewindow); diff --git a/src/graphics.h b/src/graphics.h index ba4a086..315a879 100644 --- a/src/graphics.h +++ b/src/graphics.h @@ -1,8 +1,10 @@ #pragma once #include <EGL/egl.h> +#include <sokol_gfx.h> #include <wayland-egl.h> +#include "glad.h" #include "utils.h" #include "window.h" @@ -46,9 +48,11 @@ enum renderer_error_e wayc_renderer_init(struct renderer_s* renderer, static inline void wayc_renderer_resize(struct renderer_s* renderer, i32 width, i32 height) { wayc_notnull(renderer); + renderer->width = width; renderer->height = height; wl_egl_window_resize(renderer->ewindow, width, height, 0, 0); + glViewport(0, 0, width, height); } static inline void wayc_renderer_use(struct renderer_s* renderer) { @@ -60,12 +64,7 @@ static inline void wayc_renderer_use(struct renderer_s* renderer) { graphics->context); } -static inline void wayc_renderer_swap(struct renderer_s* renderer) { - wayc_notnull(renderer); - struct graphics_s* graphics = renderer->graphics; - EGLDisplay display = graphics->display; - - eglSwapBuffers(display, renderer->esurface); -} +void wayc_renderer_begin(struct renderer_s* renderer); +void wayc_renderer_end(struct renderer_s* renderer); void wayc_renderer_deinit(struct renderer_s* renderer); diff --git a/src/wayclock.cc b/src/wayclock.cc index 55a9275..c2ef95c 100644 --- a/src/wayclock.cc +++ b/src/wayclock.cc @@ -29,10 +29,10 @@ void wayc_frame(struct app_s* app, struct window_s* window, wayc_notnull(loop); wayc_notnull(app); - glClear(GL_COLOR_BUFFER_BIT); - wayc_atlas_use(app->atlas, 0); + struct renderer_s* renderer = app->renderer; - wayc_renderer_swap(app->renderer); + wayc_renderer_begin(renderer); + wayc_renderer_end(renderer); } void wayc_handle(u8* user, struct eventloop_s* loop, struct event_s* event) { |
