diff options
Diffstat (limited to 'src/shader/shader.h')
-rw-r--r-- | src/shader/shader.h | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/src/shader/shader.h b/src/shader/shader.h new file mode 100644 index 0000000..07cc22d --- /dev/null +++ b/src/shader/shader.h @@ -0,0 +1,117 @@ +/** @file shader.h + * + * @brief Functions to create, manipulate, and destroy GLSL shaders. + */ + +#ifndef HONEY_SHADER_H +#define HONEY_SHADER_H + +#include "../common.h" +#include "../light/light.h" + +typedef int honey_shader; + +/** @brief Load a shader. + * + * @param[out] shader Pointer to the shader destination + * + * @param[in] vertex_shader_path The path to the vertex shader source code + * @param[in] fragment_shader_path The path to the fragment shader source code + * + * @return The result of the shader load. + */ +honey_result honey_shader_load(honey_shader* shader, + char* vertex_shader_path, + char* fragment_shader_path); + +/** @brief Create a shader from code strings. + * + * @param[out] shader Pointer to the shader destination. + * @param[in] vertex_shader_code Zero-terminated string containing the vertex shader code to compile + * @param[in] fragment_shader_code Zero-terminated string containing the fragment shader code to compile + * + * @return The result of the shader creation. + */ +honey_result honey_shader_new(honey_shader* shader, + char* vertex_shader_code, + char* fragment_shader_code); + +/** @brief Set an integer uniform. + * + * @param[in] shader The shader to which the uniform belongs + * @param[in] int_name The name of the integer uniform + * @param[in] value The value of the integer uniform + */ +void honey_shader_set_int(honey_shader shader, + char* int_name, + int value); + +/** @brief Set a float uniform. + * + * @param[in] shader The shader to which the uniform belongs + * @param[in] float_name The name of the float uniform + * @param[in] value The value of the float uniform + */ +void honey_shader_set_float(honey_shader shader, + char* float_name, + float value); + +/** @brief Set a vec3 uniform. + * @param[in] shader The shader to which the uniform belongs + * @param[in] vector_name The name of the vec3 uniform + * @param[in] value The value of the vector uniform + */ +void honey_shader_set_vec3(honey_shader shader, + char* vector_name, + vec3 value); + + +/** @brief Set a mat3 uniform. + * + * @param[in] shader The shader to which the uniform belongs + * @param[in] matrix_name The name of the matrix uniform + * @param[in] value The value of the matrix uniform + */ +void honey_shader_set_mat3(honey_shader shader, + char* matrix_name, + mat3 value); + +/** @brief Set a mat4 uniform. + * + * @param[in] shader The shader to which the uniform belongs + * @param[in] matrix_name The name of the matrix uniform + * @param[in] value The value of the matrix uniform + */ +void honey_shader_set_mat4(honey_shader shader, + char* matrix_name, + mat4 value); + +/** @brief Set a point_light uniform. + * + * @param[in] shader The shader to which the uniform belongs + * @param[in] point_light_index The index of the light to set + * @param[in] light The honey_point_light to set + */ +void honey_shader_set_point_light(honey_shader shader, + int point_light_index, + honey_point_light light); + +/** @brief Set a directional_light uniform. + * + * @param[in] shader The shader to which the uniform belongs + * @param[in] directional_light_index The index of the light to set + * @param[in] light The honey_directional_light to set + */ +void honey_shader_set_directional_light(honey_shader shader, + int directional_light_index, + honey_directional_light light); + +/** @brief Use a shader. + */ +#define honey_shader_use glUseProgram + +/** @brief delete a shader. + */ +#define honey_shader_delete glDeleteProgram + +#endif |