diff options
author | sanine <sanine.not@pm.me> | 2022-08-18 22:46:40 -0500 |
---|---|---|
committer | sanine <sanine.not@pm.me> | 2022-08-18 22:46:40 -0500 |
commit | 275536b36657744d802866c060654e2b5cd5a5f8 (patch) | |
tree | e685ed8d665fd629c19cbfc39095402d71e349fc /src/gl | |
parent | 253f1d1ca8b4b81f206e4aeb20afe440a6dae8be (diff) |
implement working windows
Diffstat (limited to 'src/gl')
-rw-r--r-- | src/gl/gl.c | 34 | ||||
-rw-r--r-- | src/gl/gl.h | 9 | ||||
-rw-r--r-- | src/gl/gl.test.c (renamed from src/gl/window.test.c) | 4 | ||||
-rw-r--r-- | src/gl/window.c | 56 |
4 files changed, 95 insertions, 8 deletions
diff --git a/src/gl/gl.c b/src/gl/gl.c new file mode 100644 index 0000000..8613e70 --- /dev/null +++ b/src/gl/gl.c @@ -0,0 +1,34 @@ +#include "gl/glad/glad.h" +#include <GLFW/glfw3.h> +#include <lua.h> +#include <honeysuckle.h> + + +int gl_init(lua_State *L); +int gl_terminate(lua_State *L); + + +void setup_gl(lua_State *L, int honey_index) +{ + hs_create_table(L, + hs_str_cfunc("init", gl_init), + hs_str_cfunc("terminate", gl_terminate) + ); + lua_setfield(L, honey_index, "gl"); +} + + +int gl_init(lua_State *L) +{ + if (!glfwInit()) { + hs_throw_error(L, "failed to initialize GLFW"); + } + return 0; +} + + +int gl_terminate(lua_State *L) +{ + glfwTerminate(); + return 0; +} diff --git a/src/gl/gl.h b/src/gl/gl.h new file mode 100644 index 0000000..2e27851 --- /dev/null +++ b/src/gl/gl.h @@ -0,0 +1,9 @@ +#ifndef HONEY_GL_H +#define HONEY_GL_H + +#include <lua.h> + +void setup_gl(lua_State *L, int honey_index); +void setup_window(lua_State *L, int honey_index); + +#endif diff --git a/src/gl/window.test.c b/src/gl/gl.test.c index b4fb5d4..9bacbf9 100644 --- a/src/gl/window.test.c +++ b/src/gl/gl.test.c @@ -12,7 +12,7 @@ void mock_glfwTerminate_(); #define glfwInit mock_glfwInit_ #define hs_throw_error mock_hs_throw_error_ #define glfwTerminate mock_glfwTerminate_ -#include "gl/window.c" +#include "gl/gl.c" #undef glfwTerminate #undef hs_throw_error #undef glfwInit @@ -102,7 +102,7 @@ void gl_terminate_works() } -void suite_window() +void suite_gl() { lily_run_test(gl_init_succeeds); lily_run_test(gl_init_fails); diff --git a/src/gl/window.c b/src/gl/window.c index bc654f9..8434a5a 100644 --- a/src/gl/window.c +++ b/src/gl/window.c @@ -3,17 +3,61 @@ #include <lua.h> #include <honeysuckle.h> -int gl_init(lua_State *L) + +int window_create(lua_State *L); +int window_destroy(lua_State *L); +int window_should_close(lua_State *L); +int window_poll_events(lua_State *L); + + +void setup_window(lua_State *L, int honey_index) +{ + hs_create_table(L, + hs_str_cfunc("create", window_create), + hs_str_cfunc("destroy", window_destroy), + hs_str_cfunc("shouldClose", window_should_close), + hs_str_cfunc("pollEvents", window_poll_events) + ); + lua_setfield(L, honey_index, "window"); +} + + +int window_create(lua_State *L) +{ + lua_Integer width, height; + char *title; + hs_parse_args(L, hs_int(width), hs_int(height), hs_str(title)); + + GLFWwindow *win = glfwCreateWindow(width, height, title, NULL, NULL); + if (win == NULL) + hs_throw_error(L, "failed to create window"); + lua_pushlightuserdata(L, win); + return 1; +} + + +int window_destroy(lua_State *L) { - if (!glfwInit()) { - hs_throw_error(L, "failed to initialize GLFW"); - } + void *ptr; + hs_parse_args(L, hs_light(ptr)); + GLFWwindow *win = ptr; + glfwDestroyWindow(win); return 0; } -int gl_terminate(lua_State *L) +int window_should_close(lua_State *L) +{ + void *ptr; + hs_parse_args(L, hs_light(ptr)); + GLFWwindow *win = ptr; + lua_pushboolean(L, glfwWindowShouldClose(win)); + return 1; +} + + +int window_poll_events(lua_State *L) { - glfwTerminate(); + glfwPollEvents(); return 0; } |