diff options
-rw-r--r-- | include/shader.h | 12 | ||||
-rw-r--r-- | src/shader.c | 24 |
2 files changed, 30 insertions, 6 deletions
diff --git a/include/shader.h b/include/shader.h index 771ea4a..552af5d 100644 --- a/include/shader.h +++ b/include/shader.h @@ -34,6 +34,18 @@ enum honey_shader_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. + */ +enum honey_shader_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 diff --git a/src/shader.c b/src/shader.c index cba83f7..b7f2916 100644 --- a/src/shader.c +++ b/src/shader.c @@ -37,7 +37,24 @@ enum honey_shader_result honey_shader_load(honey_shader* shader, /* load fragment shader code */ char* fragment_shader_code = read_file(fragment_shader_path); - /* compile shaders */ + result = honey_shader_new(shader, + vertex_shader_code, + fragment_shader_code); + + free(vertex_shader_code); + free(fragment_shader_code); + + return result; +} + +/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ + +enum honey_shader_result honey_shader_new(honey_shader* shader, + char* vertex_shader_code, + char* fragment_shader_code) { + enum honey_shader_result result; + + /* compile shaders */ int success; char error[512]; @@ -79,12 +96,7 @@ enum honey_shader_result honey_shader_load(honey_shader* shader, glDeleteShader(vertex_shader); glDeleteShader(fragment_shader); - free(vertex_shader_code); - free(fragment_shader_code); - result = SHADER_OK; - - return result; } /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ |