省型旧形国電の残影を求めて

戦前型旧形国電および鉄道と変褪色フィルム写真を中心とした写真補正編集の話題を扱います。他のサイトでは得られない、筆者独自開発の写真補正ツールや補正技法についても情報提供しています。写真補正技法への質問はコメント欄へどうぞ

ART / CTL プログラミング Tips: 引数の指定で注意すべきこと

f:id:yasuo_ssi:20210904211415j:plain

 これから、ART Ver. 1.21 からサポートされた CTL によるプログラミングについて気付いたことを、気が向いたときに書いてみたいと思います。

 今回は、関数における引数の指定についてです。まず典型的な関数の宣言パターンですが...

 

void
adjustExposure
(output varying half rOut,
output varying half gOut,
output varying half bOut,
varying half r,
varying half g,
varying half b,
float e = 0)
{
...
}

 

引数で使用する際に指定する固有の型

1. 引数が input か output か?

 この function 宣言では 7 つの引数を取っています。そのうち rOut, gOut, bOut に関しては、 output と書かれています。引数には、input 型と output 型があり、戻り値としては、 output 型を指定します。型を指定しない場合は、input 型と解釈されます。input と明示的に指定しても構いません。また input 型の引数に対して、function 内で書き換えることはできず、変数ならぬ固定数として扱われます。

 

2. 引数が varying か uniform か?

 input / output とは別の区分として、 varying 型か uniform 型か、というのがあります。varying 型は 色チャンネルに関する変数、uniform 型はそれ以外の変数です。型を明示しない場合は uniform 型として扱われます。色チャンネルに関する変数を varying 型として読み込まないと、その変数を使って色チャンネルを直接操作することができません。

 

 以上は、引数を指定する際のみに指定する型ですが (通常の型宣言では使えません)、もちろんそれに併せて通常のデータ型も指定しなければなりません。通常のデータ型は次の5つです。

bool: true または false の2値を取るデータ
int: 32 bit 整数データで正または負の値を取る - 2147483647 ~ 0 ~ 2147483647 の範囲
unsigned int: 正負記号のない32bit 整数データ 0 ~ 4294967296 の範囲
float : 32 bit 浮動小数点データ。なお ART の場合、rgb データは 0 ~ 1.0 の範囲の32bit 浮動小数点データになる
half: 16 bit 浮動小数点データ
void: 戻り値のない function

データ型は 引数及び、引数を取る function 自体に対しても宣言します。

文字列型変数はサポートしていないようです。