シェーダ コードに条件を含めるには、次のプリプロセッサ命令を追加します。これは特定の条件下でコードのブロックの実行のみを行う場合に最も便利です。たとえば、指定したシェーダ ステージのみでコードを実行する場合や、シェーダをコンパイルするのに使用する 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、#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 で区切られたコードは、ピクセル シェーダまたはジオメトリ シェーダでのみコンパイルされます。