diff --git a/src/dusk/asset/type/assetpalette.c b/archive/assetpalette.c similarity index 100% rename from src/dusk/asset/type/assetpalette.c rename to archive/assetpalette.c diff --git a/src/dusk/asset/type/assetpalette.h b/archive/assetpalette.h similarity index 100% rename from src/dusk/asset/type/assetpalette.h rename to archive/assetpalette.h diff --git a/src/dusk/asset/assettype.h b/src/dusk/asset/assettype.h index 7802a98..78a4542 100644 --- a/src/dusk/asset/assettype.h +++ b/src/dusk/asset/assettype.h @@ -7,7 +7,7 @@ #pragma once #include "type/assettexture.h" -#include "type/assetpalette.h" +// #include "type/assetpalette.h" #include "type/assettileset.h" #include "type/assetlanguage.h" #include "type/assetscript.h" @@ -19,7 +19,7 @@ typedef enum { ASSET_TYPE_NULL, ASSET_TYPE_TEXTURE, - ASSET_TYPE_PALETTE, + // ASSET_TYPE_PALETTE, ASSET_TYPE_TILESET, ASSET_TYPE_LANGUAGE, ASSET_TYPE_SCRIPT, @@ -66,12 +66,12 @@ static const assettypedef_t ASSET_TYPE_DEFINITIONS[ASSET_TYPE_COUNT] = { .entire = assetTextureLoad }, - [ASSET_TYPE_PALETTE] = { - .extension = "dpf", - .loadStrategy = ASSET_LOAD_STRAT_ENTIRE, - .dataSize = sizeof(palette_t), - .entire = assetPaletteLoad - }, + // [ASSET_TYPE_PALETTE] = { + // .extension = "dpf", + // .loadStrategy = ASSET_LOAD_STRAT_ENTIRE, + // .dataSize = sizeof(palette_t), + // .entire = assetPaletteLoad + // }, [ASSET_TYPE_TILESET] = { .extension = "dtf", diff --git a/src/dusk/asset/type/CMakeLists.txt b/src/dusk/asset/type/CMakeLists.txt index 81a18ad..0450182 100644 --- a/src/dusk/asset/type/CMakeLists.txt +++ b/src/dusk/asset/type/CMakeLists.txt @@ -7,7 +7,6 @@ target_sources(${DUSK_LIBRARY_TARGET_NAME} PUBLIC assettexture.c - assetpalette.c assettileset.c assetlanguage.c assetscript.c diff --git a/src/dusk/asset/type/assetmapchunk.c b/src/dusk/asset/type/assetmapchunk.c index e907ef0..dbab6b5 100644 --- a/src/dusk/asset/type/assetmapchunk.c +++ b/src/dusk/asset/type/assetmapchunk.c @@ -138,14 +138,14 @@ errorret_t assetMapChunkHandler(assetcustom_t custom) { mesh_t *mesh = &chunk->meshes[i]; meshInit( mesh, - MESH_PRIMITIVE_TRIANGLES, + MESH_PRIMITIVE_TYPE_TRIANGLES, modelHeader.vertexCount, &chunk->vertices[vertexIndex] ); vertexIndex += modelHeader.vertexCount; } else { - chunk->meshes[i].vertexCount = 0; + // chunk->meshes[i].vertexCount = 0; } } diff --git a/src/dusk/display/CMakeLists.txt b/src/dusk/display/CMakeLists.txt index fcad3fd..14d41a9 100644 --- a/src/dusk/display/CMakeLists.txt +++ b/src/dusk/display/CMakeLists.txt @@ -12,6 +12,7 @@ target_sources(${DUSK_LIBRARY_TARGET_NAME} # Subdirectories add_subdirectory(camera) +add_subdirectory(framebuffer) add_subdirectory(mesh) add_subdirectory(texture) diff --git a/src/dusk/display/display.c b/src/dusk/display/display.c index d7b3df8..e7530f3 100644 --- a/src/dusk/display/display.c +++ b/src/dusk/display/display.c @@ -30,10 +30,10 @@ errorret_t displayInit(void) { #endif errorChain(quadInit()); - errorChain(frameBufferInitBackbuffer()); + errorChain(frameBufferInitBackBuffer()); spriteBatchInit(); errorChain(textInit()); - errorChain(assetLoad("main_palette.dpf", &PALETTES[0])); + // errorChain(assetLoad("main_palette.dpf", &PALETTES[0])); screenInit(); errorOk(); diff --git a/src/dusk/display/framebuffer/CMakeLists.txt b/src/dusk/display/framebuffer/CMakeLists.txt new file mode 100644 index 0000000..e4e2efc --- /dev/null +++ b/src/dusk/display/framebuffer/CMakeLists.txt @@ -0,0 +1,10 @@ +# Copyright (c) 2025 Dominic Masters +# +# This software is released under the MIT License. +# https://opensource.org/licenses/MIT + +# Sources +target_sources(${DUSK_LIBRARY_TARGET_NAME} + PUBLIC + framebuffer.c +) \ No newline at end of file diff --git a/src/dusk/display/framebuffer/framebuffer.c b/src/dusk/display/framebuffer/framebuffer.c index 0edec96..1fee0f4 100644 --- a/src/dusk/display/framebuffer/framebuffer.c +++ b/src/dusk/display/framebuffer/framebuffer.c @@ -13,9 +13,9 @@ framebuffer_t FRAMEBUFFER_BACKBUFFER = {0}; const framebuffer_t *FRAMEBUFFER_BOUND = &FRAMEBUFFER_BACKBUFFER; -errorret_t frameBufferInitBackbuffer() { +errorret_t frameBufferInitBackBuffer() { memoryZero(&FRAMEBUFFER_BACKBUFFER, sizeof(framebuffer_t)); - errorChain(frameBufferPlatformInitBackbuffer()); + errorChain(frameBufferPlatformInitBackBuffer()); FRAMEBUFFER_BOUND = &FRAMEBUFFER_BACKBUFFER; errorOk(); } @@ -24,7 +24,7 @@ errorret_t frameBufferBind(framebuffer_t *framebuffer) { if(framebuffer == NULL) { frameBufferBind(&FRAMEBUFFER_BACKBUFFER); FRAMEBUFFER_BOUND = &FRAMEBUFFER_BACKBUFFER; - return; + errorOk(); } errorChain(frameBufferPlatformBind(framebuffer)); @@ -32,21 +32,12 @@ errorret_t frameBufferBind(framebuffer_t *framebuffer) { errorOk(); } -void frameBufferDispose(framebuffer_t *framebuffer) { - assertNotNull(framebuffer, "Framebuffer cannot be NULL"); +uint32_t frameBufferGetWidth(const framebuffer_t *framebuffer) { + return frameBufferPlatformGetWidth(framebuffer); +} - #if DISPLAY_SDL2 - if(framebuffer == &FRAMEBUFFER_BACKBUFFER) { - assertUnreachable("Cannot dispose of backbuffer"); - } - - #if DISPLAY_SIZE_DYNAMIC == 0 - assertUnreachable("Dynamic size framebuffers not supported"); - #else - textureDispose(&framebuffer->texture); - glDeleteFramebuffersEXT(1, &framebuffer->id); - #endif - #endif +uint32_t frameBufferGetHeight(const framebuffer_t *framebuffer) { + return frameBufferPlatformGetHeight(framebuffer); } #ifdef DUSK_DISPLAY_SIZE_DYNAMIC @@ -62,4 +53,10 @@ void frameBufferDispose(framebuffer_t *framebuffer) { errorChain(frameBufferPlatformInit(fb, width, height)); errorOk(); } + + errorret_t frameBufferDispose(framebuffer_t *framebuffer) { + assertNotNull(framebuffer, "Framebuffer cannot be NULL"); + errorChain(frameBufferPlatformDispose(framebuffer)); + errorOk(); + } #endif \ No newline at end of file diff --git a/src/dusk/display/framebuffer/framebuffer.h b/src/dusk/display/framebuffer/framebuffer.h index f8fb7df..cc9b15c 100644 --- a/src/dusk/display/framebuffer/framebuffer.h +++ b/src/dusk/display/framebuffer/framebuffer.h @@ -56,7 +56,7 @@ uint32_t frameBufferGetHeight(const framebuffer_t *framebuffer); * @param framebuffer The framebuffer to bind, or NULL to bind the backbuffer. * @return Error for binding the framebuffer. */ -errorret_t frameBufferBind(const framebuffer_t *framebuffer); +errorret_t frameBufferBind(framebuffer_t *framebuffer); /** * Clears the currently bound framebuffer. @@ -66,19 +66,15 @@ errorret_t frameBufferBind(const framebuffer_t *framebuffer); */ void frameBufferClear(uint8_t flags, color_t color); -/** - * Disposes of the framebuffer. Will also be used for request disposing of the - * backbuffer. - * - * @param framebuffer The framebuffer to dispose of. - */ -void frameBufferDispose(framebuffer_t *framebuffer); - #ifdef DUSK_DISPLAY_SIZE_DYNAMIC #ifndef frameBufferPlatformInit #error "frameBufferPlatformInit not defined for this platform" #endif + #ifndef frameBufferPlatformDispose + #error "frameBufferPlatformDispose not defined for this platform" + #endif + /** * Initializes a framebuffer. * @@ -92,4 +88,12 @@ void frameBufferDispose(framebuffer_t *framebuffer); const uint32_t width, const uint32_t height ); + + /** + * Disposes of the framebuffer. Will also be used for request disposing of the + * backbuffer. + * + * @param framebuffer The framebuffer to dispose of. + */ + errorret_t frameBufferDispose(framebuffer_t *framebuffer); #endif \ No newline at end of file diff --git a/src/dusk/display/text.c b/src/dusk/display/text.c index 926aee3..5e30c0c 100644 --- a/src/dusk/display/text.c +++ b/src/dusk/display/text.c @@ -8,7 +8,7 @@ #include "text.h" #include "assert/assert.h" #include "util/memory.h" -#include "display/spritebatch.h" +#include "display/spritebatch/spritebatch.h" #include "asset/asset.h" texture_t DEFAULT_FONT_TEXTURE; diff --git a/src/dusk/map/map.c b/src/dusk/map/map.c index c7dae69..2b7d76c 100644 --- a/src/dusk/map/map.c +++ b/src/dusk/map/map.c @@ -9,6 +9,7 @@ #include "util/memory.h" #include "assert/assert.h" #include "asset/asset.h" +#include "display/texture/texture.h" // #include "entity/entity.h" #include "util/string.h" #include "time/time.h" @@ -195,8 +196,8 @@ void mapChunkUnload(mapchunk_t* chunk) { // } for(uint8_t i = 0; i < chunk->meshCount; i++) { - if(chunk->meshes[i].vertexCount == 0) continue; - meshDispose(&chunk->meshes[i]); + // if(chunk->meshes[i].vertexCount == 0) continue; + // meshDispose(&chunk->meshes[i]); } } diff --git a/src/dusk/scene/scene.c b/src/dusk/scene/scene.c index d385b1b..054240b 100644 --- a/src/dusk/scene/scene.c +++ b/src/dusk/scene/scene.c @@ -8,9 +8,8 @@ #include "util/memory.h" #include "debug/debug.h" #include "time/time.h" - #include "display/camera/camera.h" -#include "display/screen.h" +#include "display/screen/screen.h" scene_t SCENE; diff --git a/src/dusk/script/module/display/modulescreen.c b/src/dusk/script/module/display/modulescreen.c index 432969a..1ea23c4 100644 --- a/src/dusk/script/module/display/modulescreen.c +++ b/src/dusk/script/module/display/modulescreen.c @@ -7,7 +7,7 @@ #include "modulescreen.h" #include "assert/assert.h" -#include "display/screen.h" +#include "display/screen/screen.h" void moduleScreen(scriptcontext_t *context) { assertNotNull(context, "Context cannot be NULL."); diff --git a/src/dusk/script/module/display/modulespritebatch.c b/src/dusk/script/module/display/modulespritebatch.c index 3b52784..2d8e976 100644 --- a/src/dusk/script/module/display/modulespritebatch.c +++ b/src/dusk/script/module/display/modulespritebatch.c @@ -6,7 +6,7 @@ */ #include "modulespritebatch.h" -#include "display/spritebatch.h" +#include "display/spritebatch/spritebatch.h" #include "assert/assert.h" void moduleSpriteBatch(scriptcontext_t *context) { diff --git a/src/dusk/script/module/display/moduletext.c b/src/dusk/script/module/display/moduletext.c index 5ff4d8f..23f705e 100644 --- a/src/dusk/script/module/display/moduletext.c +++ b/src/dusk/script/module/display/moduletext.c @@ -8,7 +8,7 @@ #include "moduletext.h" #include "assert/assert.h" #include "display/text.h" -#include "display/spritebatch.h" +#include "display/spritebatch/spritebatch.h" void moduleText(scriptcontext_t *context) { assertNotNull(context, "Script context is null"); diff --git a/src/duskgl/display/framebuffer/framebuffergl.c b/src/duskgl/display/framebuffer/framebuffergl.c index 5e275f4..3f47b7c 100644 --- a/src/duskgl/display/framebuffer/framebuffergl.c +++ b/src/duskgl/display/framebuffer/framebuffergl.c @@ -130,4 +130,17 @@ void frameBufferClear(const uint8_t flags, const color_t color) { errorChain(errorGLCheck()); errorOk(); } + + errorret_t frameBufferGLDispose(framebuffer_t *framebuffer) { + assertNotNull(framebuffer, "Framebuffer cannot be NULL"); + + if(framebuffer == &FRAMEBUFFER_BACKBUFFER) { + assertUnreachable("Cannot dispose of backbuffer"); + } + + errorChain(textureDispose(&framebuffer->texture)); + glDeleteFramebuffersEXT(1, &framebuffer->id); + errorChain(errorGLCheck()); + errorOk(); + } #endif \ No newline at end of file diff --git a/src/duskgl/display/framebuffer/framebuffergl.h b/src/duskgl/display/framebuffer/framebuffergl.h index df765d6..095a6d2 100644 --- a/src/duskgl/display/framebuffer/framebuffergl.h +++ b/src/duskgl/display/framebuffer/framebuffergl.h @@ -19,6 +19,32 @@ typedef struct { */ errorret_t frameBufferGLInitBackBuffer(void); +/** + * Gets the height of the framebuffer. (OpenGL implementation). + * + * @param framebuffer The framebuffer to get the height of. + * @return The height of the framebuffer, or 0 if the framebuffer is NULL. + */ +uint32_t frameBufferGLGetWidth(const framebuffergl_t *framebuffer); + +/** + * Initializes an OpenGL style framebuffer. + * + * @param fb The framebuffer to initialize. + * @param width The width of the framebuffer. + * @param height The height of the framebuffer. + * @return Either error or not. + */ +uint32_t frameBufferGLGetHeight(const framebuffergl_t *framebuffer); + +/** + * Gets the width of the framebuffer. (OpenGL implementation). + * + * @param framebuffer The framebuffer to get the width of. + * @return The width of the framebuffer, or 0 if the framebuffer is NULL. + */ +errorret_t frameBufferGLBind(framebuffergl_t *framebuffer); + #ifdef DUSK_DISPLAY_SIZE_DYNAMIC /** * Initializes an OpenGL style framebuffer. @@ -33,4 +59,12 @@ errorret_t frameBufferGLInitBackBuffer(void); const uint32_t width, const uint32_t height ); + + /** + * Disposes of the framebuffer. Will also be used for request disposing of the + * backbuffer. + * + * @param framebuffer The framebuffer to dispose of. + */ + errorret_t frameBufferGLDispose(framebuffergl_t *framebuffer); #endif \ No newline at end of file diff --git a/src/duskgl/display/framebuffer/framebufferplatform.h b/src/duskgl/display/framebuffer/framebufferplatform.h index 6c693bf..0116878 100644 --- a/src/duskgl/display/framebuffer/framebufferplatform.h +++ b/src/duskgl/display/framebuffer/framebufferplatform.h @@ -10,5 +10,11 @@ typedef framebuffergl_t framebufferplatform_t; #define frameBufferPlatformInitBackBuffer frameBufferGLInitBackBuffer -#define frameBufferPlatformInit frameBufferGLInit -#define frameBufferPlatformBind frameBufferGLBind \ No newline at end of file +#define frameBufferPlatformGetWidth frameBufferGLGetWidth +#define frameBufferPlatformGetHeight frameBufferGLGetHeight +#define frameBufferPlatformBind frameBufferGLBind + +#if DUSK_DISPLAY_SIZE_DYNAMIC + #define frameBufferPlatformInit frameBufferGLInit + #define frameBufferPlatformDispose frameBufferGLDispose +#endif \ No newline at end of file