108 lines
2.8 KiB
C
108 lines
2.8 KiB
C
/**
|
|
* 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); |