OGSFX preprocessor directives

Add the following preprocessor directives to include conditionals in your shader code. This is most useful when you only want to run a block of code under certain conditions; for example, to execute code only during a specified shader stage; or, if to specify the version of OGSFX that should be used to compile the shaders.

To specify the version of OGSFX used to compile the shader

#version versionNumber

If specified, this directive must be the very first line of the file. It specifies the version of OGSFX that should be used to compile/link the shaders.

OGSFX           GLSL            OpenGL version
#version 100    #version 150    OpenGL 3.2
#version 150    #version 150    OpenGL 3.2
#version 330    #version 330    OpenGL 3.3  * default for Windows and Linux
#version 400    #version 400    OpenGL 4.0
#version 410    #version 410    OpenGL 4.1
#version 420    #version 420    OpenGL 4.2  * default for OS/X
#version 430    #version 430    OpenGL 4.3

To enable/disable an internal feature

#pragma pragmaName : Boolean

Currently, only the following pragma are available:

#pragma Usecb : true            // Use constant buffers (default - true)
#pragma OptimizeUniforms : true // Optimize uniforms by packing them into a single constant buffer (default - true)

To print error messages

#error "Should not be there!"

This directive causes the implementation to write a diagnostic message to the shader’s information log. The message will be the tokens following the #error directive, up to the first new-line. The implementation must then consider the shader to be ill-formed.

To import additional shader files

#include "resources.ogsfh"

The #include directive instructs the preprocessor to treat the contents of the specified file as if it exists in the source program, at the point where the directive appears.

If conditionals

#if, #ifdef, #ifndef, #else, #elif, and #endif are defined to operate as are standard for ANSI C preprocessors.

#define and #undef are defined as are standard for ANSI C preprocessors for macro definitions, both with and without macro parameters.

Expressions following #if and #elif are restricted to expressions operating on literal integer constants, plus identifiers consumed by the defined operator. Character constants are not supported.

Defining shader stages

#vertexshader
#pixelshader
#geometryshader
#tessevalshader
#tesscontrolshader
#endshader

These directives can be used to enable code for a specified shader stage: All code delimited by the pair #vertexshader ... #endshader is compiled only on the vertex shader. Similarly, code delimited by #pixelshader ... #endshader or #geometryshader ... #endshader is compiled only on the pixel or geometry shader.