/** * Copyright (c) 2026 Dominic Masters * * This software is released under the MIT License. * https://opensource.org/licenses/MIT */ #pragma once #include "error/error.h" #include "display/texture/texture.h" #include "display/shader/shaderplatform.h" #ifndef shaderInitPlatform #error "shaderInitPlatform must be defined to use shader.h" #endif #ifndef shaderBindPlatform #error "shaderBindPlatform must be defined to use shader.h" #endif #ifndef shaderSetMatrixPlatform #error "shaderSetMatrixPlatform must be defined to use shader.h" #endif #ifndef shaderDisposePlatform #error "shaderDisposePlatform must be defined to use shader.h" #endif typedef union shadermaterial_u shadermaterial_t; typedef shaderplatform_t shader_t; typedef shaderdefinitionplatform_t shaderdefinition_t; /** * Initializes a shader. This is platform dependant. * * @param shader Shader to initialize * @param def Definition of the shader to initialize with. * @return Error if failure, otherwise errorOk */ errorret_t shaderInit(shader_t *shader, const shaderdefinition_t *def); /** * Binds a shader. This is platform dependant. * * @param shader Shader to bind * @return Error if failure, otherwise errorOk */ errorret_t shaderBind(shader_t *shader); /** * Sets a matrix uniform in the shader. This is platform dependant. * * @param shader Shader to set the matrix in * @param name Name of the uniform to set * @param matrix Matrix to set * @return Error if failure, otherwise errorOk */ errorret_t shaderSetMatrix( shader_t *shader, const char_t *name, mat4 matrix ); /** * Sets a texture uniform in the shader. This is platform dependant. * * @param shader Shader to set the texture in * @param name Name of the uniform to set * @param texture Texture to set * @return Error if failure, otherwise errorOk */ errorret_t shaderSetTexture( shader_t *shader, const char_t *name, texture_t *texture ); /** * Sets a color uniform in the shader. This is platform dependant. * * @param shader Shader to set the color in * @param name Name of the uniform to set * @param color Color to set * @return Error if failure, otherwise errorOk */ errorret_t shaderSetColor( shader_t *shader, const char_t *name, color_t color ); /** * Sets a material's properties in the shader. This is platform dependant. * the definition's upload function pointer. * * @param shader The shader to upload material properties to. * @param material The material data to upload. * @return Error if failure, otherwise errorOk. */ errorret_t shaderSetMaterial( shader_t *shader, const shadermaterial_t *material ); /** * Disposes of a shader. This is platform dependant. * * @param shader Shader to dispose * @return Error if failure, otherwise errorOk */ errorret_t shaderDispose(shader_t *shader);