Screen('OpenOffscreenWindow')

[windowPtr,rect]=Screen('OpenOffscreenWindow',windowPtrOrScreenNumber [,color] [,rect] [,pixelSize] [,specialFlags] [,multiSample]);

オフスクリーンウィンドウを開きます。これはウィンドウとして扱われますが、単純に言えばOpenGLのテクスチャですので、そこに様々な描画ができます。

オフスクリーンウィンドウの機能は、OS9で動作していた古いプログラムのため、もしくは、高速にキャンバスを描画するためのテクスチャとして使用することもできます。ただし、Matlabのイメージ行列を使って高速に描画するのであれば、Screen('MakeTexture') を代わりに使用するほうがよいでしょう。(訳注:円のような幾何学図形をイメージ行列で準備するのは手間がかかるので、OpenOffscreenWindow関数を使うメリットはあると思います)

スクリーンを指定する場合は、windowPtr もしくは、0以上のscreenNumberを使用します。

screenNumber=-1 にした場合は、スクリーンを指定していないことになります。

しかし、OpenOffscreenWindow関数を呼び出した時点で、すでにスクリーンウィンドウを開いていることになります。

"color" はclut index でスカラー(単一の数字)またはRGB値(+透明度 a)で指定されます。"color"はそれぞれのピクセルの初期背景色に割り当てられ、デフォルト(colorの指定をしない場合)は白になります。

"rect" はオフスクリーンウィンドウのサイズを表します。少なくとも1つのピクセルを含んでいなければいけません。

”windowPtr ”が指定された場合は、rectはウィンドウ座標(左上が原点)になり、デフォルトではウィンドウ全体を表します。

"screenNumber"が指定された場合は、rectはスクリーン座標(左上が原点)になり、デフォルトではスクリーン(画面)全体を表します。

"screenNumber"が-1の場合は、"rect"はメインスクリーンのサイズになります。

(いずれの場合も、今後のオフスクリーンウィンドウの扱いでは、ここで決定された座標系を使用することになります)

"pixelSize"はビット深度(色深度、カラー深度)を表します。

"screenNumber"が-1の場合は、デフォルトのpixelSizeは32ですが、8, 16, 24, 32を指定することが可能です。

pixelSizeが0もしくは指定されていないときは、デフォルトの32に置き換えられます。

screen numberまたはwindowPtrが指定されているときは、pixelSizeのデフォルトはスクリーンまたはウィンドウのものと同じになります。

プログラムをimaging pipeline を有効にした状態(Screen('OpenWindow') の imagingmode flag > 0 の場合)すべてのオフスクリーンウィンドウはRGBAの4チャンネルを持っており、ビット深度についても64ビットと128ビットが追加で選択できるようになります。これはカラーコンポーネントごとに16ビットまたは32ビットの浮動小数点精度をもっていることと同じです。

もし64ビットを選択し、ハードウェアが浮動小数点精度をサポートしていなかったら、カラーチャンネルごとに15ビットの精度(符号つき整数)が代わりに使われます。

(訳注:ビット深度のことをきちんと理解していないため、訳に誤りがあるかもしれません)

'specialFlags'はオプションの引数で、デフォルトはゼロです。

2を指定すると高い精度でオフスクリーンウィンドウが描画されます。

詳しくはScreen('DrawTexture') のspecialFlagsをご覧ください。

'multiSample' はオプションの引数で、アンチエイリアシングで使われるサンプル数を表します。デフォルトはゼロで、アンチエイリアシングはなされません。

"multisample" に0より大きい値が指定され、システム(パソコン?)がオフスクリーンウィンドウへのアンチエイリアシング描画をサポートし、imaging pipelineが有効であれば、少なくとも指定されたサンプル数(ピクセルごと)でアンチエイリアシングを試みます。ただし、ハードウェアがmulitSampleで指定された数値に対応していない場合は、より低い値で扱われます。

Screen('TransformTexture') またはScreen('DrawTexture') を使用する場合は、オフスクリーンのアンチエイリアシングは直接は使用されませんので注意してください。(これはハードウェアの限界です)

アンチエイリアシングされたオフスクリーンウィンドウの刺激を使用する場合は、まず(オンスクリーンと?)同じrectとpixelSizeを持ったオフスクリーンウィンドウを作成し、

Screen('CopyWindow', antialiasedWindowhandle, normalWindowhandle);

を使用してください。

※imaging pipelineが無効の場合は、multiSampleは無視されます。

NOTE: Screen's windows are known only to Screen and must be closed by it, e.g.,

Screen('Close', w). Matlab knows nothing about Screen's windows, so the Matlab

CLOSE command won't work on Screen's windows.

(MatlabのCLOSEコマンドではオフスクリーンウィンドウは消せないから、Screen('Close', w)を使ってください、という意味かな?)