summaryrefslogtreecommitdiffstats
path: root/src/platform_sdl.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/platform_sdl.c')
-rw-r--r--src/platform_sdl.c124
1 files changed, 48 insertions, 76 deletions
diff --git a/src/platform_sdl.c b/src/platform_sdl.c
index 5cc6032..6593b9e 100644
--- a/src/platform_sdl.c
+++ b/src/platform_sdl.c
@@ -1,29 +1,25 @@
+#include "platform_sdl.h"
#include "log.h"
#include "platform.h"
-#include "platform_sdl.h"
-#include <SDL3/SDL_vulkan.h>
bool vgltf_platform_init(struct vgltf_platform *platform) {
+ VGLTF_LOG_INFO("Initializing SDL platform...");
+
if (!SDL_Init(SDL_INIT_VIDEO)) {
VGLTF_LOG_ERR("SDL initialization failed: %s", SDL_GetError());
goto err;
}
- constexpr char WINDOW_TITLE[] = "VisibleGLTF";
- constexpr int WINDOW_WIDTH = 800;
- constexpr int WINDOW_HEIGHT = 600;
- SDL_Window *window =
- SDL_CreateWindow(WINDOW_TITLE, WINDOW_WIDTH, WINDOW_HEIGHT,
- SDL_WINDOW_VULKAN | SDL_WINDOW_RESIZABLE);
- if (!window) {
- VGLTF_LOG_ERR("SDL window creation failed: %s", SDL_GetError());
- goto quit_sdl;
+ platform->window = SDL_CreateWindow("vgltf", 800, 600, SDL_WINDOW_VULKAN);
+ if (!platform->window) {
+ VGLTF_LOG_ERR("Window creation failed: %s", SDL_GetError());
+ goto deinit_sdl;
}
- platform->window = window;
-
+ VGLTF_LOG_INFO("SDL platform initialized");
return true;
-quit_sdl:
+
+deinit_sdl:
SDL_Quit();
err:
return false;
@@ -31,67 +27,23 @@ err:
void vgltf_platform_deinit(struct vgltf_platform *platform) {
SDL_DestroyWindow(platform->window);
SDL_Quit();
+ VGLTF_LOG_INFO("SDL platform deinitialized");
}
-static enum vgltf_key vgltf_key_from_sdl_keycode(SDL_Keycode keycode) {
- switch (keycode) {
- case SDLK_A:
- return VGLTF_KEY_A;
- case SDLK_B:
- return VGLTF_KEY_B;
- case SDLK_C:
- return VGLTF_KEY_C;
- case SDLK_D:
- return VGLTF_KEY_D;
- case SDLK_E:
- return VGLTF_KEY_E;
- case SDLK_F:
- return VGLTF_KEY_F;
- case SDLK_G:
- return VGLTF_KEY_G;
- case SDLK_H:
- return VGLTF_KEY_H;
- case SDLK_I:
- return VGLTF_KEY_I;
- case SDLK_J:
- return VGLTF_KEY_J;
- case SDLK_K:
- return VGLTF_KEY_K;
- case SDLK_L:
- return VGLTF_KEY_L;
- case SDLK_M:
- return VGLTF_KEY_M;
- case SDLK_N:
- return VGLTF_KEY_N;
- case SDLK_O:
- return VGLTF_KEY_O;
- case SDLK_P:
- return VGLTF_KEY_P;
- case SDLK_Q:
- return VGLTF_KEY_Q;
- case SDLK_R:
- return VGLTF_KEY_R;
- case SDLK_S:
- return VGLTF_KEY_S;
- case SDLK_T:
- return VGLTF_KEY_T;
- case SDLK_U:
- return VGLTF_KEY_U;
- case SDLK_V:
- return VGLTF_KEY_V;
- case SDLK_W:
- return VGLTF_KEY_W;
- case SDLK_X:
- return VGLTF_KEY_X;
- case SDLK_Y:
- return VGLTF_KEY_Y;
- case SDLK_Z:
- return VGLTF_KEY_Z;
- case SDLK_ESCAPE:
- return VGLTF_KEY_ESCAPE;
+
+#define VGLTF_GENERATE_SDL_KEYCODE_MAPPING(KEY) \
+ case SDLK_##KEY: \
+ return VGLTF_KEY_##KEY;
+
+static enum vgltf_key vgltf_key_from_sdl_keycode(SDL_Keycode key_code) {
+ switch (key_code) {
+ VGLTF_FOREACH_KEY(VGLTF_GENERATE_SDL_KEYCODE_MAPPING)
default:
return VGLTF_KEY_UNKNOWN;
}
}
+
+#undef VGLTF_GENERATE_SDL_KEYCODE_MAPPING
+
bool vgltf_platform_poll_event(struct vgltf_platform *platform,
struct vgltf_event *event) {
(void)platform;
@@ -106,16 +58,12 @@ bool vgltf_platform_poll_event(struct vgltf_platform *platform,
event->type = VGLTF_EVENT_KEY_DOWN;
event->key.key = vgltf_key_from_sdl_keycode(sdl_event.key.key);
break;
- case SDL_EVENT_WINDOW_RESIZED:
- event->type = VGLTF_EVENT_WINDOW_RESIZED;
- event->window_resized.width = sdl_event.display.data1;
- event->window_resized.height = sdl_event.display.data2;
- break;
default:
event->type = VGLTF_EVENT_UNKNOWN;
break;
}
}
+
return pending_events;
}
bool vgltf_platform_get_window_size(struct vgltf_platform *platform,
@@ -123,7 +71,31 @@ bool vgltf_platform_get_window_size(struct vgltf_platform *platform,
return SDL_GetWindowSize(platform->window, &window_size->width,
&window_size->height);
}
-char const *const *
+bool vgltf_platform_get_current_time_nanoseconds(long *time) {
+ if (!SDL_GetCurrentTime(time)) {
+ VGLTF_LOG_ERR("'SDL_GetCurrentTime failed: %s", SDL_GetError());
+ goto err;
+ }
+
+ return true;
+err:
+ return false;
+}
+
+char *vgltf_platform_read_file_to_string(const char *filepath,
+ size_t *out_size) {
+ char *file_data = SDL_LoadFile(filepath, out_size);
+ if (!file_data) {
+ VGLTF_LOG_ERR("Couldn't load file: %s", SDL_GetError());
+ return NULL;
+ }
+
+ return file_data;
+}
+
+#include <SDL3/SDL_vulkan.h>
+
+const char *const *
vgltf_platform_get_vulkan_instance_extensions(struct vgltf_platform *platform,
uint32_t *count) {
(void)platform;
Go back to lisible.xyz