summaryrefslogtreecommitdiff
path: root/test/example_core.c
diff options
context:
space:
mode:
authorRoberto Esteves <contact@robertoesteves.dev>2025-11-22 16:35:06 +0000
committerRoberto Esteves <contact@robertoesteves.dev>2025-11-22 16:35:06 +0000
commite7c2ec9719349f7a20dd1d4854869c10d8836a11 (patch)
treeaf5b34d8d21cabd4ec6d4206ce5a6fd4651de56c /test/example_core.c
parentd84537c52f537920369618028f84b48296811fd0 (diff)
chore: restructure project and brainstorming ideasHEADmaster
Diffstat (limited to 'test/example_core.c')
-rw-r--r--test/example_core.c93
1 files changed, 93 insertions, 0 deletions
diff --git a/test/example_core.c b/test/example_core.c
new file mode 100644
index 0000000..e9c78c8
--- /dev/null
+++ b/test/example_core.c
@@ -0,0 +1,93 @@
+#include "core/renderer.h"
+#include "core/window.h"
+
+#include "core/event.h"
+
+#include <stdio.h>
+#include <string.h>
+
+void treat_xcb_error(int code) {
+ switch (code) {
+
+ case XCB_CONN_ERROR: {
+ printf("Connection error\n");
+ } break;
+ case XCB_CONN_CLOSED_MEM_INSUFFICIENT: {
+ printf("Memory insufficient error\n");
+ } break;
+ case XCB_CONN_CLOSED_REQ_LEN_EXCEED: {
+ printf("Request length exceeded error\n");
+ } break;
+ case XCB_CONN_CLOSED_PARSE_ERR: {
+ printf("Parse error\n");
+ } break;
+ case XCB_CONN_CLOSED_INVALID_SCREEN: {
+ printf("Invalid Screen error\n");
+ } break;
+ }
+}
+
+int main(int argc, char **argv) {
+ struct ruim_rendererGLES renderer;
+ int width, height, needsRender, shouldClose = 0;
+ RuimToplevelBackend backend;
+ RuimToplevel toplevel;
+ RuimEvent event;
+ int err;
+
+ memset(&backend, 0, sizeof(backend));
+ memset(&toplevel, 0, sizeof(toplevel));
+ memset(&event, 0, sizeof(event));
+
+ if ((err = RuimToplevelBackendInit(&backend)) != 0) {
+ treat_xcb_error(err);
+ return 1;
+ }
+
+ toplevel.backend = &backend;
+ if ((err = RuimToplevelCreate(&toplevel, RUIM_TOPLEVEL_WINDOW)) != 0) {
+ treat_xcb_error(err);
+ return 1;
+ }
+
+ RuimToplevelDisplay(&toplevel);
+ RuimInitEGL(&toplevel);
+ renderer = RuimSetupGLES();
+
+ while (!shouldClose) {
+ int has_events = 0;
+
+ while (RuimToplevelBackendPoll(&backend, &event)) {
+ has_events = 1;
+ switch (event.type) {
+ case RUIM_EVENT_REDRAW: {
+ needsRender = 1;
+ } break;
+ case RUIM_EVENT_WINDOW: {
+ width = event.data.window.width;
+ height = event.data.window.height;
+ } break;
+ case RUIM_EVENT_MOUSEDOWN: {
+ } break;
+ case RUIM_EVENT_QUIT: {
+ shouldClose = 1;
+ } break;
+ }
+ }
+
+ if (needsRender) {
+ RuimResizeGLES(&renderer, width, height);
+ RuimRenderGLES(&renderer);
+ RuimSwapEGL(&toplevel);
+
+ needsRender = 0;
+ } else if (!has_events) {
+ RuimToplevelWaitForEvent(&toplevel);
+ }
+ }
+
+ RuimToplevelDestroy(&toplevel);
+ RuimToplevelBackendDeinit(&backend);
+
+ return 0;
+}