summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/graphics.cc33
-rw-r--r--src/graphics.h13
-rw-r--r--src/wayclock.cc6
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) {