/** * Copyright (c) 2026 Dominic Masters * * This software is released under the MIT License. * https://opensource.org/licenses/MIT */ #include "display/display.h" #include "display/framebuffer/framebuffer.h" #include "scene/scene.h" #include "display/spritebatch/spritebatch.h" #include "display/mesh/quad.h" #include "display/mesh/cube.h" #include "display/mesh/sphere.h" #include "display/mesh/plane.h" #include "display/mesh/capsule.h" #include "display/mesh/triprism.h" #include "display/screen/screen.h" #include "ui/ui.h" #include "display/text/text.h" #include "assert/assert.h" #include "util/memory.h" #include "util/string.h" #include "asset/asset.h" #include "display/shader/shaderlist.h" #include "time/time.h" display_t DISPLAY = { 0 }; errorret_t displayInit(void) { memoryZero(&DISPLAY, sizeof(DISPLAY)); #ifdef displayPlatformInit errorChain(displayPlatformInit()); #endif errorChain(displaySetState((displaystate_t){ .flags = 0 })); errorChain(textureInit( &TEXTURE_WHITE, 4, 4, TEXTURE_FORMAT_RGBA, (texturedata_t){ .rgbaColors = TEXTURE_WHITE_PIXELS } )); errorChain(textureInit( &TEXTURE_TEST, 4, 4, TEXTURE_FORMAT_RGBA, (texturedata_t){ .rgbaColors = TEXTURE_TEST_PIXELS } )); // Standard meshes errorChain(quadInit()); errorChain(cubeInit()); errorChain(sphereInit()); errorChain(planeInit()); errorChain(capsuleInit()); errorChain(triPrismInit()); errorChain(frameBufferInitBackBuffer()); errorChain(spriteBatchInit()); errorChain(textInit()); errorChain(screenInit()); // Setup initial shader with default values errorChain(shaderListInit()); errorOk(); } errorret_t displayUpdate(void) { #ifdef displayPlatformUpdate errorChain(displayPlatformUpdate()); #endif // Reset state spriteBatchClear(); errorChain(frameBufferBind(NULL)); // Bind screen and render scene errorChain(screenBind()); frameBufferClear( FRAMEBUFFER_CLEAR_COLOR | FRAMEBUFFER_CLEAR_DEPTH, SCREEN.background ); errorChain(sceneRender()); // Finish up screenUnbind(); screenRender(); // Swap and return. #ifdef displayPlatformSwap errorChain(displayPlatformSwap()); #endif errorOk(); } errorret_t displaySetState(displaystate_t state) { #ifdef displayPlatformSetState errorChain(displayPlatformSetState(state)); #endif errorOk(); } errorret_t displayDispose(void) { errorChain(shaderListDispose()); errorChain(spriteBatchDispose()); screenDispose(); errorChain(textDispose()); errorChain(textureDispose(&TEXTURE_WHITE)); errorChain(textureDispose(&TEXTURE_TEST)); #ifdef displayPlatformDispose displayPlatformDispose(); #endif // For now, we just return an OK error. errorOk(); }