Attempted to move window to the world of arenas
This commit is contained in:
parent
311facef8f
commit
538d7db406
3 changed files with 30 additions and 19 deletions
17
src/main.c
17
src/main.c
|
|
@ -57,8 +57,10 @@ int main(int argc, char *argv[]) {
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
int main(int argc, char *argv[]) {
|
||||||
wn_window window = {0};
|
Arena *global_arena = arena_init(NULL, 0);
|
||||||
if (!wn_window_init(&window)) {
|
|
||||||
|
wn_window *window = wn_window_init(global_arena);
|
||||||
|
if (wn_window_init(global_arena) == NULL) {
|
||||||
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize wn_window");
|
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize wn_window");
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
@ -122,13 +124,13 @@ int main(int argc, char *argv[]) {
|
||||||
bool wants_running = true;
|
bool wants_running = true;
|
||||||
while (wants_running) {
|
while (wants_running) {
|
||||||
// TODO: Create event handler files
|
// TODO: Create event handler files
|
||||||
while (SDL_PollEvent(&window.event)) {
|
while (SDL_PollEvent(&window->event)) {
|
||||||
switch (window.event.type) {
|
switch (window->event.type) {
|
||||||
case SDL_EVENT_QUIT:
|
case SDL_EVENT_QUIT:
|
||||||
wants_running = false;
|
wants_running = false;
|
||||||
break;
|
break;
|
||||||
case SDL_EVENT_KEY_DOWN:
|
case SDL_EVENT_KEY_DOWN:
|
||||||
if (window.event.key.key == SDLK_ESCAPE) {
|
if (window->event.key.key == SDLK_ESCAPE) {
|
||||||
wants_running = false;
|
wants_running = false;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
@ -158,7 +160,7 @@ int main(int argc, char *argv[]) {
|
||||||
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);
|
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);
|
||||||
// glBindVertexArray(0); // no need to unbind it every time
|
// glBindVertexArray(0); // no need to unbind it every time
|
||||||
|
|
||||||
wn_swapwindow(&window);
|
wn_swapwindow(window);
|
||||||
}
|
}
|
||||||
|
|
||||||
glDeleteVertexArrays(1, &VAO);
|
glDeleteVertexArrays(1, &VAO);
|
||||||
|
|
@ -166,7 +168,6 @@ int main(int argc, char *argv[]) {
|
||||||
glDeleteBuffers(1, &EBO);
|
glDeleteBuffers(1, &EBO);
|
||||||
|
|
||||||
wn_shader_deinit(shader);
|
wn_shader_deinit(shader);
|
||||||
wn_window_deinit(&window);
|
wn_window_deinit(global_arena);
|
||||||
|
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
27
src/window.c
27
src/window.c
|
|
@ -1,17 +1,18 @@
|
||||||
#include "window.h"
|
#include "window.h"
|
||||||
#include "SDL3/SDL_init.h"
|
#include "SDL3/SDL_init.h"
|
||||||
|
#include "arena_allocator.h"
|
||||||
#include <GL/glew.h>
|
#include <GL/glew.h>
|
||||||
#include <SDL3/SDL_log.h>
|
#include <SDL3/SDL_log.h>
|
||||||
#include <SDL3/SDL_opengl.h>
|
#include <SDL3/SDL_opengl.h>
|
||||||
|
|
||||||
bool wn_window_init(wn_window *window) {
|
wn_window *wn_window_init(Arena *arena) {
|
||||||
|
wn_window *window = arena_alloc(arena, sizeof(wn_window));
|
||||||
window->window = SDL_CreateWindow("Hello SDL3", 320, 240,
|
window->window = SDL_CreateWindow("Hello SDL3", 320, 240,
|
||||||
SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE);
|
SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE);
|
||||||
if (!SDL_Init(SDL_INIT_VIDEO)) {
|
if (!SDL_Init(SDL_INIT_VIDEO)) {
|
||||||
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s",
|
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s",
|
||||||
SDL_GetError());
|
SDL_GetError());
|
||||||
return false;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 4);
|
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 4);
|
||||||
|
|
@ -22,14 +23,14 @@ bool wn_window_init(wn_window *window) {
|
||||||
if (!window->window) {
|
if (!window->window) {
|
||||||
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create window: %s",
|
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create window: %s",
|
||||||
SDL_GetError());
|
SDL_GetError());
|
||||||
return false;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
window->glcontext = SDL_GL_CreateContext(window->window);
|
window->glcontext = SDL_GL_CreateContext(window->window);
|
||||||
if (!window->glcontext) {
|
if (!window->glcontext) {
|
||||||
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION,
|
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION,
|
||||||
"Couldn't create OpenGL Context: %s", SDL_GetError());
|
"Couldn't create OpenGL Context: %s", SDL_GetError());
|
||||||
return false;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
GLenum glewError = glewInit();
|
GLenum glewError = glewInit();
|
||||||
|
|
@ -47,12 +48,20 @@ bool wn_window_init(wn_window *window) {
|
||||||
SDL_SetWindowRelativeMouseMode(window->window, true);
|
SDL_SetWindowRelativeMouseMode(window->window, true);
|
||||||
SDL_GetRelativeMouseState(NULL, NULL);
|
SDL_GetRelativeMouseState(NULL, NULL);
|
||||||
|
|
||||||
return true;
|
// add deinit function to arena deinit stack
|
||||||
|
ArenaDeinitTask deinitTask = (ArenaDeinitTask){.func_param = (void *)window,
|
||||||
|
.func_ptr = *wn_window_deinit,
|
||||||
|
.next = NULL};
|
||||||
|
|
||||||
|
arena_deinit_task_push(arena, deinitTask);
|
||||||
|
|
||||||
|
return window;
|
||||||
}
|
}
|
||||||
|
|
||||||
void wn_window_deinit(wn_window *window) {
|
void wn_window_deinit(void *window) {
|
||||||
SDL_GL_DestroyContext(window->glcontext);
|
wn_window *cast_window = (wn_window *)window;
|
||||||
SDL_DestroyWindow(window->window);
|
SDL_GL_DestroyContext(cast_window->glcontext);
|
||||||
|
SDL_DestroyWindow(cast_window->window);
|
||||||
SDL_Quit();
|
SDL_Quit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@
|
||||||
#include "SDL3/SDL_events.h"
|
#include "SDL3/SDL_events.h"
|
||||||
#include "SDL3/SDL_render.h"
|
#include "SDL3/SDL_render.h"
|
||||||
#include "SDL3/SDL_video.h"
|
#include "SDL3/SDL_video.h"
|
||||||
|
#include "arena_allocator.h"
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
|
||||||
struct wn_window_s {
|
struct wn_window_s {
|
||||||
|
|
@ -13,7 +14,7 @@ struct wn_window_s {
|
||||||
};
|
};
|
||||||
typedef struct wn_window_s wn_window;
|
typedef struct wn_window_s wn_window;
|
||||||
|
|
||||||
bool wn_window_init(wn_window *window);
|
wn_window *wn_window_init(Arena *arena);
|
||||||
void wn_window_deinit(wn_window *window);
|
void wn_window_deinit(void *window);
|
||||||
|
|
||||||
void wn_swapwindow(wn_window *window);
|
void wn_swapwindow(wn_window *window);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue