Glossary

billboard, flat card

Terms used to describe the actual geometry used for impostors that are based on rendering camera-aligned shapes.

impostor

Any object who's geometry does not even superficially resemble the final rendered product. In these cases, the mesh geometry is usually just a way to designate an area of the screen to draw to, while the fragment shader does the real work.

ray tracing

For the purposes of this book, ray tracing is a technique whereby a mathematical object is tested against a ray (direction + position), to see if the ray intersects the object. At the point of intersection, one can generate a normal. With a position and normal in hand, one can use lighting equations to produce an image.

early depth test, early-z

An optimization in the depth test, where the incoming fragment's depth value is tested before the fragment shader executes. If the fragment shader is long, this can save a great deal of time. If the fragment shader exercises the option to modify or replace the fragment's depth, then the early depth test optimization will not be active.

interleaving

A way of storing vertex attributes in a buffer object. This involves entwining the attribute data, so that most or all of each vertex's attributes are spatially adjacent in the buffer object. This is as opposed to giving each vertex attribute its own array. Interleaving can lead to higher rendering performance in vertex transfer limited cases.

geometry shaders

A programmable stage between the vertex shader and the clipping/rasterization state. Geometry shaders take a primitive of a certain type as input, and returns zero or more primitives of a possibly different type as output. The vertex data taken as input does not have to match the vertex data taken as output, but the geometry shader's output interface must match that of the fragment shader's input interface.

interface block

A ordered grouping of uniforms, shader inputs or shader outputs. When used with uniforms, these are called uniform blocks. These are useful for name scoping, so that inputs and outputs can use the name that is most convenient and descriptive.

Fork me on GitHub