Sce.PlayStation.Core.Graphics はグラフィクス描画のための機能を提供します。機能モデルとしてOpenGL ES 2.0をベースとしています。
Contents
GraphicsContextはグラフィクス描画全体を制御するクラスであり、OpenGLにおけるグラフィクスコンテキストを表します。このクラスのコンストラクタでグラフィクスデバイスとスクリーンの初期化をおこない、このクラスのメンバー関数でグラフィクス描画をおこないます。
GraphicsContextはグラフィクスデバイスとスクリーンをシステムの標準的な設定で初期化します。必要ならば引数でスクリーンサイズとピクセル形式を指定することができます。グラフィクスデバイスの能力や実際のスクリーンサイズとピクセル形式は初期化後に取得することができます。
グラフィクス描画をおこなうには、以下で説明するグラフィクスオブジェクトをあらかじめ作成しておき、GraphicsContextのメンバー関数を使用して、グラフィクスオブジェクトやレンダーステートを設定してプリミティブを描画します。
ShaderProgramはシェーダー機能を制御するクラスであり、OpenGLにおけるプログラムオブジェクトを表します。頂点シェーダーとフラグメントシェーダーの組み合わせによって構成され、それらのシェーダープログラムが格納されたファイルから作成します。
ShaderProgramは複数のユニフォーム変数と複数のアトリビュート変数を保持します。ユニフォーム変数には値を設定することができ、アトリビュート変数には頂点データを連続的に転送することができます。これらの変数は番号によってアクセスされます。必要ならばアプリケーションに便利なように、これらの変数を特定の番号にバインドすることもできます。
シェーダーファイルの拡張子は.cgxで、Cg言語で記述されたソースコードから変換されたバイナリです。ソースコードの拡張子は.vcg .fcgまたは.vp.cg .fp.cgとしてください。ソースコードの拡張子が.vcg .fcgならば同じ名前の頂点シェーダーとフラグメントシェーダーが1つのファイルに格納されます。
VertexBufferは頂点データを格納するクラスであり、OpenGLにおける頂点バッファオブジェクトを表します。必要に応じて複数の頂点配列、一つのインデックス配列を格納することができ、サイズと形式を指定して作成します。
VertexBufferはGraphicsContextに複数設定することができます。頂点配列はそれぞれ順番にShaderProgramのアトリビュート変数に関連づけられます。
複数のインデックス配列が有効な場合は、最後のものが使用されます。
Textureはピクセルデータを格納するクラスであり、OpenGLにおけるテクスチャオブジェクトを表します。Texture2D、TextureCubeなどの派生クラスがあり、画像ファイルから作成するかサイズと形式を指定して作成します。
TextureはGraphicsContextに複数設定することができます。テクスチャはそれぞれ順番にShaderProgramのサンプラーに関連づけられます。
利用可能な画像フォーマットはDDS, PNG, JPG, BMP, GIF(ただしアニメーションGIFは非対応)です。
FrameBufferはレンダリング結果の格納先を制御するクラスであり、OpenGLにおけるフレームバッファオブジェクトを表します。レンダリング結果の格納先をスクリーン以外の別のバッファに変更することでオフスクリーンレンダリングをおこなうことができます。
FrameBufferにはカラーの格納先とデプスの格納先を設定することができます。ColorBufferはカラーの格納先に、DepthBufferはデプスの格納先に設定することができます。Textureは生成時にRenderableオプションが指定されていれば、カラーの格納先に設定することができます。
カラーの格納先とデプスの格納先の組み合わせによってはレンダリングできない場合があります。現在の組み合わせがレンダリング可能かどうかはFrameBuffer.Statusプロパティで確認することができます。
ColorBuffer、DepthBufferはレンダリング結果を格納するクラスであり、OpenGLにおけるレンダバッファオブジェクトを表します。ColorBufferにはカラー値を、DepthBufferにはデプス値とステンシル値を格納することができ、サイズと形式を指定して作成します。
ColorBuffer、DepthBufferはGraphicsContextに設定することはできません。これらはFrameBufferに設定して使用します。
現在のバージョンでは、以下の機能は使用できません。
またデバイス性能は、以下の値に制限されます。
シェーダー記述には、通常の Cg 言語に比べて以下のような制限があります。
vertex shader の入力に指定可能なセマンティクスは以下のとおりです
vertex shader の出力に指定可能なセマンティクスは以下のとおりです
fragment shader の入力に指定可能なセマンティクスは以下のとおりです
fragment shader の出力に指定可能なセマンティクスは以下のとおりです
グラフィクスオブジェクトは、アプリケーションが管理するリソースヒープに加えて、デバイスドライバが管理するグラフィクスメモリを消費します。VertexBuffer, ShaderProgram などのオブジェクトは、リソースヒープとグラフィクスメモリを必要とします。
一方 Texture2D, TextureCube, ColorBuffer, DepthBuffer などの PixelBuffer オブジェクトは、SDK 1.20 まではリソースヒープを必要としていましたが、SDK 2.00 からは不要となりました。現在のバージョンではグラフィクスメモリだけを必要とします。
グラフィクスメモリの容量はおよそ 96 MiB です。このサイズを変更することはできません。