DX11エフェクトシステムの作成 Part1 FXファイル解析

DirectX11ではEffect関連の機能が削除されていて、使用するには別途公開されているEffects11ソースコードが必要なります。しかし、その説明には古いコードの移植支援とあるため、あまり推奨されているものではないようです。
そこで、EffectのFXファイルを使用した独自のエフェクトシステムを作成してみます。
まず最初はFXファイル(HLSL)の字句解析と構文解析を行い必要な情報を取得できるようにします。


エフェクトシステム概要

とりあえず名前を”zgFX”
必要最小限の機能のみ実装、エフェクトやシェーダコードの情報取得を主な目的とする。

対応機能

・各種ステート定義
・techniqueとpass
・passでのステート設定、コンパイル設定
・変数情報の取得(機能限定)


FXファイル(HLSL)の解析

FXファイル仕様 Effect Format (Direct3D 11)

検証用に使用したFXファイル
※一部の仕様のみに対応

プロプロセス

コメントや#include、#defineなどはD3DPreprocessを使用。
使用方法は「D3DPreprocessでプリプロセス」

字句解析

特別な処理はありません。再利用できるように、字句解析とプリプロセスはzgFXから分離しておきます。
識別子(変数名など)、キーワード、数値、演算子を解析しそのID(enum定義)と文字列、数値を順次取得していきます。

構文解析

FXファイルの仕様に従って、必要な情報を取得します。シェーダ関数や構造体定義などはスキップするので複雑な解析処理はありません。定義された文字列や数値を取得するのみ。なので既存の構文解析ライブラリなどは使用しません。


サンプルプログラム

エフェクトシステム作成Part1 FXファイル解析

“DX11エフェクトシステムの作成 Part1 FXファイル解析” をダウンロード dx11Effect0.zip – 12 回のダウンロード – 18 KB

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

認証:数字を入力してください(必須) * Time limit is exhausted. Please reload CAPTCHA.