From 551bda6114862013ffb17e648c12374c58d8362f Mon Sep 17 00:00:00 2001 From: herbglitch Date: Sun, 22 Jan 2023 18:45:27 -0700 Subject: [PATCH 01/13] added reading in csv (just for int32_ts) --- include/arc/graphics/spritesheet.h | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/include/arc/graphics/spritesheet.h b/include/arc/graphics/spritesheet.h index 285bf31..d29736c 100644 --- a/include/arc/graphics/spritesheet.h +++ b/include/arc/graphics/spritesheet.h @@ -5,8 +5,18 @@ extern "C" { #endif +#include +#include "arc/math/point.h" +#include "arc/math/rectangle.h" +#include "arc/graphics/renderer.h" + typedef struct ARC_Spritesheet ARC_Spritesheet; +void ARC_Spritesheet_RenderArea(ARC_Spritesheet *spritesheet, ARC_Rect *sheetBounds, ARC_Renderer *renderer, ARC_Rect *renderBounds); + +ARC_Point ARC_Spritesheet_GetSize(ARC_Spritesheet *spritesheet); +uint32_t *ARC_Spritesheet_GetTileSize(ARC_Spritesheet *spritesheet); + #ifdef __cplusplus } #endif From b024e8d5c16cc588631d9aec560f86de848172dd Mon Sep 17 00:00:00 2001 From: herbglitch Date: Sun, 22 Jan 2023 18:45:49 -0700 Subject: [PATCH 02/13] added reading in csv and rending chuncks of spritesheets --- include/arc/files/config.h | 17 ++++++ src/files/config.c | 105 +++++++++++++++++++++++++++++++++ src/graphics/sdl/spritesheet.c | 19 ++++++ 3 files changed, 141 insertions(+) create mode 100644 include/arc/files/config.h create mode 100644 src/files/config.c create mode 100644 src/graphics/sdl/spritesheet.c diff --git a/include/arc/files/config.h b/include/arc/files/config.h new file mode 100644 index 0000000..f1f4d2d --- /dev/null +++ b/include/arc/files/config.h @@ -0,0 +1,17 @@ +#ifndef ARC_FILES_CONFIG_H_ +#define ARC_FILES_CONFIG_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include "arc/std/config.h" +#include "arc/graphics/renderer.h" + +void ARC_FilesConfig_Init(ARC_Config *config); + +#ifdef __cplusplus +} +#endif + +#endif // !ARC_FILES_CONFIG_H_ \ No newline at end of file diff --git a/src/files/config.c b/src/files/config.c new file mode 100644 index 0000000..033f5a9 --- /dev/null +++ b/src/files/config.c @@ -0,0 +1,105 @@ +#include "arc/files/config.h" +#include "arc/std/io.h" +#include "arc/std/errno.h" +#include "arc/std/string.h" +#include "arc/std/array.h" +#include +#include + +uint8_t ARC_CSV_Read(ARC_Config *config, ARC_String *string, void **value); + +void ARC_CSV_Delete(ARC_Config *config, ARC_String *string, void *value); + +void ARC_FilesConfig_Init(ARC_Config *config){ + ARC_Config_AddKeyCString(config, (char *)"CSV", 3, ARC_CSV_Read, ARC_CSV_Delete); +} + +uint8_t ARC_CSV_Read(ARC_Config *config, ARC_String *string, void **value){ + ARC_Config_Get(config, string, value); + if(*value){ + return 1; + } + + ARC_String *fileData; + ARC_IO_FileToStr(string, &fileData); + if(arc_errno){ + ARC_DEBUG_LOG(arc_errno, "ARC_CSV_Read(config, string, value) could not read in csv file: \"%s\"", string->data); + ARC_String_Destroy(fileData); + return 0; + } + + uint32_t height = 0; + for(uint32_t i = 0; i < fileData->length; i++){ + if(fileData->data[i] == '\n'){ + height++; + } + } + + *value = malloc(sizeof(ARC_Array)); + ((ARC_Array *)*value)->data = malloc(sizeof(ARC_Array *) * height); + ((ARC_Array *)*value)->size = malloc(sizeof(uint32_t) ); + *((ARC_Array *)*value)->size = height; + + uint32_t index = 0; + for(uint32_t y = 0; y < height; y++){ + uint32_t width = 0; + uint32_t data = 0; + uint32_t x = 0; + + for(uint32_t i = index; i < fileData->length; i++){ + if(fileData->data[i] == ','){ + width++; + } + + if(fileData->data[i] == '\n'){ + width++; + break; + } + } + + if(!width){ + arc_errno = ARC_ERRNO_DATA; + ARC_DEBUG_LOG(arc_errno, "ARC_CSV_Read(config, string, value) no width of line %d", y); + ARC_String_Destroy(fileData); + return 0; + } + + ((ARC_Array **)((ARC_Array *)*value)->data)[y] = (ARC_Array *) malloc(sizeof(ARC_Array)); + ((ARC_Array **)((ARC_Array *)*value)->data)[y]->data = malloc(sizeof(int32_t ) * width); + ((ARC_Array **)((ARC_Array *)*value)->data)[y]->size = malloc(sizeof(uint32_t) ); + *((ARC_Array **)((ARC_Array *)*value)->data)[y]->size = width; + + for(uint32_t i = index; i < fileData->length; i++){ + if(fileData->data[i] != ',' && fileData->data[i] != '\n'){ + continue; + } + ARC_String *indexValueString; + ARC_String_CopySubstring(&indexValueString, fileData, index, i - index); + index = i + 1; + + ((int32_t *)((ARC_Array **)((ARC_Array *)*value)->data)[y]->data)[x] = (int32_t)ARC_String_ToInt64_t(indexValueString); + ARC_String_Destroy(indexValueString); + x++; + + if(fileData->data[i] == '\n'){ + index = i + 1; + break; + } + } + } + + return 0; +} + +void ARC_CSV_Delete(ARC_Config *config, ARC_String *string, void *value){ + ARC_Array *valueArray = value; + for(uint32_t i = 0; i < *valueArray->size; i++){ + free((int32_t *)((ARC_Array **)valueArray->data)[i]->data); + free((uint32_t *)((ARC_Array **)valueArray->data)[i]->size); + free((ARC_Array *)((ARC_Array **)valueArray->data)[i]); + } + + free((ARC_Array **)valueArray->data); + free((uint32_t *)valueArray->size); + free(valueArray); +} \ No newline at end of file diff --git a/src/graphics/sdl/spritesheet.c b/src/graphics/sdl/spritesheet.c new file mode 100644 index 0000000..a109b46 --- /dev/null +++ b/src/graphics/sdl/spritesheet.c @@ -0,0 +1,19 @@ +#include "arc/graphics/spritesheet.h" +#include "arc/graphics/sdl/spritesheet.h" +#include "arc/graphics/sdl/renderer.h" +#include "arc/math/point.h" +#include + +void ARC_Spritesheet_RenderArea(ARC_Spritesheet *spritesheet, ARC_Rect *sheetBounds, ARC_Renderer *renderer, ARC_Rect *renderBounds){ + SDL_RenderCopy(renderer->renderer, spritesheet->texture, (SDL_Rect *)sheetBounds, (SDL_Rect *)renderBounds); +} + +ARC_Point ARC_Spritesheet_GetSize(ARC_Spritesheet *spritesheet){ + ARC_Point size; + SDL_QueryTexture(spritesheet->texture, NULL, NULL, &size.x, &size.y); + return size; +} + +uint32_t *ARC_Spritesheet_GetTileSize(ARC_Spritesheet *spritesheet){ + return spritesheet->size; +} \ No newline at end of file From 5badf331fd7bded70fe0c708776bea404aadf451 Mon Sep 17 00:00:00 2001 From: herbglitch Date: Mon, 30 Jan 2023 23:22:34 -0700 Subject: [PATCH 03/13] added extern c to most files --- include/arc/math/point.h | 17 ++++++++++++++--- include/arc/math/rectangle.h | 8 ++++++++ include/arc/math/vector2.h | 10 ++++++++++ include/arc/std/array.h | 8 ++++++++ src/engine/state.c | 1 - src/files/config.c | 1 - src/graphics/sdl/sprite.c | 1 - 7 files changed, 40 insertions(+), 6 deletions(-) diff --git a/include/arc/math/point.h b/include/arc/math/point.h index b5b33b2..addf55d 100644 --- a/include/arc/math/point.h +++ b/include/arc/math/point.h @@ -3,16 +3,27 @@ #include +#ifdef __cplusplus +extern "C" { +#endif + typedef struct ARC_Point { - int32_t x, y; + int32_t x; + int32_t y; } ARC_Point; typedef struct ARC_UPoint { - uint32_t x, y; + uint32_t x; + uint32_t y; } ARC_UPoint; typedef struct ARC_FPoint { - float x, y; + float x; + float y; } ARC_FPoint; +#ifdef __cplusplus +} +#endif + #endif // ARC_MATH_POINT_H_ diff --git a/include/arc/math/rectangle.h b/include/arc/math/rectangle.h index b132609..d2d1bcb 100644 --- a/include/arc/math/rectangle.h +++ b/include/arc/math/rectangle.h @@ -3,6 +3,10 @@ #include +#ifdef __cplusplus +extern "C" { +#endif + typedef struct ARC_Rect { int32_t x; int32_t y; @@ -21,4 +25,8 @@ int32_t ARC_Rect_Intersects(ARC_Rect *rect1, ARC_Rect *rect2); int32_t ARC_Rect_LineIntersects(ARC_Rect *rect, int32_t *x1, int32_t *y1, int32_t *x2, int32_t *y2); +#ifdef __cplusplus +} +#endif + #endif // ARC_MATH_POINT_H_ diff --git a/include/arc/math/vector2.h b/include/arc/math/vector2.h index c68c085..11893bf 100644 --- a/include/arc/math/vector2.h +++ b/include/arc/math/vector2.h @@ -1,6 +1,10 @@ #ifndef ARC_MATH_VECTOR2_H_ #define ARC_MATH_VECTOR2_H_ +#ifdef __cplusplus +extern "C" { +#endif + typedef struct ARC_Vector2 { float x, y; } ARC_Vector2; @@ -9,4 +13,10 @@ typedef struct ARC_DVector2 { double x, y; } ARC_DVector2; +void ARC_Vector2_Normalize(ARC_Vector2 *vector); + +#ifdef __cplusplus +} +#endif + #endif // ARC_MATH_VECTOR2_H_ diff --git a/include/arc/std/array.h b/include/arc/std/array.h index 733c8e3..dc802aa 100644 --- a/include/arc/std/array.h +++ b/include/arc/std/array.h @@ -3,6 +3,10 @@ #include +#ifdef __cplusplus +extern "C" { +#endif + /** * @brief a type that holds an array of data and its size */ @@ -11,4 +15,8 @@ typedef struct ARC_Array { void *data; } ARC_Array; +#ifdef __cplusplus +} +#endif + #endif //ARC_STD_ARRAY_H_ \ No newline at end of file diff --git a/src/engine/state.c b/src/engine/state.c index 7f84745..5d3f707 100644 --- a/src/engine/state.c +++ b/src/engine/state.c @@ -2,7 +2,6 @@ #include void ARC_State_Update(void *data){ - ARC_State *temp = (ARC_State *)data; ((ARC_State *)data)->updateFn(((ARC_State *)data)->data); } diff --git a/src/files/config.c b/src/files/config.c index 033f5a9..1eb151b 100644 --- a/src/files/config.c +++ b/src/files/config.c @@ -43,7 +43,6 @@ uint8_t ARC_CSV_Read(ARC_Config *config, ARC_String *string, void **value){ uint32_t index = 0; for(uint32_t y = 0; y < height; y++){ uint32_t width = 0; - uint32_t data = 0; uint32_t x = 0; for(uint32_t i = index; i < fileData->length; i++){ diff --git a/src/graphics/sdl/sprite.c b/src/graphics/sdl/sprite.c index c50f92a..142c97b 100644 --- a/src/graphics/sdl/sprite.c +++ b/src/graphics/sdl/sprite.c @@ -28,7 +28,6 @@ void ARC_Sprite_Copy(ARC_Sprite **newSprite, ARC_Sprite *oldSprite){ } void ARC_Sprite_Render(ARC_Sprite *sprite, ARC_Renderer *renderer, ARC_Rect *renderBounds){ - ARC_Rect *temp = (ARC_Rect *)sprite->frames->data + *sprite->frameIndex; SDL_RenderCopy(renderer->renderer, sprite->spritesheet->texture, (SDL_Rect *)sprite->frames->data + *sprite->frameIndex, (SDL_Rect *)renderBounds); } From edaddeb1093140a9340dbf51ae0ab5ec8879fccf Mon Sep 17 00:00:00 2001 From: herbglitch Date: Mon, 30 Jan 2023 23:23:03 -0700 Subject: [PATCH 04/13] added vector2.c --- src/math/vector2.c | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 src/math/vector2.c diff --git a/src/math/vector2.c b/src/math/vector2.c new file mode 100644 index 0000000..c63bdf0 --- /dev/null +++ b/src/math/vector2.c @@ -0,0 +1,8 @@ +#include "arc/math/vector2.h" +#include + +void ARC_Vector2_Normalize(ARC_Vector2 *vector){ + float length = sqrtf((vector->x * vector->x) + (vector->y * vector->y)); + vector->x /= length; + vector->y /= length; +} \ No newline at end of file From 0d9cf0f7f5c0baffb6d1f06b8f3918c6dcc72a2a Mon Sep 17 00:00:00 2001 From: herbglitch Date: Sun, 19 Feb 2023 12:11:33 -0700 Subject: [PATCH 05/13] added rotation to vector2 --- include/arc/math/vector2.h | 13 +++++++++++++ src/math/vector2.c | 6 ++++++ 2 files changed, 19 insertions(+) diff --git a/include/arc/math/vector2.h b/include/arc/math/vector2.h index 11893bf..ba98114 100644 --- a/include/arc/math/vector2.h +++ b/include/arc/math/vector2.h @@ -13,8 +13,21 @@ typedef struct ARC_DVector2 { double x, y; } ARC_DVector2; +/** + * @brief normalizes a given ARC_Vector2 + * + * @param vector the ARC_Vecotr2 to normallize +*/ void ARC_Vector2_Normalize(ARC_Vector2 *vector); +/** + * @brief rotates a given ARC_Vector2 by a given angle in degrees + * + * @param vector the ARC_Vector2 to rotate + * @param angle the angle in degrees to rotate by +*/ +void ARC_Vector2_RotateDegree(ARC_Vector2 *vector, float angle); + #ifdef __cplusplus } #endif diff --git a/src/math/vector2.c b/src/math/vector2.c index c63bdf0..c0fdabe 100644 --- a/src/math/vector2.c +++ b/src/math/vector2.c @@ -5,4 +5,10 @@ void ARC_Vector2_Normalize(ARC_Vector2 *vector){ float length = sqrtf((vector->x * vector->x) + (vector->y * vector->y)); vector->x /= length; vector->y /= length; +} + +void ARC_Vector2_RotateDegree(ARC_Vector2 *vector, float angle){ + ARC_Vector2 temp = *vector; + vector->x = (temp.x * cos(angle)) - (temp.y * sin(angle)); + vector->y = (temp.x * sin(angle)) + (temp.y * cos(angle)); } \ No newline at end of file From b2055f667c8daef3468df63e1eb77a9651bdd643 Mon Sep 17 00:00:00 2001 From: herbglitch Date: Thu, 23 Feb 2023 00:07:18 -0700 Subject: [PATCH 06/13] added fill to rect, and returns when ARC_Config_Get has a null temp value --- include/arc/graphics/rectangle.h | 2 ++ src/graphics/sdl/rectangle.c | 5 +++++ src/std/config.c | 6 ++++++ 3 files changed, 13 insertions(+) diff --git a/include/arc/graphics/rectangle.h b/include/arc/graphics/rectangle.h index 6a4fc8b..1dea87d 100644 --- a/include/arc/graphics/rectangle.h +++ b/include/arc/graphics/rectangle.h @@ -12,6 +12,8 @@ extern "C" { void ARC_Rect_Render(ARC_Rect *rect, ARC_Renderer *renderer, ARC_Color *color); +void ARC_Rect_RenderFill(ARC_Rect *rect, ARC_Renderer *renderer, ARC_Color *color); + #ifdef __cplusplus } #endif diff --git a/src/graphics/sdl/rectangle.c b/src/graphics/sdl/rectangle.c index 074d3d3..9497eb0 100644 --- a/src/graphics/sdl/rectangle.c +++ b/src/graphics/sdl/rectangle.c @@ -8,4 +8,9 @@ void ARC_Rect_Render(ARC_Rect *rect, ARC_Renderer *renderer, ARC_Color *color){ SDL_RenderDrawRect(renderer->renderer, (SDL_Rect *) rect); } +void ARC_Rect_RenderFill(ARC_Rect *rect, ARC_Renderer *renderer, ARC_Color *color){ + SDL_SetRenderDrawColor(renderer->renderer, color->r, color->g, color->b, color->a); + SDL_RenderFillRect(renderer->renderer, (SDL_Rect *) rect); +} + #endif // ARC_SDL \ No newline at end of file diff --git a/src/std/config.c b/src/std/config.c index 86a7702..ade3198 100644 --- a/src/std/config.c +++ b/src/std/config.c @@ -156,6 +156,12 @@ void ARC_Config_Get(ARC_Config *config, ARC_String *keyname, void **value){ if(group){ ARC_String_Destroy(group); } + + if(temp == NULL){ + *value = NULL; + return; + } + *value = temp->data; return; } From 7fe9d6d491160a5126d8d83c5b9fd339cc144484 Mon Sep 17 00:00:00 2001 From: herbglitch Date: Thu, 23 Feb 2023 16:31:18 -0700 Subject: [PATCH 07/13] added scrollY functions --- include/arc/input/mouse.h | 2 ++ include/arc/input/sdl/mouse.h | 2 +- src/input/sdl/mouse.c | 18 ++++++++++++------ 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/include/arc/input/mouse.h b/include/arc/input/mouse.h index e857cbf..a7e20d5 100644 --- a/include/arc/input/mouse.h +++ b/include/arc/input/mouse.h @@ -6,6 +6,7 @@ extern "C" { #endif #include "arc/math/point.h" +#include typedef struct ARC_Mouse ARC_Mouse; @@ -32,6 +33,7 @@ void ARC_Mouse_Destroy(ARC_Mouse *mouse); void ARC_Mouse_Update(ARC_Mouse *mouse); ARC_Point *ARC_Mouse_GetCoords(ARC_Mouse *mouse); ARC_MouseState ARC_Mouse_GetState(ARC_Mouse *mouse, ARC_MouseButton button); +int32_t *ARC_Mouse_GetScrollY(ARC_Mouse *mouse); #ifdef __cplusplus } diff --git a/include/arc/input/sdl/mouse.h b/include/arc/input/sdl/mouse.h index 1acea38..0f1e971 100644 --- a/include/arc/input/sdl/mouse.h +++ b/include/arc/input/sdl/mouse.h @@ -9,7 +9,7 @@ struct ARC_Mouse { SDL_Event *event; ARC_Point *coords; - int32_t *scroll; + int32_t *scrollY; ARC_MouseState *buttons; uint8_t *buttonsReleased; diff --git a/src/input/sdl/mouse.c b/src/input/sdl/mouse.c index 0a132b7..230b053 100644 --- a/src/input/sdl/mouse.c +++ b/src/input/sdl/mouse.c @@ -12,13 +12,13 @@ void ARC_Mouse_Create(ARC_Mouse **mouse, ARC_MouseInfo *info){ *mouse = (ARC_Mouse *)malloc(sizeof(ARC_Mouse)); (*mouse)->event = info->event; (*mouse)->coords = (ARC_Point *)malloc(sizeof(ARC_Point)); - (*mouse)->scroll = (int32_t *)malloc(sizeof(int32_t )); + (*mouse)->scrollY = (int32_t *)malloc(sizeof(int32_t )); (*mouse)->buttons = (ARC_MouseState *)malloc(sizeof(ARC_MouseState) * ARC_MOUSE_BUTTON_NUM); (*mouse)->buttonsReleased = (uint8_t *)malloc(sizeof(uint8_t)); - *(*mouse)->coords = (ARC_Point){0, 0}; - *(*mouse)->scroll = 0; + *(*mouse)->coords = (ARC_Point){0, 0}; + *(*mouse)->scrollY = 0; for(uint8_t i = 0; i < ARC_MOUSE_BUTTON_NUM; i++){ (*mouse)->buttons[i] = ARC_MOUSE_NONE; @@ -31,7 +31,7 @@ void ARC_Mouse_Destroy(ARC_Mouse *mouse){ free(mouse->buttonsReleased); free(mouse->buttons); - free(mouse->scroll ); + free(mouse->scrollY); free(mouse->coords ); free(mouse); @@ -58,9 +58,9 @@ void ARC_Mouse_UpdateButton(ARC_Mouse *mouse, uint8_t button, uint32_t *buttons, } void ARC_Mouse_Update(ARC_Mouse *mouse){ - *mouse->scroll = 0; + *mouse->scrollY = 0; if(mouse->event->type == SDL_MOUSEWHEEL){ - *mouse->scroll = mouse->event->wheel.y; + *mouse->scrollY = mouse->event->wheel.y; } uint32_t buttons = SDL_GetMouseState(&(mouse->coords->x), &(mouse->coords->y)); @@ -89,6 +89,8 @@ void ARC_Mouse_Update(ARC_Mouse *mouse){ ARC_Mouse_UpdateButton(mouse, ARC_MOUSE_RIGHT , &buttons, SDL_BUTTON_RMASK ); ARC_Mouse_UpdateButton(mouse, ARC_MOUSE_X1 , &buttons, SDL_BUTTON_X1MASK); ARC_Mouse_UpdateButton(mouse, ARC_MOUSE_X2 , &buttons, SDL_BUTTON_X2MASK); + + } ARC_Point *ARC_Mouse_GetCoords(ARC_Mouse *mouse){ @@ -99,4 +101,8 @@ ARC_MouseState ARC_Mouse_GetState(ARC_Mouse *mouse, ARC_MouseButton button){ return mouse->buttons[button]; } +int32_t *ARC_Mouse_GetScrollY(ARC_Mouse *mouse){ + return mouse->scrollY; +} + #endif // ARC_SDL \ No newline at end of file From d8378484a77cae6eefc6e2a16fb7bbff7e63837a Mon Sep 17 00:00:00 2001 From: herbglitch Date: Sun, 26 Feb 2023 23:24:38 -0700 Subject: [PATCH 08/13] updated cmakelists, now can be added as subdir and hopefully most of library work done --- CMakeLists.txt | 51 +++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 44 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8a7c993..ecc9c6e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,35 +11,72 @@ endfunction() option(ARCHEUS_STD_DEBUG "Build in debug mode" ON) option(ARCHEUS_STD_DEFAULT_CONFIG "Build with default config keys" ON) +option(ARCHEUS_STD_SDL "Build with SDL" ON) set(ARCHEUS_STD_FLAGS "") if(ARCHEUS_STD_DEBUG) - string(APPEND ARCHEUS_STD_FLAGS "-Wall -Werror -g ") + string(APPEND ARCHEUS_STD_FLAGS "-Wall -Werror -g -ggdb ") endif() if(ARCHEUS_STD_DEFAULT_CONFIG) string(APPEND ARCHEUS_STD_FLAGS "-DARC_DEFAULT_CONFIG ") endif() +if(ARCHEUS_STD_SDL) + find_package(SDL2 REQUIRED) + find_package(SDL2_image REQUIRED) + + string(APPEND ARCHEUS_STD_FLAGS "-DARC_SDL ") +endif() + set(CMAKE_C_FLAGS ${ARCHEUS_STD_FLAGS}) -add_library(archeus_std SHARED) - -target_sources(archeus_std PRIVATE +set(ARCHEUS_STD_SOURCES src/std/config.c -# src/arc_ecs.c + src/std/handler.c src/std/hashtable.c src/std/io.c src/std/string.c src/std/vector.c - src/std/handler.c - src/std/defaults/config.c + + src/math/rectangle.c + src/math/vector2.c + + src/files/config.c + + src/engine/engine.c + src/engine/state.c ) +set(ARCHEUS_STD_SDL_SOURCES + src/input/sdl/keyboard.c + src/input/sdl/mouse.c + + src/graphics/sdl/config.c + src/graphics/sdl/line.c + src/graphics/sdl/rectangle.c + src/graphics/sdl/renderer.c + src/graphics/sdl/sprite.c + src/graphics/sdl/spritesheet.c + src/graphics/sdl/window.c +) + +add_library(archeus_std SHARED + ${ARCHEUS_STD_SOURCES} + ${ARCHEUS_STD_SDL_SOURCES} +) + +# target_sources(archeus_std PRIVATE + # ${ARCHEUS_STD_SOURCES} + # ${ARCHEUS_STD_SDL_SOURCES} +# ) + target_include_directories(archeus_std PRIVATE include + PUBLIC ${SDL2_INCLUDE_DIRS} + PUBLIC ${SDL2IMAGE_INCLUDE_DIRS} ) install(TARGETS archeus_std EXPORT archeus_std_Exports From 706a51945200e36d4eec4a529b0ad76452541ac3 Mon Sep 17 00:00:00 2001 From: herbglitch Date: Fri, 10 Mar 2023 17:34:22 -0700 Subject: [PATCH 09/13] opengl added to engine --- CMakeLists.txt | 69 +++++++++++++++++++---- include/arc/graphics/opengl/renderer.h | 36 ++++++++++++ include/arc/graphics/opengl/sprite.h | 13 +++++ include/arc/graphics/opengl/spritesheet.h | 13 +++++ include/arc/graphics/opengl/window.h | 29 ++++++++++ include/arc/graphics/renderer.h | 5 +- include/arc/graphics/sdl/renderer.h | 9 +-- include/arc/graphics/sdl/sprite.h | 4 +- include/arc/graphics/sdl/spritesheet.h | 4 +- include/arc/graphics/sdl/window.h | 9 +-- include/arc/graphics/window.h | 5 +- include/arc/input/glfw/keyboard.h | 21 +++++++ include/arc/input/glfw/mouse.h | 25 ++++++++ src/engine/engine.c | 34 +++++++---- src/graphics/opengl/config.c | 14 +++++ src/graphics/opengl/line.c | 8 +++ src/graphics/opengl/rectangle.c | 11 ++++ src/graphics/opengl/renderer.c | 55 ++++++++++++++++++ src/graphics/opengl/sprite.c | 29 ++++++++++ src/graphics/opengl/spritesheet.c | 17 ++++++ src/graphics/opengl/window.c | 36 ++++++++++++ src/graphics/sdl/config.c | 2 +- src/graphics/sdl/line.c | 6 +- src/graphics/sdl/rectangle.c | 10 ++-- src/graphics/sdl/renderer.c | 14 ++--- src/graphics/sdl/sprite.c | 6 +- src/graphics/sdl/spritesheet.c | 6 +- src/graphics/sdl/window.c | 8 +-- src/input/glfw/keyboard.c | 22 ++++++++ src/input/glfw/mouse.c | 33 +++++++++++ src/math/rectangle.c | 5 +- 31 files changed, 490 insertions(+), 68 deletions(-) create mode 100644 include/arc/graphics/opengl/renderer.h create mode 100644 include/arc/graphics/opengl/sprite.h create mode 100644 include/arc/graphics/opengl/spritesheet.h create mode 100644 include/arc/graphics/opengl/window.h create mode 100644 include/arc/input/glfw/keyboard.h create mode 100644 include/arc/input/glfw/mouse.h create mode 100644 src/graphics/opengl/config.c create mode 100644 src/graphics/opengl/line.c create mode 100644 src/graphics/opengl/rectangle.c create mode 100644 src/graphics/opengl/renderer.c create mode 100644 src/graphics/opengl/sprite.c create mode 100644 src/graphics/opengl/spritesheet.c create mode 100644 src/graphics/opengl/window.c create mode 100644 src/input/glfw/keyboard.c create mode 100644 src/input/glfw/mouse.c diff --git a/CMakeLists.txt b/CMakeLists.txt index ecc9c6e..939350b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,7 +11,10 @@ endfunction() option(ARCHEUS_STD_DEBUG "Build in debug mode" ON) option(ARCHEUS_STD_DEFAULT_CONFIG "Build with default config keys" ON) -option(ARCHEUS_STD_SDL "Build with SDL" ON) +option(ARCHEUS_STD_SDL "Build with SDL" OFF) +option(ARCHEUS_STD_GLFW "Build with GLFW window" OFF) +option(ARCHEUS_STD_GLEW "Build with GLEW" OFF) +option(ARCHEUS_STD_OPENGL "Build with OpenGL" OFF) set(ARCHEUS_STD_FLAGS "") @@ -30,6 +33,18 @@ if(ARCHEUS_STD_SDL) string(APPEND ARCHEUS_STD_FLAGS "-DARC_SDL ") endif() +if(ARCHEUS_STD_GLFW) + string(APPEND ARCHEUS_STD_FLAGS "-DARC_GLFW ") +endif() + +if(ARCHEUS_STD_GLEW) + string(APPEND ARCHEUS_STD_FLAGS "-DARC_GLEW ") +endif() + +if(ARCHEUS_STD_OPENGL) + string(APPEND ARCHEUS_STD_FLAGS "-DARC_OPENGL") +endif() + set(CMAKE_C_FLAGS ${ARCHEUS_STD_FLAGS}) set(ARCHEUS_STD_SOURCES @@ -63,21 +78,53 @@ set(ARCHEUS_STD_SDL_SOURCES src/graphics/sdl/window.c ) +set(ARCHEUS_STD_OPENGL_SOURCES + src/graphics/opengl/config.c + src/graphics/opengl/line.c + src/graphics/opengl/rectangle.c + src/graphics/opengl/renderer.c + src/graphics/opengl/sprite.c + src/graphics/opengl/spritesheet.c + src/graphics/opengl/window.c +) + +set(ARCHEUS_STD_GLFW_SOURCES + src/input/glfw/keyboard.c + src/input/glfw/mouse.c +) + +if(ARCHEUS_STD_SDL) + list(APPEND ARCHEUS_STD_SOURCES ${ARCHEUS_STD_SDL_SOURCES}) +endif() + +if(ARCHEUS_STD_OPENGL) + list(APPEND ARCHEUS_STD_SOURCES ${ARCHEUS_STD_OPENGL_SOURCES}) +endif() + +if(ARCHEUS_STD_GLFW) + list(APPEND ARCHEUS_STD_SOURCES ${ARCHEUS_STD_GLFW_SOURCES}) +endif() + add_library(archeus_std SHARED ${ARCHEUS_STD_SOURCES} - ${ARCHEUS_STD_SDL_SOURCES} ) -# target_sources(archeus_std PRIVATE - # ${ARCHEUS_STD_SOURCES} - # ${ARCHEUS_STD_SDL_SOURCES} -# ) +if(ARCHEUS_STD_SDL) + target_include_directories(archeus_std PRIVATE + include + PUBLIC ${SDL2_INCLUDE_DIRS} + PUBLIC ${SDL2IMAGE_INCLUDE_DIRS} + ) +endif() -target_include_directories(archeus_std PRIVATE - include - PUBLIC ${SDL2_INCLUDE_DIRS} - PUBLIC ${SDL2IMAGE_INCLUDE_DIRS} -) +if(ARCHEUS_STD_OPENGL) + target_include_directories(archeus_std PRIVATE + include + GL + glfw + GLEW + ) +endif() install(TARGETS archeus_std EXPORT archeus_std_Exports LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} diff --git a/include/arc/graphics/opengl/renderer.h b/include/arc/graphics/opengl/renderer.h new file mode 100644 index 0000000..8a259e5 --- /dev/null +++ b/include/arc/graphics/opengl/renderer.h @@ -0,0 +1,36 @@ +#ifndef ARC_OPENGL_RENDERER_H_ +#define ARC_OPENGL_RENDERER_H_ + +#ifdef ARC_OPENGL + +#ifdef ARC_GLEW +#define GLEW_STATIC +#include +#endif // !ARC_GLEW + +#ifdef ARC_GLFW +#include +#endif + +#include "arc/graphics/renderer.h" +#include "arc/graphics/window.h" + +#ifdef ARC_GLFW +typedef struct ARC_RendererType { + GLFWwindow *window; +} ARC_RendererType; + +/** + * @brief struct for info needed to create opengl renderer + * + * @note this is what needs to be passed into the data parameter for ARC_Renderer_Create + */ +struct ARC_RenderInfo { + GLFWwindow *window; +}; + +#endif // !ARC_GLFW + +#endif // !ARC_OPENGL + +#endif // !ARC_OPENGL_RENDERER_H_ diff --git a/include/arc/graphics/opengl/sprite.h b/include/arc/graphics/opengl/sprite.h new file mode 100644 index 0000000..40f4fe9 --- /dev/null +++ b/include/arc/graphics/opengl/sprite.h @@ -0,0 +1,13 @@ +#ifndef ARC_OPENGL_SPRITE_H_ +#define ARC_OPENGL_SPRITE_H_ + +#ifdef ARC_OPENGL + +#include "arc/graphics/sprite.h" + +struct ARC_Sprite { +}; + +#endif // !ARC_OPENGL + +#endif // !ARC_OPENGL_SPRITE_H_ diff --git a/include/arc/graphics/opengl/spritesheet.h b/include/arc/graphics/opengl/spritesheet.h new file mode 100644 index 0000000..e523a82 --- /dev/null +++ b/include/arc/graphics/opengl/spritesheet.h @@ -0,0 +1,13 @@ +#ifndef ARC_OPENGL_SPRITESHEET_H_ +#define ARC_OPENGL_SPRITESHEET_H_ + +#ifdef ARC_OPENGL + +#include "arc/graphics/spritesheet.h" + +struct ARC_Spritesheet { +}; + +#endif // !ARC_OPENGL + +#endif // !ARC_OPENGL_SPRITESHEET_H_ diff --git a/include/arc/graphics/opengl/window.h b/include/arc/graphics/opengl/window.h new file mode 100644 index 0000000..5ce0a73 --- /dev/null +++ b/include/arc/graphics/opengl/window.h @@ -0,0 +1,29 @@ +#ifndef ARC_OPENGL_WINDOW_H_ +#define ARC_OPENGL_WINDOW_H_ + +#ifdef ARC_GLFW + +#ifdef ARC_GLEW +#define GLEW_STATIC +#include +#endif // !ARC_GLEW + +#include "arc/graphics/window.h" +#include + +typedef GLFWwindow ARC_WindowType; + +/** + * @brief struct for info needed to create a GLFWwindow + * + * @note this is what needs to be passed into the data parameter for ARC_Window_Create + */ +struct ARC_WindowInfo { + char *title; + int w; + int h; +}; + +#endif // !ARC_GLFW + +#endif // !ARC_GLFW_WINDOW_H_ diff --git a/include/arc/graphics/renderer.h b/include/arc/graphics/renderer.h index 692b771..4343046 100644 --- a/include/arc/graphics/renderer.h +++ b/include/arc/graphics/renderer.h @@ -5,7 +5,10 @@ extern "C" { #endif -typedef struct ARC_Renderer ARC_Renderer; +/** + * @note ARC_RendererType is determined by which window library you are using +*/ +typedef struct ARC_RendererType ARC_Renderer; typedef struct ARC_RenderInfo ARC_RenderInfo; diff --git a/include/arc/graphics/sdl/renderer.h b/include/arc/graphics/sdl/renderer.h index 5920b99..124a080 100644 --- a/include/arc/graphics/sdl/renderer.h +++ b/include/arc/graphics/sdl/renderer.h @@ -7,10 +7,7 @@ #include "arc/graphics/renderer.h" #include "arc/graphics/window.h" -// Temp till I figure out a better solution -struct ARC_Renderer { - SDL_Renderer *renderer; -}; +typedef SDL_Renderer ARC_RendererType; /** * @brief struct for info needed to create SDL_Renderer @@ -24,6 +21,6 @@ struct ARC_RenderInfo { Uint32 flags; }; -#endif // ARC_SDL +#endif // !ARC_SDL -#endif // ARC_SDL_RENDERER_H_ +#endif // !ARC_SDL_RENDERER_H_ diff --git a/include/arc/graphics/sdl/sprite.h b/include/arc/graphics/sdl/sprite.h index 97d435f..026190a 100644 --- a/include/arc/graphics/sdl/sprite.h +++ b/include/arc/graphics/sdl/sprite.h @@ -12,6 +12,6 @@ struct ARC_Sprite { uint32_t *frameIndex; }; -#endif // ARC_SDL +#endif // !ARC_SDL -#endif // ARC_SDL_SPRITE_H_ +#endif // !ARC_SDL_SPRITE_H_ diff --git a/include/arc/graphics/sdl/spritesheet.h b/include/arc/graphics/sdl/spritesheet.h index 3804119..97d3d8a 100644 --- a/include/arc/graphics/sdl/spritesheet.h +++ b/include/arc/graphics/sdl/spritesheet.h @@ -11,6 +11,6 @@ struct ARC_Spritesheet { uint32_t *size; }; -#endif // ARC_SDL +#endif // !ARC_SDL -#endif // ARC_SDL_SPRITESHEET_H_ +#endif // !ARC_SDL_SPRITESHEET_H_ diff --git a/include/arc/graphics/sdl/window.h b/include/arc/graphics/sdl/window.h index aebcd64..a6a965c 100644 --- a/include/arc/graphics/sdl/window.h +++ b/include/arc/graphics/sdl/window.h @@ -6,10 +6,7 @@ #include #include "arc/graphics/window.h" -// Temp till I figure out a better solution -struct ARC_Window { - SDL_Window *window; -}; +typedef SDL_Window ARC_WindowType; /** * @brief struct for info needed to create SDL_Window @@ -25,6 +22,6 @@ struct ARC_WindowInfo { Uint32 flags; }; -#endif // ARC_SDL +#endif // !ARC_SDL -#endif // ARC_SDL_WINDOW_H_ +#endif // !ARC_SDL_WINDOW_H_ diff --git a/include/arc/graphics/window.h b/include/arc/graphics/window.h index a6ba8f2..e63acf1 100644 --- a/include/arc/graphics/window.h +++ b/include/arc/graphics/window.h @@ -5,7 +5,10 @@ extern "C" { #endif -typedef struct ARC_Window ARC_Window; +/** + * @note ARC_WindowType is determined by which window library you are using +*/ +typedef struct ARC_WindowType ARC_Window; typedef struct ARC_WindowInfo ARC_WindowInfo; diff --git a/include/arc/input/glfw/keyboard.h b/include/arc/input/glfw/keyboard.h new file mode 100644 index 0000000..932e0b7 --- /dev/null +++ b/include/arc/input/glfw/keyboard.h @@ -0,0 +1,21 @@ +#ifndef ARC_GLFW_KEYBOARD_H_ +#define ARC_GLFW_KEYBOARD_H_ + +#ifdef ARC_GLFW +#include +#include "arc/input/keyboard.h" + +struct ARC_Keyboard { + GLFWwindow *window; + + ARC_KeyboardState *keys; + ARC_KeyboardState *released; +}; + +struct ARC_KeyboardInfo { + GLFWwindow *window; +}; + +#endif // !ARC_GLFW + +#endif // !ARC_GLFW_KEYBOARD_H_ \ No newline at end of file diff --git a/include/arc/input/glfw/mouse.h b/include/arc/input/glfw/mouse.h new file mode 100644 index 0000000..f013894 --- /dev/null +++ b/include/arc/input/glfw/mouse.h @@ -0,0 +1,25 @@ +#ifndef ARC_GLFW_MOUSE_H_ +#define ARC_GLFW_MOUSE_H_ + +#ifdef ARC_GLFW +#include +#include "arc/input/mouse.h" +#include "arc/math/point.h" + +struct ARC_Mouse { + GLFWwindow *window; + + ARC_Point *coords; + int32_t *scrollY; + + ARC_MouseState *buttons; + uint8_t *buttonsReleased; +}; + +struct ARC_MouseInfo { + GLFWwindow *window; +}; + +#endif // !ARC_GLFW + +#endif // !ARC_GLFW_MOUSE_H_ \ No newline at end of file diff --git a/src/engine/engine.c b/src/engine/engine.c index f080c7f..650c7b8 100644 --- a/src/engine/engine.c +++ b/src/engine/engine.c @@ -1,5 +1,4 @@ #include "arc/engine/engine.h" -#include #include #include "arc/engine/state.h" #include "arc/graphics/window.h" @@ -12,11 +11,19 @@ //NOTE: some of this file is temporary, mostly to get smthn running so I can test out different ideas #ifdef ARC_SDL #include +#include #include "arc/graphics/sdl/window.h" #include "arc/graphics/sdl/renderer.h" #include "arc/input/sdl/mouse.h" #include "arc/input/sdl/keyboard.h" -#endif // ARC_SDL +#elif ARC_OPENGL +#include "arc/graphics/opengl/window.h" +#include "arc/graphics/opengl/renderer.h" +#ifdef ARC_GLFW +#include "arc/input/glfw/mouse.h" +#include "arc/input/glfw/keyboard.h" +#endif // ARC_GLFW +#endif void ARC_EngineData_Create(ARC_EngineData **data, ARC_Handler_CleanDataFn cleanfn, ARC_Point windowSize){ *data = (ARC_EngineData *)malloc(sizeof(ARC_EngineData)); @@ -35,6 +42,8 @@ void ARC_EngineData_Create(ARC_EngineData **data, ARC_Handler_CleanDataFn cleanf #ifdef ARC_SDL windowInfo = (ARC_WindowInfo){ "title", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, (*data)->windowSize.x, (*data)->windowSize.y, 0 }; +#elif ARC_GLFW + windowInfo = (ARC_WindowInfo){ "title", (*data)->windowSize.x, (*data)->windowSize.y }; #endif // ARC_SDL ARC_Window_Create(&((*data)->window), &windowInfo); @@ -44,7 +53,9 @@ void ARC_EngineData_Create(ARC_EngineData **data, ARC_Handler_CleanDataFn cleanf } #ifdef ARC_SDL - renderInfo = (ARC_RenderInfo){ (SDL_Window *)(*data)->window->window, -1, SDL_RENDERER_ACCELERATED }; + renderInfo = (ARC_RenderInfo){ (SDL_Window *)(*data)->window, -1, SDL_RENDERER_ACCELERATED }; +#elif ARC_GLFW + renderInfo = (ARC_RenderInfo){ (GLFWwindow *)(*data)->window }; #endif // ARC_SDL ARC_Renderer_Create(&((*data)->renderer), &renderInfo); @@ -57,10 +68,12 @@ void ARC_EngineData_Create(ARC_EngineData **data, ARC_Handler_CleanDataFn cleanf SDL_Event *event = (SDL_Event *)malloc(sizeof(SDL_Event)); mouseInfo = (ARC_MouseInfo ){ event }; keyboardInfo = (ARC_KeyboardInfo){ event }; +#elif ARC_GLFW + mouseInfo = (ARC_MouseInfo ){ (GLFWwindow *)(*data)->window }; + keyboardInfo = (ARC_KeyboardInfo){ (GLFWwindow *)(*data)->window }; #endif // ARC_SDL - ARC_Mouse_Create(&((*data)->mouse), &mouseInfo); - + ARC_Mouse_Create (&((*data)->mouse) , &mouseInfo ); ARC_Keyboard_Create(&((*data)->keyboard), &keyboardInfo); } @@ -83,11 +96,10 @@ void ARC_Engine_Run(ARC_EngineData *data){ #ifdef ARC_SDL SDL_Event *event = data->mouse->event; + double lastTime = 0, currentTime; + data->dt = 0; #endif // ARC_SDL - double lastTime = 0, currentTime; - - data->dt = 0; data->running = 0; while(!data->running){ @@ -97,8 +109,10 @@ void ARC_Engine_Run(ARC_EngineData *data){ lastTime = currentTime; SDL_PollEvent(data->mouse->event); - if(event->type == SDL_QUIT){ return; } - if(event->type == SDL_KEYDOWN && event->key.keysym.sym == SDLK_ESCAPE){ return; } + if(event->type == SDL_QUIT){ data->running = 1; } +#elif ARC_GLFW + glfwPollEvents(); + data->running = glfwWindowShouldClose((GLFWwindow *)data->window); #endif // ARC_SDL ARC_Mouse_Update(data->mouse); diff --git a/src/graphics/opengl/config.c b/src/graphics/opengl/config.c new file mode 100644 index 0000000..2cf1ad8 --- /dev/null +++ b/src/graphics/opengl/config.c @@ -0,0 +1,14 @@ +#ifdef ARC_OPENGL + +#include +#include "arc/std/config.h" +#include "arc/std/string.h" +#include "arc/std/errno.h" + +#include "arc/graphics/opengl/renderer.h" + + +void ARC_GraphicsConfig_Init(ARC_Config *config, ARC_Renderer *renderer){ +} + +#endif // ARC_OPENGL \ No newline at end of file diff --git a/src/graphics/opengl/line.c b/src/graphics/opengl/line.c new file mode 100644 index 0000000..dba479a --- /dev/null +++ b/src/graphics/opengl/line.c @@ -0,0 +1,8 @@ +#ifdef ARC_OPENGL +#include "arc/graphics/line.h" +#include + +void ARC_Line_Render(int32_t *x1, int32_t *y1, int32_t *x2, int32_t *y2, ARC_Renderer *renderer, ARC_Color *color){ +} + +#endif // ARC_OPENGL \ No newline at end of file diff --git a/src/graphics/opengl/rectangle.c b/src/graphics/opengl/rectangle.c new file mode 100644 index 0000000..2a6e4c8 --- /dev/null +++ b/src/graphics/opengl/rectangle.c @@ -0,0 +1,11 @@ +#ifdef ARC_OPENGL +#include "arc/graphics/rectangle.h" +#include + +void ARC_Rect_Render(ARC_Rect *rect, ARC_Renderer *renderer, ARC_Color *color){ +} + +void ARC_Rect_RenderFill(ARC_Rect *rect, ARC_Renderer *renderer, ARC_Color *color){ +} + +#endif // ARC_OPENGL \ No newline at end of file diff --git a/src/graphics/opengl/renderer.c b/src/graphics/opengl/renderer.c new file mode 100644 index 0000000..bec8808 --- /dev/null +++ b/src/graphics/opengl/renderer.c @@ -0,0 +1,55 @@ +#ifdef ARC_OPENGL +#include "arc/graphics/renderer.h" +#include "arc/graphics/opengl/renderer.h" + +#ifdef ARC_GLEW +#define GLEW_STATIC +#include +#endif // ARC_GLEW + +#ifdef ARC_GLFW +#include +#endif + +#include "arc/graphics/window.h" +#include "arc/std/errno.h" +#include + +void ARC_Renderer_Create(ARC_Renderer **renderer, ARC_RenderInfo *info){ + if(!info){ + arc_errno = ARC_ERRNO_NULL; + ARC_DEBUG_ERR("ARC_Renderer_Create(**renderer, NULL)"); + return; + } + +#ifdef ARC_GLFW + *renderer = (ARC_Renderer *)malloc(sizeof(ARC_Renderer)); + (*renderer)->window = info->window; + + + glewExperimental = GL_TRUE; + if(glewInit() != GLEW_OK){ + ARC_DEBUG_ERR("ARC_Renderer_Create(**renderer, info), GLEW failed to init"); + glfwTerminate(); + arc_errno = ARC_ERRNO_INIT; + } +#endif // ARC_GLEW + + glClearColor(0.23f, 0.38f, 0.47f, 1.0f); +} + +void ARC_Renderer_Destroy(ARC_Renderer *renderer){ + free(renderer); +} + +void ARC_Renderer_Clear(ARC_Renderer *renderer){ + glClear(GL_COLOR_BUFFER_BIT); +} + +void ARC_Renderer_Render(ARC_Renderer *renderer){ +#ifdef ARC_GLFW + glfwSwapBuffers(renderer->window); +#endif // ARC_GLEW +} + +#endif //ARC_SDL diff --git a/src/graphics/opengl/sprite.c b/src/graphics/opengl/sprite.c new file mode 100644 index 0000000..64d3b88 --- /dev/null +++ b/src/graphics/opengl/sprite.c @@ -0,0 +1,29 @@ +#ifdef ARC_OPENGL +#include "arc/graphics/sprite.h" +#include "arc/math/point.h" +#include "arc/math/rectangle.h" +#include + +void ARC_Sprite_Create(ARC_Sprite **sprite, ARC_Spritesheet *spritesheet, ARC_Array *frames){ +} + +void ARC_Sprite_Destroy(ARC_Sprite *sprite){ +} + +void ARC_Sprite_Copy(ARC_Sprite **newSprite, ARC_Sprite *oldSprite){ +} + +void ARC_Sprite_Render(ARC_Sprite *sprite, ARC_Renderer *renderer, ARC_Rect *renderBounds){ +} + +void ARC_Sprite_RenderRotated(ARC_Sprite *sprite, ARC_Renderer *renderer, ARC_Rect *renderBounds, ARC_Point *center, double angle){ +} + +void ARC_Sprite_IterateFrame(ARC_Sprite *sprite){ +} + +ARC_Rect *ARC_Sprite_GetBounds(ARC_Sprite *sprite){ + return NULL; +} + +#endif // ARC_OPENGL \ No newline at end of file diff --git a/src/graphics/opengl/spritesheet.c b/src/graphics/opengl/spritesheet.c new file mode 100644 index 0000000..a477045 --- /dev/null +++ b/src/graphics/opengl/spritesheet.c @@ -0,0 +1,17 @@ +#ifdef ARC_OPENGL +#include "arc/graphics/spritesheet.h" +#include "arc/math/point.h" +#include + +void ARC_Spritesheet_RenderArea(ARC_Spritesheet *spritesheet, ARC_Rect *sheetBounds, ARC_Renderer *renderer, ARC_Rect *renderBounds){ +} + +ARC_Point ARC_Spritesheet_GetSize(ARC_Spritesheet *spritesheet){ + return (ARC_Point){0, 0}; +} + +uint32_t *ARC_Spritesheet_GetTileSize(ARC_Spritesheet *spritesheet){ + return NULL; +} + +#endif // ARC_OPENGL \ No newline at end of file diff --git a/src/graphics/opengl/window.c b/src/graphics/opengl/window.c new file mode 100644 index 0000000..68e165a --- /dev/null +++ b/src/graphics/opengl/window.c @@ -0,0 +1,36 @@ +#ifdef ARC_GLFW +#include "arc/graphics/window.h" +#include "arc/graphics/opengl/window.h" + +#include "arc/std/errno.h" +#include +#include + +void framebufferSizeCallback(GLFWwindow *window, int width, int height){ + glViewport(0, 0, width, height); +} + +void ARC_Window_Create(ARC_Window **window, ARC_WindowInfo *info){ + glfwInit(); + glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); + glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); + glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); + glfwWindowHint(GLFW_FLOATING, GLFW_TRUE); + + *window = (ARC_Window *) glfwCreateWindow(info->w, info->h, "learnopengl window", NULL, NULL); + if(*window == NULL){ + printf("Failed to create GLFW window\n"); + glfwTerminate(); + arc_errno = ARC_ERRNO_NULL; + } + + glfwMakeContextCurrent((GLFWwindow *)*window); + glViewport(0, 0, info->w, info->h); + glfwSetFramebufferSizeCallback((GLFWwindow *)*window, framebufferSizeCallback); +} + +void ARC_Window_Destroy(ARC_Window *window){ + glfwTerminate(); +} + +#endif //ARC_GLFW diff --git a/src/graphics/sdl/config.c b/src/graphics/sdl/config.c index 1ab1790..e03b21b 100644 --- a/src/graphics/sdl/config.c +++ b/src/graphics/sdl/config.c @@ -34,7 +34,7 @@ void ARC_Spritesheet_Delete(ARC_Config *config, ARC_String *string, void *value) void ARC_Sprite_Delete (ARC_Config *config, ARC_String *string, void *value); void ARC_GraphicsConfig_Init(ARC_Config *config, ARC_Renderer *renderer){ - global_renderer = renderer->renderer; + global_renderer = (SDL_Renderer *)renderer; ARC_Config_AddKeyCString(config, (char *)"ARC_Point" , 9, ARC_Point_Read , ARC_Point_Delete ); ARC_Config_AddKeyCString(config, (char *)"ARC_Rect" , 8, ARC_Rect_Read , ARC_Rect_Delete ); ARC_Config_AddKeyCString(config, (char *)"ARC_Rect[]" , 10, ARC_RectArray_Read , ARC_RectArray_Delete ); diff --git a/src/graphics/sdl/line.c b/src/graphics/sdl/line.c index 65c242e..4077768 100644 --- a/src/graphics/sdl/line.c +++ b/src/graphics/sdl/line.c @@ -1,11 +1,11 @@ -#include "arc/graphics/line.h" #ifdef ARC_SDL +#include "arc/graphics/line.h" #include "arc/graphics/sdl/renderer.h" #include void ARC_Line_Render(int32_t *x1, int32_t *y1, int32_t *x2, int32_t *y2, ARC_Renderer *renderer, ARC_Color *color){ - SDL_SetRenderDrawColor(renderer->renderer, color->r, color->g, color->b, color->a); - SDL_RenderDrawLine(renderer->renderer, *x1, *y1, *x2, *y2); + SDL_SetRenderDrawColor((SDL_Renderer *)renderer, color->r, color->g, color->b, color->a); + SDL_RenderDrawLine((SDL_Renderer *)renderer, *x1, *y1, *x2, *y2); } #endif // ARC_SDL \ No newline at end of file diff --git a/src/graphics/sdl/rectangle.c b/src/graphics/sdl/rectangle.c index 9497eb0..79d5f32 100644 --- a/src/graphics/sdl/rectangle.c +++ b/src/graphics/sdl/rectangle.c @@ -1,16 +1,16 @@ -#include "arc/graphics/rectangle.h" #ifdef ARC_SDL +#include "arc/graphics/rectangle.h" #include "arc/graphics/sdl/renderer.h" #include void ARC_Rect_Render(ARC_Rect *rect, ARC_Renderer *renderer, ARC_Color *color){ - SDL_SetRenderDrawColor(renderer->renderer, color->r, color->g, color->b, color->a); - SDL_RenderDrawRect(renderer->renderer, (SDL_Rect *) rect); + SDL_SetRenderDrawColor((SDL_Renderer *)renderer, color->r, color->g, color->b, color->a); + SDL_RenderDrawRect((SDL_Renderer *)renderer, (SDL_Rect *) rect); } void ARC_Rect_RenderFill(ARC_Rect *rect, ARC_Renderer *renderer, ARC_Color *color){ - SDL_SetRenderDrawColor(renderer->renderer, color->r, color->g, color->b, color->a); - SDL_RenderFillRect(renderer->renderer, (SDL_Rect *) rect); + SDL_SetRenderDrawColor((SDL_Renderer *)renderer, color->r, color->g, color->b, color->a); + SDL_RenderFillRect((SDL_Renderer *)renderer, (SDL_Rect *) rect); } #endif // ARC_SDL \ No newline at end of file diff --git a/src/graphics/sdl/renderer.c b/src/graphics/sdl/renderer.c index ac6ea8a..cfb8de6 100644 --- a/src/graphics/sdl/renderer.c +++ b/src/graphics/sdl/renderer.c @@ -14,10 +14,9 @@ void ARC_Renderer_Create(ARC_Renderer **renderer, ARC_RenderInfo *info){ return; } - *renderer = (ARC_Renderer *)malloc(sizeof(ARC_Renderer)); - (*renderer)->renderer = SDL_CreateRenderer((SDL_Window *)info->window, info->index, info->flags); + *renderer = (ARC_Renderer *)SDL_CreateRenderer((SDL_Window *)info->window, info->index, info->flags); - if(!(*renderer)->renderer){ + if(!*renderer){ arc_errno = ARC_ERRNO_NULL; ARC_DEBUG_LOG(arc_errno, "SDL_CreateRenderer(%p, %d, %u);", info->window, info->index, info->flags); free(renderer); @@ -25,17 +24,16 @@ void ARC_Renderer_Create(ARC_Renderer **renderer, ARC_RenderInfo *info){ } void ARC_Renderer_Destroy(ARC_Renderer *renderer){ - SDL_DestroyRenderer((SDL_Renderer *) renderer->renderer); - free(renderer); + SDL_DestroyRenderer((SDL_Renderer *) renderer); } void ARC_Renderer_Clear(ARC_Renderer *renderer){ - SDL_SetRenderDrawColor((SDL_Renderer *)renderer->renderer, 0x1c, 0x2c, 0x3c, 0x00); - SDL_RenderClear((SDL_Renderer *)renderer->renderer); + SDL_SetRenderDrawColor((SDL_Renderer *)renderer, 0x1c, 0x2c, 0x3c, 0x00); + SDL_RenderClear((SDL_Renderer *)renderer); } void ARC_Renderer_Render(ARC_Renderer *renderer){ - SDL_RenderPresent((SDL_Renderer *)renderer->renderer); + SDL_RenderPresent((SDL_Renderer *)renderer); } #endif //ARC_SDL diff --git a/src/graphics/sdl/sprite.c b/src/graphics/sdl/sprite.c index 142c97b..82e802e 100644 --- a/src/graphics/sdl/sprite.c +++ b/src/graphics/sdl/sprite.c @@ -1,5 +1,5 @@ -#include "arc/graphics/sprite.h" #ifdef ARC_SDL +#include "arc/graphics/sprite.h" #include "arc/graphics/sdl/sprite.h" #include "arc/graphics/sdl/spritesheet.h" #include "arc/graphics/sdl/renderer.h" @@ -28,11 +28,11 @@ void ARC_Sprite_Copy(ARC_Sprite **newSprite, ARC_Sprite *oldSprite){ } void ARC_Sprite_Render(ARC_Sprite *sprite, ARC_Renderer *renderer, ARC_Rect *renderBounds){ - SDL_RenderCopy(renderer->renderer, sprite->spritesheet->texture, (SDL_Rect *)sprite->frames->data + *sprite->frameIndex, (SDL_Rect *)renderBounds); + SDL_RenderCopy((SDL_Renderer *)renderer, sprite->spritesheet->texture, (SDL_Rect *)sprite->frames->data + *sprite->frameIndex, (SDL_Rect *)renderBounds); } void ARC_Sprite_RenderRotated(ARC_Sprite *sprite, ARC_Renderer *renderer, ARC_Rect *renderBounds, ARC_Point *center, double angle){ - SDL_RenderCopyEx(renderer->renderer, sprite->spritesheet->texture, (SDL_Rect *)sprite->frames->data + *sprite->frameIndex, (SDL_Rect *)renderBounds, angle, (SDL_Point *)center, SDL_FLIP_NONE); + SDL_RenderCopyEx((SDL_Renderer *)renderer, sprite->spritesheet->texture, (SDL_Rect *)sprite->frames->data + *sprite->frameIndex, (SDL_Rect *)renderBounds, angle, (SDL_Point *)center, SDL_FLIP_NONE); } void ARC_Sprite_IterateFrame(ARC_Sprite *sprite){ diff --git a/src/graphics/sdl/spritesheet.c b/src/graphics/sdl/spritesheet.c index a109b46..5f7d2a1 100644 --- a/src/graphics/sdl/spritesheet.c +++ b/src/graphics/sdl/spritesheet.c @@ -1,3 +1,4 @@ +#ifdef ARC_SDL #include "arc/graphics/spritesheet.h" #include "arc/graphics/sdl/spritesheet.h" #include "arc/graphics/sdl/renderer.h" @@ -5,7 +6,7 @@ #include void ARC_Spritesheet_RenderArea(ARC_Spritesheet *spritesheet, ARC_Rect *sheetBounds, ARC_Renderer *renderer, ARC_Rect *renderBounds){ - SDL_RenderCopy(renderer->renderer, spritesheet->texture, (SDL_Rect *)sheetBounds, (SDL_Rect *)renderBounds); + SDL_RenderCopy((SDL_Renderer *)renderer, spritesheet->texture, (SDL_Rect *)sheetBounds, (SDL_Rect *)renderBounds); } ARC_Point ARC_Spritesheet_GetSize(ARC_Spritesheet *spritesheet){ @@ -16,4 +17,5 @@ ARC_Point ARC_Spritesheet_GetSize(ARC_Spritesheet *spritesheet){ uint32_t *ARC_Spritesheet_GetTileSize(ARC_Spritesheet *spritesheet){ return spritesheet->size; -} \ No newline at end of file +} +#endif //ARC_SDL \ No newline at end of file diff --git a/src/graphics/sdl/window.c b/src/graphics/sdl/window.c index c9ed8b8..2bdf9b8 100644 --- a/src/graphics/sdl/window.c +++ b/src/graphics/sdl/window.c @@ -18,10 +18,9 @@ void ARC_Window_Create(ARC_Window **window, ARC_WindowInfo *info){ return; } - *window = (ARC_Window *)malloc(sizeof(ARC_Window)); - (*window)->window = SDL_CreateWindow((const char *)info->title, info->x, info->y, info->w, info->h, info->flags); + *window = (ARC_Window *)SDL_CreateWindow((const char *)info->title, info->x, info->y, info->w, info->h, info->flags); - if(!(*window)->window){ + if(!*window){ arc_errno = ARC_ERRNO_NULL; ARC_DEBUG_LOG(arc_errno, "SDL_CreateWindow(%s, %d, %d, %d, %d, %x);", info->title, info->x, info->y, info->w, info->h, info->flags); free(window); @@ -29,8 +28,7 @@ void ARC_Window_Create(ARC_Window **window, ARC_WindowInfo *info){ } void ARC_Window_Destroy(ARC_Window *window){ - SDL_DestroyWindow((SDL_Window *) window->window); - free(window); + SDL_DestroyWindow((SDL_Window *) window); } #endif //ARC_SDL diff --git a/src/input/glfw/keyboard.c b/src/input/glfw/keyboard.c new file mode 100644 index 0000000..1adecfd --- /dev/null +++ b/src/input/glfw/keyboard.c @@ -0,0 +1,22 @@ +#ifdef ARC_GLFW +#include "arc/input/glfw/keyboard.h" +#include "arc/input/keyboard.h" +#include "arc/math/point.h" +#include "arc/std/errno.h" +#include +#include + +void ARC_Keyboard_Create(ARC_Keyboard **keyboard, ARC_KeyboardInfo *info){ +} + +void ARC_Keyboard_Destroy(ARC_Keyboard *keyboard){ +} + +void ARC_Keyboard_Update(ARC_Keyboard *keyboard){ +} + +ARC_KeyboardState ARC_Keyboard_GetState(ARC_Keyboard *keyboard, uint8_t key){ + return ARC_KEY_NONE; +} + +#endif // ARC_GLFW \ No newline at end of file diff --git a/src/input/glfw/mouse.c b/src/input/glfw/mouse.c new file mode 100644 index 0000000..129db7e --- /dev/null +++ b/src/input/glfw/mouse.c @@ -0,0 +1,33 @@ +#ifdef ARC_GLFW +#include "arc/input/glfw/mouse.h" +#include "arc/input/mouse.h" +#include "arc/math/point.h" +#include "arc/std/errno.h" +#include +#include + +void ARC_Mouse_Create(ARC_Mouse **mouse, ARC_MouseInfo *info){ +} + +void ARC_Mouse_Destroy(ARC_Mouse *mouse){ +} + +void ARC_Mouse_UpdateButton(ARC_Mouse *mouse, uint8_t button, uint32_t *buttons, uint32_t mask){ +} + +void ARC_Mouse_Update(ARC_Mouse *mouse){ +} + +ARC_Point *ARC_Mouse_GetCoords(ARC_Mouse *mouse){ + return mouse->coords; +} + +ARC_MouseState ARC_Mouse_GetState(ARC_Mouse *mouse, ARC_MouseButton button){ + return mouse->buttons[button]; +} + +int32_t *ARC_Mouse_GetScrollY(ARC_Mouse *mouse){ + return mouse->scrollY; +} + +#endif // ARC_SDL \ No newline at end of file diff --git a/src/math/rectangle.c b/src/math/rectangle.c index 897f969..71c5897 100644 --- a/src/math/rectangle.c +++ b/src/math/rectangle.c @@ -1,7 +1,7 @@ #include "arc/math/rectangle.h" //VERY TEMP -#include +// #include int32_t ARC_Rect_Intersects(ARC_Rect *rect1, ARC_Rect *rect2){ if(rect1->x <= rect2->x + rect2->w && rect1->x + rect1->w >= rect2->x && @@ -13,6 +13,7 @@ int32_t ARC_Rect_Intersects(ARC_Rect *rect1, ARC_Rect *rect2){ int32_t ARC_Rect_LineIntersects(ARC_Rect *rect, int32_t *x1, int32_t *y1, int32_t *x2, int32_t *y2){ //TODO: Replace soon - return SDL_IntersectRectAndLine((SDL_Rect *) rect, x1, y1, x2, y2); + // return SDL_IntersectRectAndLine((SDL_Rect *) rect, x1, y1, x2, y2); + return 1; } From 22be02259a49b4fc433922c048fc0e7c3e5f43a6 Mon Sep 17 00:00:00 2001 From: herbglitch Date: Fri, 10 Mar 2023 17:44:30 -0700 Subject: [PATCH 10/13] added libpng for mingw --- CMakeLists.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 939350b..6427f53 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -27,6 +27,11 @@ if(ARCHEUS_STD_DEFAULT_CONFIG) endif() if(ARCHEUS_STD_SDL) + if(NOT PNG AND WIN32 AND NOT MSVC) + set(PNG_LIBRARY "C:/Program Files(x86)/libpng") + set(PNG_PNG_INCLUDE_DIR "C:/Program Files(x86)/libpng/include") + endif() + find_package(SDL2 REQUIRED) find_package(SDL2_image REQUIRED) From 78401ba1b2427c397d6a9fb034bf6f8ba6eb417f Mon Sep 17 00:00:00 2001 From: herbglitch Date: Fri, 10 Mar 2023 18:29:41 -0700 Subject: [PATCH 11/13] updated sdl keybard and added a - z keys along with esc --- include/arc/input/keyboard.h | 33 +++++++++++++++++++++++++++++++- src/input/glfw/keyboard.c | 2 +- src/input/sdl/keyboard.c | 37 ++++++++++++++++++++++++++++++++++-- 3 files changed, 68 insertions(+), 4 deletions(-) diff --git a/include/arc/input/keyboard.h b/include/arc/input/keyboard.h index 7d562a4..6b35d75 100644 --- a/include/arc/input/keyboard.h +++ b/include/arc/input/keyboard.h @@ -23,7 +23,38 @@ void ARC_Keyboard_Create(ARC_Keyboard **keyboard, ARC_KeyboardInfo *info); void ARC_Keyboard_Destroy(ARC_Keyboard *keyboard); void ARC_Keyboard_Update(ARC_Keyboard *keyboard); -ARC_KeyboardState ARC_Keyboard_GetState(ARC_Keyboard *keyboard, uint8_t keys); +typedef enum ARC_KeyboardKey { + ARC_KEY_A, + ARC_KEY_B, + ARC_KEY_C, + ARC_KEY_D, + ARC_KEY_E, + ARC_KEY_F, + ARC_KEY_G, + ARC_KEY_H, + ARC_KEY_I, + ARC_KEY_J, + ARC_KEY_K, + ARC_KEY_L, + ARC_KEY_M, + ARC_KEY_N, + ARC_KEY_O, + ARC_KEY_P, + ARC_KEY_Q, + ARC_KEY_R, + ARC_KEY_S, + ARC_KEY_T, + ARC_KEY_U, + ARC_KEY_V, + ARC_KEY_W, + ARC_KEY_X, + ARC_KEY_Y, + ARC_KEY_Z, + + ARC_KEY_ESC, +} ARC_Keyboard_Key; + +ARC_KeyboardState ARC_Keyboard_GetState(ARC_Keyboard *keyboard, enum ARC_KeyboardKey key); #ifdef __cplusplus } diff --git a/src/input/glfw/keyboard.c b/src/input/glfw/keyboard.c index 1adecfd..5ee81b6 100644 --- a/src/input/glfw/keyboard.c +++ b/src/input/glfw/keyboard.c @@ -15,7 +15,7 @@ void ARC_Keyboard_Destroy(ARC_Keyboard *keyboard){ void ARC_Keyboard_Update(ARC_Keyboard *keyboard){ } -ARC_KeyboardState ARC_Keyboard_GetState(ARC_Keyboard *keyboard, uint8_t key){ +ARC_KeyboardState ARC_Keyboard_GetState(ARC_Keyboard *keyboard, enum ARC_KeyboardKey key){ return ARC_KEY_NONE; } diff --git a/src/input/sdl/keyboard.c b/src/input/sdl/keyboard.c index ef273a4..2a536fa 100644 --- a/src/input/sdl/keyboard.c +++ b/src/input/sdl/keyboard.c @@ -1,3 +1,4 @@ +#include "SDL_keycode.h" #ifdef ARC_SDL #include "arc/input/sdl/keyboard.h" #include "arc/input/keyboard.h" @@ -49,8 +50,40 @@ void ARC_Keyboard_Update(ARC_Keyboard *keyboard){ keyboard->released = (keyboard->keys + keyboard->event->key.keysym.sym); } -ARC_KeyboardState ARC_Keyboard_GetState(ARC_Keyboard *keyboard, uint8_t key){ - return keyboard->keys[key]; +ARC_KeyboardState ARC_Keyboard_GetState(ARC_Keyboard *keyboard, enum ARC_KeyboardKey key){ + switch(key){ + case ARC_KEY_A: return keyboard->keys[SDLK_a]; + case ARC_KEY_B: return keyboard->keys[SDLK_b]; + case ARC_KEY_C: return keyboard->keys[SDLK_c]; + case ARC_KEY_D: return keyboard->keys[SDLK_d]; + case ARC_KEY_E: return keyboard->keys[SDLK_e]; + case ARC_KEY_F: return keyboard->keys[SDLK_f]; + case ARC_KEY_G: return keyboard->keys[SDLK_g]; + case ARC_KEY_H: return keyboard->keys[SDLK_h]; + case ARC_KEY_I: return keyboard->keys[SDLK_i]; + case ARC_KEY_J: return keyboard->keys[SDLK_j]; + case ARC_KEY_K: return keyboard->keys[SDLK_k]; + case ARC_KEY_L: return keyboard->keys[SDLK_l]; + case ARC_KEY_M: return keyboard->keys[SDLK_m]; + case ARC_KEY_N: return keyboard->keys[SDLK_n]; + case ARC_KEY_O: return keyboard->keys[SDLK_o]; + case ARC_KEY_P: return keyboard->keys[SDLK_p]; + case ARC_KEY_Q: return keyboard->keys[SDLK_q]; + case ARC_KEY_R: return keyboard->keys[SDLK_r]; + case ARC_KEY_S: return keyboard->keys[SDLK_s]; + case ARC_KEY_T: return keyboard->keys[SDLK_t]; + case ARC_KEY_U: return keyboard->keys[SDLK_u]; + case ARC_KEY_V: return keyboard->keys[SDLK_v]; + case ARC_KEY_W: return keyboard->keys[SDLK_w]; + case ARC_KEY_X: return keyboard->keys[SDLK_x]; + case ARC_KEY_Y: return keyboard->keys[SDLK_y]; + case ARC_KEY_Z: return keyboard->keys[SDLK_z]; + + case ARC_KEY_ESC: return keyboard->keys[SDLK_ESCAPE]; + + default: return ARC_KEY_NONE; + } + } #endif // ARC_SDL \ No newline at end of file From b65ce85405d9c9a1b44fb303ab86776b3177cb77 Mon Sep 17 00:00:00 2001 From: herbglitch Date: Fri, 10 Mar 2023 20:26:42 -0700 Subject: [PATCH 12/13] cmake update --- CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6427f53..ba2cf60 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -120,6 +120,8 @@ if(ARCHEUS_STD_SDL) PUBLIC ${SDL2_INCLUDE_DIRS} PUBLIC ${SDL2IMAGE_INCLUDE_DIRS} ) + + target_link_libraries(archeus_std PUBLIC ${SDL2_LIBRARIES} SDL2_image::SDL2_image) endif() if(ARCHEUS_STD_OPENGL) From 0f03d88b2604afb8c49ff23b79424d4d7d162f8b Mon Sep 17 00:00:00 2001 From: herbglitch Date: Sat, 11 Mar 2023 01:21:36 -0700 Subject: [PATCH 13/13] updated cmake --- CMakeLists.txt | 18 ++++++++++-------- include/arc/graphics/sdl/renderer.h | 3 +-- include/arc/graphics/sdl/sprite.h | 3 +-- include/arc/graphics/sdl/spritesheet.h | 3 +-- include/arc/graphics/sdl/window.h | 3 +-- include/arc/input/sdl/keyboard.h | 2 +- src/engine/engine.c | 6 ++++-- src/graphics/sdl/window.c | 2 +- 8 files changed, 20 insertions(+), 20 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ba2cf60..c978791 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -110,15 +110,17 @@ if(ARCHEUS_STD_GLFW) list(APPEND ARCHEUS_STD_SOURCES ${ARCHEUS_STD_GLFW_SOURCES}) endif() -add_library(archeus_std SHARED - ${ARCHEUS_STD_SOURCES} -) +if(WIN32 AND NOT MSVC) + add_library(archeus_std STATIC ${ARCHEUS_STD_SOURCES}) +else() + add_library(archeus_std SHARED ${ARCHEUS_STD_SOURCES}) +endif() if(ARCHEUS_STD_SDL) - target_include_directories(archeus_std PRIVATE - include - PUBLIC ${SDL2_INCLUDE_DIRS} - PUBLIC ${SDL2IMAGE_INCLUDE_DIRS} + target_include_directories(archeus_std + PUBLIC $ + PRIVATE ${SDL2_INCLUDE_DIRS} + PRIVATE ${SDL2IMAGE_INCLUDE_DIRS} ) target_link_libraries(archeus_std PUBLIC ${SDL2_LIBRARIES} SDL2_image::SDL2_image) @@ -126,7 +128,7 @@ endif() if(ARCHEUS_STD_OPENGL) target_include_directories(archeus_std PRIVATE - include + PUBLIC $ GL glfw GLEW diff --git a/include/arc/graphics/sdl/renderer.h b/include/arc/graphics/sdl/renderer.h index 124a080..14d967f 100644 --- a/include/arc/graphics/sdl/renderer.h +++ b/include/arc/graphics/sdl/renderer.h @@ -2,10 +2,9 @@ #define ARC_SDL_RENDERER_H_ #ifdef ARC_SDL - -#include #include "arc/graphics/renderer.h" #include "arc/graphics/window.h" +#include typedef SDL_Renderer ARC_RendererType; diff --git a/include/arc/graphics/sdl/sprite.h b/include/arc/graphics/sdl/sprite.h index 026190a..eb0adb9 100644 --- a/include/arc/graphics/sdl/sprite.h +++ b/include/arc/graphics/sdl/sprite.h @@ -2,9 +2,8 @@ #define ARC_SDL_SPRITE_H_ #ifdef ARC_SDL - -#include #include "arc/graphics/sprite.h" +#include struct ARC_Sprite { ARC_Spritesheet *spritesheet; diff --git a/include/arc/graphics/sdl/spritesheet.h b/include/arc/graphics/sdl/spritesheet.h index 97d3d8a..eb8e449 100644 --- a/include/arc/graphics/sdl/spritesheet.h +++ b/include/arc/graphics/sdl/spritesheet.h @@ -2,9 +2,8 @@ #define ARC_SDL_SPRITESHEET_H_ #ifdef ARC_SDL - -#include #include "arc/graphics/spritesheet.h" +#include struct ARC_Spritesheet { SDL_Texture *texture; diff --git a/include/arc/graphics/sdl/window.h b/include/arc/graphics/sdl/window.h index a6a965c..4afd1f6 100644 --- a/include/arc/graphics/sdl/window.h +++ b/include/arc/graphics/sdl/window.h @@ -2,9 +2,8 @@ #define ARC_SDL_WINDOW_H_ #ifdef ARC_SDL - -#include #include "arc/graphics/window.h" +#include typedef SDL_Window ARC_WindowType; diff --git a/include/arc/input/sdl/keyboard.h b/include/arc/input/sdl/keyboard.h index c1b04bc..74a88f8 100644 --- a/include/arc/input/sdl/keyboard.h +++ b/include/arc/input/sdl/keyboard.h @@ -2,8 +2,8 @@ #define ARC_SDL_KEYBOARD_H_ #ifdef ARC_SDL -#include #include "arc/input/keyboard.h" +#include struct ARC_Keyboard { SDL_Event *event; diff --git a/src/engine/engine.c b/src/engine/engine.c index 650c7b8..228ba5e 100644 --- a/src/engine/engine.c +++ b/src/engine/engine.c @@ -10,12 +10,12 @@ //NOTE: some of this file is temporary, mostly to get smthn running so I can test out different ideas #ifdef ARC_SDL -#include -#include #include "arc/graphics/sdl/window.h" #include "arc/graphics/sdl/renderer.h" #include "arc/input/sdl/mouse.h" #include "arc/input/sdl/keyboard.h" +#include +#include #elif ARC_OPENGL #include "arc/graphics/opengl/window.h" #include "arc/graphics/opengl/renderer.h" @@ -95,6 +95,8 @@ void ARC_Engine_Run(ARC_EngineData *data){ } #ifdef ARC_SDL + SDL_SetRenderDrawBlendMode((SDL_Renderer *)data->renderer, SDL_BLENDMODE_BLEND); + SDL_Event *event = data->mouse->event; double lastTime = 0, currentTime; data->dt = 0; diff --git a/src/graphics/sdl/window.c b/src/graphics/sdl/window.c index 2bdf9b8..73b4785 100644 --- a/src/graphics/sdl/window.c +++ b/src/graphics/sdl/window.c @@ -2,8 +2,8 @@ #include "arc/graphics/window.h" #include "arc/graphics/sdl/window.h" -#include #include "arc/std/errno.h" +#include void ARC_Window_Create(ARC_Window **window, ARC_WindowInfo *info){ if(!info){