【Unity/ShaderLab】HLSLでもUNITY_INITIALIZE_OUTPUTを使う
UnityのHLSLを使ってるShaderLabでもUNITY_INITIALIZE_OUTPUT
を使いたい!
併せて警告されるOutput value 'vert' is not completely initialized
もなんとかしたい!
概要
この記事では、UnityのHLSLを使ってるShaderLabでもUNITY_INITIALIZE_OUTPUT
を使う手順を掲載する。
警告Output value 'vert' is not completely initialized
は、頂点シェーダーの戻り値の構造体を初期化しろや!みたいな感じ。
cgではUnityCG.cginc
に宣言されてるUNITY_INITIALIZE_OUTPUT
マクロを使って
UNITY_INITIALIZE_OUTPUT(v2f, o);
みたいな感じに初期化できるんだけども、hlslではこのマクロが存在しない。
仕様書
環境
- Unity 2022.2.4f1
手順書
下記はhlslでもUNITY_INITIALIZE_OUTPUT
マクロを使えるようにするサンプル。
#if defined(UNITY_COMPILER_HLSL)
#define UNITY_INITIALIZE_OUTPUT(type,name) name = (type)0;
#else
#define UNITY_INITIALIZE_OUTPUT(type,name)
#endif
というか、わざわざマクロを使わず、下記のように直接処理を書いても良い。
v2f o = (v2f)0;
まとめ(感想文)
警告が消えてスッキリだ!
分かればなんてこと無いんだけども、初学者には厳しいような。
参考文献・引用
下記のフォーラムの記事を参考にさせて頂きました。
ありがとうございました。