summaryrefslogtreecommitdiff
path: root/src/shader/shader.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/shader/shader.h')
-rw-r--r--src/shader/shader.h117
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