OGSFX プリプロセッサ命令

シェーダ コードに条件を含めるには、次のプリプロセッサ命令を追加します。これは特定の条件下でコードのブロックの実行のみを行う場合に最も便利です。たとえば、指定したシェーダ ステージのみでコードを実行する場合や、シェーダをコンパイルするのに使用する OGSFX のバージョンを指定する場合などです。

シェーダのコンパイルに使用する OGSFX のバージョンを指定するには

#version versionNumber

指定する場合は、ファイルの 1 番最初の行をこの命令にする必要があります。これにより、シェーダのコンパイルとリンクに使用される OGSFX のバージョンが指定されます。

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

内部機能を有効/無効にするには

#pragma pragmaName : Boolean

現在は、次のプラグマを使用できます。

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

エラー メッセージをプリントするには

#error "Should not be there!"

この命令は、診断メッセージをシェーダの情報ログに書き込むための実装に影響を与えます。メッセージは #error 命令に続くトークンとなり、最初の改行までとなります。実装では、シェーダが不適格になることを考慮する必要があります。

その他のシェーダ ファイルを読み込むには

#include "resources.ogsfh"

#include 命令は、命令を発行したポイントで、指定したファイルの内容がソース プログラム内に存在するかのように扱うことをプリプロセッサに指示します。

If 条件

#if#ifdef#ifndef#else#elif#endif は、ANSI C プリプロセッサの標準として動作するために定義されています。

#define#undef は、マクロ定義、およびマクロ パラメータあり/なし用の ANSI C プリプロセッサの標準として定義されています。

#if および #elif に続く式は、リテラル整数定数で動作する式か、定義された演算子によって使用される識別子に制限されています。文字定数はサポートされていません。

シェーダ ステージを定義する

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

これらの命令は、指定したシェーダ ステージのコードを有効にするために使用できます。#vertexshader ... #endshader のペアによって区切られたすべてのコードは、頂点シェーダのみでコンパイルされます。同様に、#pixelshader ... #endshader または #geometryshader ... #endshader で区切られたコードは、ピクセル シェーダまたはジオメトリ シェーダでのみコンパイルされます。