From c0780b7188ed312e67c419e4627f4870bbdc5d7a Mon Sep 17 00:00:00 2001 From: herbglitch Date: Sat, 29 Oct 2022 16:08:41 -0600 Subject: [PATCH] sdl initializing and deinitializing with temp code --- include/arc/engine/engine.h | 9 ++++++++- include/arc/graphics/renderer.h | 20 +++++++++++++++++--- include/arc/graphics/sdl/renderer.h | 23 +++++++++++++++++++---- include/arc/graphics/sdl/window.h | 23 ++++++++++++++++++----- include/arc/graphics/window.h | 4 ++-- include/arc/std/errno.h | 2 +- src/engine/engine.c | 20 ++++++++++++++------ src/graphics/sdl/renderer.c | 20 +++++++++++--------- src/graphics/sdl/window.c | 22 ++++++++++++---------- 9 files changed, 102 insertions(+), 41 deletions(-) diff --git a/include/arc/engine/engine.h b/include/arc/engine/engine.h index 01fc9f5..63a857d 100644 --- a/include/arc/engine/engine.h +++ b/include/arc/engine/engine.h @@ -1,13 +1,16 @@ #ifndef ARC_ENGINE_H_ #define ARC_ENGINE_H_ +#ifdef __cplusplus +extern "C" { +#endif + #include "arc/graphics/window.h" #include "arc/graphics/renderer.h" typedef struct ARC_EngineData { ARC_Window *window; ARC_Renderer *renderer; - } ARC_EngineData; //NOTE: most work below is temp, and will change once I figure out a better way to write this header @@ -24,4 +27,8 @@ void ARC_EngineData_Destroy(ARC_EngineData *data); */ void ARC_Engine_Run(ARC_EngineData *data); +#ifdef __cplusplus +} +#endif + #endif // !ARC_ENGINE_H_ diff --git a/include/arc/graphics/renderer.h b/include/arc/graphics/renderer.h index f97755f..cc5612b 100644 --- a/include/arc/graphics/renderer.h +++ b/include/arc/graphics/renderer.h @@ -1,6 +1,10 @@ #ifndef ARC_GRAPHICS_RENDERER_H_ #define ARC_GRAPHICS_RENDERER_H_ +#ifdef __cplusplus +extern "C" { +#endif + typedef struct ARC_Renderer ARC_Renderer; typedef struct ARC_RenderInfo ARC_RenderInfo; @@ -11,14 +15,24 @@ typedef struct ARC_RenderInfo ARC_RenderInfo; * @note the parameter data is determined by which graphics library you are using * please refer to the graphics library section to see what needs to be passed * - * @param renderer ARC_Window to initialize - * @param data Data to create ARC_Window + * @param renderer ARC_Renderer to initialize + * @param info Info on how to create ARC_Window */ -void ARC_Renderer_Create(ARC_Renderer **renderer, void *data); +void ARC_Renderer_Create(ARC_Renderer **renderer, ARC_RenderInfo *data); /** * @brief destroys ARC_Renderer type + * + * @param renderer ARC_Renderer to destory */ void ARC_Renderer_Destroy(ARC_Renderer *renderer); +void ARC_Renderer_Clear(ARC_Renderer *renderer); + +void ARD_Renderer_Render(ARC_Renderer *renderer); + +#ifdef __cplusplus +} +#endif + #endif // !ARC_GRAPHICS_RENDERER_H_ diff --git a/include/arc/graphics/sdl/renderer.h b/include/arc/graphics/sdl/renderer.h index 48248e4..70c8923 100644 --- a/include/arc/graphics/sdl/renderer.h +++ b/include/arc/graphics/sdl/renderer.h @@ -3,7 +3,18 @@ #ifdef ARC_SDL +#ifdef __cplusplus +extern "C" { +#endif + #include +#include "arc/graphics/renderer.h" +#include "arc/graphics/window.h" + +// Temp till I figure out a better solution +struct ARC_Renderer { + SDL_Renderer *renderer; +}; /** * @brief struct for info needed to create SDL_Renderer @@ -12,10 +23,14 @@ */ struct ARC_RenderInfo { - ARC_Window *window; - int index; - Uint32 flags; -} ARC_RenderInfo; + SDL_Window *window; + int index; + Uint32 flags; +}; + +#ifdef __cplusplus +} +#endif #endif // ARC_SDL diff --git a/include/arc/graphics/sdl/window.h b/include/arc/graphics/sdl/window.h index a39f826..942437f 100644 --- a/include/arc/graphics/sdl/window.h +++ b/include/arc/graphics/sdl/window.h @@ -1,16 +1,25 @@ -#ifndef ARC_SDL_RENDERER_H_ -#define ARC_SDL_RENDERER_H_ +#ifndef ARC_SDL_WINDOW_H_ +#define ARC_SDL_WINDOW_H_ #ifdef ARC_SDL +#ifdef __cplusplus +extern "C" { +#endif + #include +#include "arc/graphics/window.h" + +// Temp till I figure out a better solution +struct ARC_Window { + SDL_Window *window; +}; /** * @brief struct for info needed to create SDL_Window * * @note this is what needs to be passed into the data parameter for ARC_Window_Create */ - struct ARC_WindowInfo { char *title; int x; @@ -18,8 +27,12 @@ struct ARC_WindowInfo { int w; int h; Uint32 flags; -} ARC_WindowInfo; +}; + +#ifdef __cplusplus +} +#endif #endif // ARC_SDL -#endif // ARC_SDL_RENDERER_H_ +#endif // ARC_SDL_WINDOW_H_ diff --git a/include/arc/graphics/window.h b/include/arc/graphics/window.h index 5859af2..bbb0e7d 100644 --- a/include/arc/graphics/window.h +++ b/include/arc/graphics/window.h @@ -12,9 +12,9 @@ typedef struct ARC_WindowInfo ARC_WindowInfo; * please refer to the graphics library section to see what needs to be passed * * @param window ARC_Window to initialize - * @param data Data to create ARC_Window + * @param info Info on how to create ARC_Window */ -void ARC_Window_Create(ARC_Window **window, void *data); +void ARC_Window_Create(ARC_Window **window, ARC_WindowInfo *info); /** * @brief destroys ARC_Window type diff --git a/include/arc/std/errno.h b/include/arc/std/errno.h index 398a9ef..813cbdd 100644 --- a/include/arc/std/errno.h +++ b/include/arc/std/errno.h @@ -27,7 +27,7 @@ extern "C" { #ifdef ARC_DEBUG # include # define ARC_DEBUG_LOG(ERR, STR, ...) printf("[ERROR %d] " STR "\n", ERR, __VA_ARGS__) -# define ARC_DEBUG_ERR(STR) printf("[ERROR %d]" STR "\n", ERR) +# define ARC_DEBUG_ERR(STR) printf("[ERROR %d]" STR "\n", arc_errno) #else # define ARC_DEBUG_LOG(ERR, STR, ...) # define ARC_DEBUG_ERR(STR) diff --git a/src/engine/engine.c b/src/engine/engine.c index c593d1d..27c69df 100644 --- a/src/engine/engine.c +++ b/src/engine/engine.c @@ -1,11 +1,15 @@ #include "arc/engine/engine.h" +#include #include +#include "arc/graphics/window.h" +#include "arc/graphics/renderer.h" //NOTE: this is very temp, mostly to get smthn running so I can test out different ideas #ifdef ARC_SDL #include -#include "arc/graphics/sdl/rerderer.h" -#endif +#include "arc/graphics/sdl/window.h" +#include "arc/graphics/sdl/renderer.h" +#endif // ARC_SDL void ARC_EngineData_Create(ARC_EngineData **data){ *data = (ARC_EngineData *)malloc(sizeof(ARC_EngineData)); @@ -17,25 +21,29 @@ void ARC_EngineData_Create(ARC_EngineData **data){ #ifdef ARC_SDL if(SDL_Init(SDL_INIT_VIDEO) < 0){ - printf("Error: initializing SDL\nSDL Error: ", SDL_GetError()); + printf("Error: initializing SDL\nSDL Error: %s\n", SDL_GetError()); free(*data); return; } - windowInfo = { "title", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 1920, 1080, 0 }; - renderInfo = { (*data)->window, -1, SDL_RENDERER_ACCELERATED } + windowInfo = (ARC_WindowInfo){ "title", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 1920, 1080, 0 }; #endif // ARC_SDL ARC_Window_Create(&((*data)->window), &windowInfo); //TODO: handle arc_errno errors here + +#ifdef ARC_SDL + renderInfo = (ARC_RenderInfo){ (SDL_Window *)(*data)->window->window, -1, SDL_RENDERER_ACCELERATED }; +#endif // ARC_SDL + ARC_Renderer_Create(&((*data)->renderer), &renderInfo); //TODO: handle arc_errno errors here } void ARC_EngineData_Destroy(ARC_EngineData *data){ #ifdef ARC_SDL + ARC_Window_Destroy( data->window ); ARC_Renderer_Destroy(data->renderer); - ARC_Renderer_Destroy(data->window); #endif // ARC_SDL } diff --git a/src/graphics/sdl/renderer.c b/src/graphics/sdl/renderer.c index 04eec4d..9e80a40 100644 --- a/src/graphics/sdl/renderer.c +++ b/src/graphics/sdl/renderer.c @@ -1,20 +1,21 @@ #ifdef ARC_SDL #include "arc/graphics/renderer.h" +#include "arc/graphics/sdl/renderer.h" + +#include +#include #include "arc/graphics/window.h" #include "arc/std/errno.h" -typedef SDL_Renderer ARC_Renderer; - -ARC_Renderer_Create(ARC_Renderer **renderer, void *data){ - if(!data){ +void ARC_Renderer_Create(ARC_Renderer **renderer, ARC_RenderInfo *info){ + if(!info){ arc_errno = ARC_ERRNO_NULL; - ARC_DEBUG_ERR(arc_errno, "ARC_Renderer_Create(**renderer, NULL)"); + ARC_DEBUG_ERR("ARC_Renderer_Create(**renderer, NULL)"); return; } - ARC_RenderInfo *info = (ARC_RenderInfo *)data; - - *renderer = SDL_CreateRenderer(info->window, info->index, info->flags); + *renderer = (ARC_Renderer *)malloc(sizeof(ARC_Renderer)); + (*renderer)->renderer = SDL_CreateRenderer((SDL_Window *)info->window, info->index, info->flags); if(!renderer){ arc_errno = ARC_ERRNO_NULL; @@ -23,7 +24,8 @@ ARC_Renderer_Create(ARC_Renderer **renderer, void *data){ } void ARC_Renderer_Destroy(ARC_Renderer *renderer){ - SDL_DestroyRenderer((SDL_Renderer *) renderer); + SDL_DestroyRenderer((SDL_Renderer *) renderer->renderer); + free(renderer); } #endif //ARC_SDL diff --git a/src/graphics/sdl/window.c b/src/graphics/sdl/window.c index 08f6c51..752ddfe 100644 --- a/src/graphics/sdl/window.c +++ b/src/graphics/sdl/window.c @@ -1,28 +1,30 @@ #ifdef ARC_SDL #include "arc/graphics/window.h" +#include "arc/graphics/sdl/window.h" + +#include #include "arc/std/errno.h" -typedef SDL_Window ARC_Window; - -void ARC_Window_Create(ARC_Window **window, void *data){ - if(!data){ +void ARC_Window_Create(ARC_Window **window, ARC_WindowInfo *info){ + if(!info){ arc_errno = ARC_ERRNO_NULL; - ARC_DEBUG_ERR(arc_errno, "ARC_Window_Create(**window, NULL)"); + ARC_DEBUG_ERR("ARC_Window_Create(**window, NULL)"); return; } - ARC_WindowInfo *info = (ARC_WindowInfo *)data; + // (*window)->window = SDL_CreateWindow((const char *)info->title, info->x, info->y, info->w, info->h, info->flags); + *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 = SDL_CreateWindow((const char *)info->title, info->x, info->y, info->w, info->h, info->flags); - - if(!window){ + if(!(*window)->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); } } void ARC_Window_Destroy(ARC_Window *window){ - SDL_DestroyWindow((SDL_Window *) window); + SDL_DestroyWindow((SDL_Window *) window->window); + free(window); } #endif //ARC_SDL