116 lines
2.7 KiB
C
116 lines
2.7 KiB
C
/**
|
|
* 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();
|
|
} |