From f9d48018a686761f7f75c777710871b5af0488e0 Mon Sep 17 00:00:00 2001 From: sam Date: Sun, 11 Aug 2024 16:18:06 +1200 Subject: [PATCH] first commit --- .../index/simple.c.700CB8E1B8AD103E.idx | Bin 0 -> 430 bytes .gitignore | 3 ++ .gitmodules | 3 ++ Makefile | 12 +++++ .../index/gearlib.h.988F31907B86874A.idx | Bin 0 -> 2430 bytes src/Makefile | 22 ++++++++ src/gearlib.h | 47 +++++++++++++++++ src/libgearlib.a | Bin 0 -> 12208 bytes src/log.c | 14 +++++ src/state.c | 16 ++++++ src/thirdparty/log.c | 1 + src/window.c | 49 ++++++++++++++++++ test/Makefile | 15 ++++++ test/simple-init.c | 7 +++ test/simple-log.c | 8 +++ test/simple.c | 6 +++ 16 files changed, 203 insertions(+) create mode 100644 .cache/clangd/index/simple.c.700CB8E1B8AD103E.idx create mode 100644 .gitignore create mode 100644 .gitmodules create mode 100644 Makefile create mode 100644 src/.cache/clangd/index/gearlib.h.988F31907B86874A.idx create mode 100644 src/Makefile create mode 100644 src/gearlib.h create mode 100644 src/libgearlib.a create mode 100644 src/log.c create mode 100644 src/state.c create mode 160000 src/thirdparty/log.c create mode 100644 src/window.c create mode 100644 test/Makefile create mode 100644 test/simple-init.c create mode 100644 test/simple-log.c create mode 100644 test/simple.c diff --git a/.cache/clangd/index/simple.c.700CB8E1B8AD103E.idx b/.cache/clangd/index/simple.c.700CB8E1B8AD103E.idx new file mode 100644 index 0000000000000000000000000000000000000000..fcd271253458de66a21bf5a8351e94d1448820cf GIT binary patch literal 430 zcmWIYbaPwA$iU#7;#rZKT9U}Zz`!63#Kk2=nYV!S0-#*QoT&i^y__9+&hWqG>yPVt zaI#!bTXfX}-%sC;Uf;TV_M|;xzrKg9Szum0%X7v_o`nJ$caC#xcS+p4prGxIy7|?a zO+f~Qwh@yI(sm#1?zWtxopkXC>%LUsEy?Rvyt%dE`Ig6?GAj#aALHIrdiusuRxi1I z<}aqTgv#~2ZHem(D$#GVUOV;nj#Iw#Lc5bM+gr$4t~FnO@wn{YtP9yzA(@*WpZwx{ zX{OJiZ=#0X=fgc7?tIsM#KmGq;t5{Oi`9BX%zxgW`B`soled2JzuW*z^Ibk(^H1tc zJXBnnnLQ<8T|AL(3*WB!g> zHr?jS!+~R-#zz&MNN>z)@YH+`t;`>m+4`y~c`7!`QFGP9(lqTtxdRr5|i%c$KXi}7gl z9qxW<$sgrjrJa#MACn&M-C1Ki+I8~2s=vBhwV`0((&zZ(o|#=QwBg+ac}>xJ&+a|+ z+TKy2bE(FLH*-8P`dSiBomA(AeX5w;+pr?(?Sp5z4chxRk2Wn%3i`Do;ehiyw}9bN z+Z~;oTeCxs<-cQH#*vwl1S4_1{Ukik9v3mi$>fu&sINH%Bh4o*MIYF`a36 zE00YcU$^+-p@kPZ3jLMK?(SKYJ}46>mE-Aop``+Fd=37$7+EjtVhY2r2Y1pR%|$elj!y68KO) zoEUI|$toxR9aWFU&`1mW367A9!LtAT&1%)gs2+bBxdDOWI0rFU2rs%eD(l9Te!(EQ zSQN0dl-3oIQY+*}L5Xdysi!_vT?~*R6;z-jboOGv6$II)5ByUdF`Gu7u$7TBPGYbm z_`XVi803ueYbcEyA_<$p{GVnU49HKY(0M>jYc&5Pr)f1#9*l)bB6v^@R`Om1}Sg~C8cymq(m~9 zVrK33(u@F~A_lo&f|^phAkxlykWe})y>P+d`TJ<3gcLl-JBY!OqCY6BD$FK+KaGX~ zLC(t^#b6<@sZ`IQDgStD;zyg~g7#<4(YaiHx@J(bC`FcuJ zaP0LFz*Z0n7B>$M0cYKO0}eUlz5#)XNTv8;k_hYc6bUf$BG;r zGgFC}3>Ok63}475WnFMkeftD>ERNtsLs)`kv1UeuEhSzvi3qf(-1~EpcVaJJX-Sk) zyffi!E)cqjl(x8BhF2r?kd+2$hOD$mJ7i@*2J;H*4sr^Pfsex?feJ;7FyR{g(z%8X zo7KQ}C)}}7p}re(bz|w{9DrR3SL_{V>p;WH*y#Qococ#lSS;3;b3;BZj#;@K*u#in z=4<+0AL&-s-c<-}nxHv6=2(PKiReY9O7O$OA%YFzy0QNNESL|5vFlh +#include +#include +#include + +typedef uint8_t u8; +typedef uint16_t u16; +typedef uint32_t u32; +typedef uint64_t u64; +typedef uintptr_t uptr; + +typedef int8_t i8; +typedef int16_t i16; +typedef int32_t i32; +typedef int64_t i64; +typedef intptr_t iptr; + +typedef float_t f32; +typedef double_t f64; + +#define GRAPI extern +#define GR_DEFAULT_MAJOR 4 +#define GR_DEFAULT_MINOR 6 + +GRAPI i32 gr_state_init(); +#define gr_state_assert() assert(gr_state != NULL && "State not initialized") +#define gr_state_set(prop, val) gr_state_assert(); gr_state->prop = val +#define gr_state_get(prop) ({ gr_state_assert(); gr_state->prop; }) + +GRAPI i32 gr_window_init(i32 major, i32 minor); +GRAPI i32 gr_window_create(i32 width, i32 height, char* title); + +GRAPI i32 gr_log_add_file(char* filename); + +typedef struct { + i32 major; + i32 minor; + bool window_initialized; + void* window; +} gr_state_t; + +GRAPI gr_state_t* gr_state; + +#endif diff --git a/src/libgearlib.a b/src/libgearlib.a new file mode 100644 index 0000000000000000000000000000000000000000..29eab921e3162c5b1644ed42a4d281fb5339a5b8 GIT binary patch literal 12208 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 literal 0 HcmV?d00001 diff --git a/src/log.c b/src/log.c new file mode 100644 index 0000000..19a9d66 --- /dev/null +++ b/src/log.c @@ -0,0 +1,14 @@ +#include +#include + +i32 gr_log_add_file(char* filename) { + FILE* fd = fopen(filename, "w"); + if(fd == NULL) { + log_error("Couldn't open file \"%s\"", filename); + return 1; + } + + log_add_fp(fd, LOG_INFO); + log_info("Added file \"%s\" as logging file", filename); + return 0; +} diff --git a/src/state.c b/src/state.c new file mode 100644 index 0000000..71df5ea --- /dev/null +++ b/src/state.c @@ -0,0 +1,16 @@ +#include "log.c/src/log.h" +#include +#include + +gr_state_t* gr_state = NULL; + +i32 gr_state_init() { + if(gr_state != NULL) { + log_fatal("Init must only be called once"); + return 1; + } + + gr_state = calloc(1, sizeof(gr_state_t)); + log_info("Created state"); + return 0; +} diff --git a/src/thirdparty/log.c b/src/thirdparty/log.c new file mode 160000 index 0000000..f9ea349 --- /dev/null +++ b/src/thirdparty/log.c @@ -0,0 +1 @@ +Subproject commit f9ea34994bd58ed342d2245cd4110bb5c6790153 diff --git a/src/window.c b/src/window.c new file mode 100644 index 0000000..b84e166 --- /dev/null +++ b/src/window.c @@ -0,0 +1,49 @@ +#include +#include +#include + +i32 gr_window_init(i32 major, i32 minor) { + if(gr_state->window_initialized == true) { + log_fatal("Init already called"); + return 1; + } + + gr_state_set(major, major); + gr_state_set(minor, minor); + gr_state_set(window_initialized, true); + + log_info("Initialized for OpenGL %d.%d", major, minor); + + return 0; +} + +i32 gr_window_create(i32 width, i32 height, char* title) { + if(!gr_state_get(window_initialized)) { + log_info("Window was not initialized before calling create, defaulting to OpenGL %d.%d", + GR_DEFAULT_MAJOR, GR_DEFAULT_MINOR); + gr_window_init(GR_DEFAULT_MAJOR, GR_DEFAULT_MINOR); + } + +#ifdef USE_GLFW + if(glfwInit() != GLFW_TRUE) { + log_fatal("GLFW failed to initialize"); + } else { + log_info("GLFW initialized successfully"); + } + + glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, gr_state_get(major)); + glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, gr_state_get(minor)); + glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); + glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); + + gr_state_set(window, glfwCreateWindow(width, height, title, NULL, NULL)); + if(gr_state_get(window) == NULL) { + log_fatal("Failed to create window"); + return 1; + } else { + log_info("Window created successfully"); + } +#endif + + return 0; +} diff --git a/test/Makefile b/test/Makefile new file mode 100644 index 0000000..28be3c2 --- /dev/null +++ b/test/Makefile @@ -0,0 +1,15 @@ +CFLAGS=-O3 -I../src +LDFLAGS=-L../src -lgearlib $(shell pkg-config --libs glfw3) + +CFILES=$(shell find -L * -type f -name '*.c') +OBJ=$(CFILES:.c=.o) + +%.o: %.c + $(CC) $(CFLAGS) $(LDFLAGS) $< -o $@ + +all: $(OBJ) + +clean: + rm -rf $(OBJ) $(BINARY) + + diff --git a/test/simple-init.c b/test/simple-init.c new file mode 100644 index 0000000..be3b766 --- /dev/null +++ b/test/simple-init.c @@ -0,0 +1,7 @@ +#include + +int main() { + gr_state_init(); + gr_window_init(4, 1); + gr_window_create(800, 600, "hi"); +} diff --git a/test/simple-log.c b/test/simple-log.c new file mode 100644 index 0000000..1c281b2 --- /dev/null +++ b/test/simple-log.c @@ -0,0 +1,8 @@ +#include + +int main() { + gr_state_init(); + + gr_log_add_file("log.txt"); + gr_window_create(800, 600, "hi"); +} diff --git a/test/simple.c b/test/simple.c new file mode 100644 index 0000000..610af17 --- /dev/null +++ b/test/simple.c @@ -0,0 +1,6 @@ +#include + +int main() { + gr_state_init(); + gr_window_create(800, 600, "hi"); +}