eaiser use of OpenGL and GLSL shaders



A nimrod library for interfacing with video graphics accelerators

Phosphor centers around the TDrawObject structure. This structure contains all the information needed to issue a draw call, save for things like the viewport size and clear color. To create a DrawObject you call initDrawObject with a handle to a shader program. Phosphor inspects the shader program and populates its internal data structures before returning a new DrawObject to you.

Phosphor keeps track of the names and locations of uniform blocks and sampler variables in your shader so that you can set them with the standard . syntax. So for example if I had a shader like

#version 140
out vec4 outputColor;
uniform ColorBlock {
  vec4 color;
void main() {
  outputColor = color;

I could populate the ColorBlock uniform block by simply writing obj.ColorBlock = [0.0'f32m 1.0, 0.0, 1.0] in nimrod. This works for more than just literal arrays, any kind of structure that has the same data layout as the uniform block can be used. For this reason it is recommended that you use the std140 layout on your uniform interface blocks.

A similar syntax can be used to attach textures to shaders, note that textures are attached directly to samplers, there is no need to bind a texture to an image unit and then bind the sampler to the same image unit. The rationale for this is that the library handles assigning image units and could even decide to use bindless textures if the graphics card supports them.

Textures are not managed through Phosphor, API texture handles (GLuints) are directly assigned to samplers, there are many image loading libraries out there already, the examples use the FreeImage library.

Need help? Read Nimble
No tagged versions available
License: MIT

Project website Hosted docs