summaryrefslogtreecommitdiff
path: root/src/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.c')
-rw-r--r--src/main.c41
1 files changed, 38 insertions, 3 deletions
diff --git a/src/main.c b/src/main.c
index 4b5685d..c4bf2c3 100644
--- a/src/main.c
+++ b/src/main.c
@@ -1,14 +1,27 @@
#include <stdio.h>
#include <stdlib.h>
+#include <sys/times.h>
+#include <cglm/cglm.h>
+#include <cglm/struct.h>
#include "graphics.h"
#include "window.h"
#include "common.h"
+#define SW 640
+#define SH 480
+
window_t window;
graphics_t graphics;
int _create_surface(VkInstance instance, VkSurfaceKHR *surface);
+int update_ubo(void *uniform_buffer);
+
+struct ubo {
+ mat4 model;
+ mat4 view;
+ mat4 proj;
+};
vertex_t vertices[] = {
{{-0.5f, -0.5f}, {1.0f, 0.0f, 0.0f}},
@@ -33,9 +46,9 @@ int main(void)
// populate window info
struct window_info win_info = {0};
win_info.title = "Test App";
- win_info.flags = SDL_WINDOW_RESIZABLE;
- win_info.w = 640;
- win_info.h = 480;
+ // win_info.flags = SDL_WINDOW_RESIZABLE;
+ win_info.w = SW;
+ win_info.h = SH;
// create window
window = window_create(&win_info);
@@ -64,6 +77,9 @@ int main(void)
grph_info.indices = indices;
grph_info.nindices = ARR_SIZE(indices);
+ grph_info.ubo_size = sizeof(struct ubo);
+ grph_info.update_ubo = update_ubo;
+
grph_info.surface_func = _create_surface;
// create the device
@@ -96,6 +112,25 @@ f2: SDL_Quit();
f1: return ret;
}
+int update_ubo(void *uniform_buffer)
+{
+ struct ubo *ubo = (struct ubo *)uniform_buffer;
+
+ static float time = 1.0f;
+ time += 0.01f;
+
+ memcpy(ubo->model, glms_mat4_identity().raw, sizeof(ubo->model));
+ glm_rotate(&ubo->model, time * glm_rad(90.0f),
+ (vec3){0.0f, 0.0f, 1.0f});
+
+ glm_lookat((vec3){1.0f, 1.0f, 2.0f}, (vec3){0.0f, 0.0f, 0.0f}, (vec3){0.0f, 0.0f, 1.0f}, ubo->view);
+
+ glm_perspective(glm_rad(45.0f), (float)SW/(float)SH, 0.1f, 10.0f, ubo->proj);
+
+ ubo->proj[1][1] *= -1;
+ return 0;
+}
+
int _create_surface(VkInstance instance, VkSurfaceKHR *surface)
{
return window_create_surface(window, instance, surface);