Name Mode Size
test 040000
.gitignore 100644 0 kb
LICENSE 100644 1 kb
Makefile 100644 1 kb
README.md 100644 3 kb
shader.cpp 100644 13 kb
shader.hpp 100644 5 kb
str.hpp 100644 1 kb
README.md
# `glshader` A C++11 helper for [OpenGL][] >=2.0 [shaders][Shader]. `glshader` can load an arbitrary number of [shaders][Shader] with the type autodetected by the file extension (using the same rules as the [OpenGL / OpenGL ES Reference Compiler][]). [Uniforms][Uniform] are set with a unified interface (using template specialization). Data can be provided by [OpenGL Mathematics (GLM)][] objects (which uses [OpenGL Shading Language (GLSL)][] naming conventions). For other types of data [uniform blocks][Uniform block] are used with (shared, per name) [Uniform Buffer Object (UBO)][] backing (beware of alignment). UBOs can also be accessed directly and bound to a uniform block by name. The expected usage pattern (as used by [`glBufferData`][]) can optionally be specified (defaults to `GL_DYNAMIC_DRAW`). For example: ```cpp Shader shader({ "test.vert", "test.frag", }); shader.use(); glm::vec4 color(1, 0, 0, 1); shader.uniform("color", color); struct Matrices { glm::mat4 view; glm::mat4 projection; } matrices; // Either: shader.uniform("matrices", matrices); // or: Shader::ubo("matrices", matrices); shader.uniform("matrices", "matrices"); ``` Errors are handled by throwing [`std::runtime_error`][] with a [`what()`][] that returns helpful context as well as the OpenGL info log where appropriate. See the [tests](#tests) source for an overview of (some of) the generated error messages. [OpenGL]: https://www.opengl.org [Shader]: https://www.khronos.org/opengl/wiki/Shader [Uniform]: https://www.khronos.org/opengl/wiki/Uniform [Uniform block]: https://www.khronos.org/opengl/wiki/Interface_Block_(GLSL)#Uniform_blocks [Uniform Buffer Object (UBO)]: https://www.khronos.org/opengl/wiki/Uniform_Buffer_Object [`glBufferData`]: https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glBufferData.xhtml [OpenGL / OpenGL ES Reference Compiler]: https://www.khronos.org/opengles/sdk/tools/Reference-Compiler/ [OpenGL Mathematics (GLM)]: https://glm.g-truc.net [OpenGL Shading Language (GLSL)]: https://www.khronos.org/opengl/wiki/OpenGL_Shading_Language [`std::runtime_error`]: https://en.cppreference.com/w/cpp/error/runtime_error [`what()`]: https://en.cppreference.com/w/cpp/error/exception/what ## Tests A test, using [GLFW][], is provided in [`test/`](test/) and can be run with `make test` from the repository root. [GLFW]: https://www.glfw.org/ ## Dependencies The [OpenGL Extension Wrangler (GLEW)][] library is used for extension loading. [`str.hpp`][] is bundled. Installing dependencies on a Linux distribution using the [APT package manager][] can be done with: ```sh // Library dependencies. sudo apt-get install \ libgl1-mesa-dev \ libglew-dev \ libglm-dev // Test dependencies. sudo apt-get install \ libglfw3-dev ``` [OpenGL Extension Wrangler (GLEW)]: http://glew.sourceforge.net [`str.hpp`]: https://git.rcrnstn.net/rcrnstn/str.hpp [APT package manager]: https://en.wikipedia.org/wiki/APT_(software) ## License Licensed under the [ISC license][], see the [`LICENSE`](LICENSE) file. [ISC license]: https://en.wikipedia.org/wiki/ISC_license