From 7bd7cc4aa555061a4b57f934777512f28cc071c2 Mon Sep 17 00:00:00 2001 From: herbglitch Date: Tue, 3 Sep 2024 03:55:17 -0600 Subject: [PATCH] temperary load in spritesheet from file --- include/arc/graphics/spritesheet.h | 5 +++++ packages/graphics/sdl/renderer.c | 6 ++++-- packages/graphics/sdl/spritesheet.c | 32 +++++++++++++++++++++++++++-- 3 files changed, 39 insertions(+), 4 deletions(-) diff --git a/include/arc/graphics/spritesheet.h b/include/arc/graphics/spritesheet.h index d29736c..1d03ce5 100644 --- a/include/arc/graphics/spritesheet.h +++ b/include/arc/graphics/spritesheet.h @@ -9,9 +9,14 @@ extern "C" { #include "arc/math/point.h" #include "arc/math/rectangle.h" #include "arc/graphics/renderer.h" +#include "arc/std/string.h" typedef struct ARC_Spritesheet ARC_Spritesheet; +void ARC_Spritesheet_CreateFromFile(ARC_Spritesheet **spritesheet, ARC_Renderer *renderer, ARC_String *path); + +void ARC_Spritesheet_Destroy(ARC_Spritesheet *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); diff --git a/packages/graphics/sdl/renderer.c b/packages/graphics/sdl/renderer.c index 988c539..c6971d8 100644 --- a/packages/graphics/sdl/renderer.c +++ b/packages/graphics/sdl/renderer.c @@ -30,10 +30,12 @@ void ARC_Renderer_Destroy(ARC_Renderer *renderer){ } void ARC_Renderer_Clear(ARC_Renderer *renderer){ - SDL_SetRenderDrawColor((SDL_Renderer *)renderer, 0x1c, 0x2c, 0x3c, 0x00); + //TODO: changed for school, also need to add the ability to change render draw color + //SDL_SetRenderDrawColor((SDL_Renderer *)renderer, 0x1c, 0x2c, 0x3c, 0x00); + SDL_SetRenderDrawColor((SDL_Renderer *)renderer, 0x15, 0x2a, 0x26, 0x00); SDL_RenderClear((SDL_Renderer *)renderer); } void ARC_Renderer_Render(ARC_Renderer *renderer){ SDL_RenderPresent((SDL_Renderer *)renderer); -} \ No newline at end of file +} diff --git a/packages/graphics/sdl/spritesheet.c b/packages/graphics/sdl/spritesheet.c index 952664b..ad06e10 100644 --- a/packages/graphics/sdl/spritesheet.c +++ b/packages/graphics/sdl/spritesheet.c @@ -3,7 +3,35 @@ #include "spritesheet.h" #include "renderer.h" #include "arc/math/point.h" -#include +#include +#include +#include + +//TODO: Temp function +void ARC_Spritesheet_CreateFromFile(ARC_Spritesheet **spritesheet, ARC_Renderer *renderer, ARC_String *path){ + *spritesheet = (ARC_Spritesheet *)malloc(sizeof(ARC_Spritesheet)); + + IMG_Init(IMG_INIT_PNG); + SDL_Surface *surface = IMG_Load(path->data); + if(!surface){ + printf("Error: reading png '%s'\nSDL_Image Error: %s", path->data, IMG_GetError()); + } + + SDL_BlendMode tempMode; + SDL_GetSurfaceBlendMode(surface, &tempMode); + (*spritesheet)->texture = SDL_CreateTextureFromSurface((SDL_Renderer *)renderer, surface); + SDL_GetTextureBlendMode((*spritesheet)->texture, &tempMode); + + SDL_FreeSurface(surface); + IMG_Quit(); + + ARC_Spritesheet_GetSize(*spritesheet); +} + +void ARC_Spritesheet_Destroy(ARC_Spritesheet *spritesheet){ + SDL_DestroyTexture(spritesheet->texture); + free(spritesheet); +} void ARC_Spritesheet_RenderArea(ARC_Spritesheet *spritesheet, ARC_Rect *sheetBounds, ARC_Renderer *renderer, ARC_Rect *renderBounds){ SDL_RenderCopy((SDL_Renderer *)renderer, spritesheet->texture, (SDL_Rect *)sheetBounds, (SDL_Rect *)renderBounds); @@ -17,4 +45,4 @@ 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 +}