/** * Copyright (c) 2026 Dominic Masters * * This software is released under the MIT License. * https://opensource.org/licenses/MIT */ #include "shaderlist.h" #include "display/screen/screen.h" #include "assert/assert.h" shaderlistdef_t SHADER_LIST_DEFS[SHADER_LIST_SHADER_COUNT] = { [SHADER_LIST_SHADER_UNLIT] = { .shader = &SHADER_UNLIT, .definition = &SHADER_UNLIT_DEFINITION }, }; errorret_t shaderListInit() { mat4 view, proj, model; glm_lookat( (vec3){ 0.0f, 0.0f, 1.0f }, (vec3){ 0.0f, 0.0f, 0.0f }, (vec3){ 0.0f, 1.0f, 0.0f }, view ); glm_perspective( glm_rad(45.0f), SCREEN.aspect, 0.1f, 100.0f, proj ); glm_mat4_identity(model); for(shaderlistshader_t i = 0; i < SHADER_LIST_SHADER_COUNT; i++) { if(i == SHADER_LIST_SHADER_NULL) { continue; } assertNotNull( SHADER_LIST_DEFS[i].shader, "Shader cannot be null" ); assertNotNull( SHADER_LIST_DEFS[i].definition, "Shader definition cannot be null" ); errorChain(shaderInit( SHADER_LIST_DEFS[i].shader, SHADER_LIST_DEFS[i].definition )); errorChain(shaderBind(SHADER_LIST_DEFS[i].shader)); errorChain(shaderSetMatrix( SHADER_LIST_DEFS[i].shader, SHADER_UNLIT_PROJECTION, proj )); errorChain(shaderSetMatrix( SHADER_LIST_DEFS[i].shader, SHADER_UNLIT_VIEW, view )); errorChain(shaderSetMatrix( SHADER_LIST_DEFS[i].shader, SHADER_UNLIT_MODEL, model )); errorChain(shaderSetTexture( SHADER_LIST_DEFS[i].shader, SHADER_UNLIT_TEXTURE, NULL )); errorChain(shaderSetColor( SHADER_LIST_DEFS[i].shader, SHADER_UNLIT_COLOR, COLOR_WHITE )); } errorOk(); } errorret_t shaderListDispose(void) { for(shaderlistshader_t i = 0; i < SHADER_LIST_SHADER_COUNT; i++) { if(i == SHADER_LIST_SHADER_NULL) { continue; } assertNotNull( SHADER_LIST_DEFS[i].shader, "Shader cannot be null" ); errorChain(shaderDispose(SHADER_LIST_DEFS[i].shader)); } errorOk(); }