画面仕様

画面要素について

プチコン4の画面は次の要素で構成される

スクリーン

文字通り、画面全体を指す。
画面全体に関係する要素として、解像度の指定(XSCREEN)、背景色の指定(BACKCOLOR)、フェーダの指定(FADE)が可能。

グラフィックページ

グラフィックページはグラフィック描画命令の描画先であり、スプライトやテキストスクリーンの描画素材置き場としても使われる。

グラフィックページはGRP0~GRP5の6ページ、他に特殊なグラフィックページとしてGRP-1が存在する。
GRP0~GRP5のグラフィックページはそれぞれ2048x2048の大きさを持ち、1ピクセル32bit、ARGB8888でピクセルデータを格納できる。
GRP-1は特殊なグラフィックページで、書き込みができず、参照すると座標に関わらず、常に白いピクセル(&HFFFFFFFF)が参照される。
GRP5はテキストフォント格納用ページとなっており、読み書きは自由に行えるが、ページ内容を書き換えるとテキスト表示が崩れる。GRP5は別名GRPFとも呼ばれる。

テキストスクリーンとスプライトは描画素材としてグラフィックページを1ページ指定できる。また、グラフィック描画は描画先グラフィックページとして1ページ指定できる。画面要素とグラフィックページのデフォルトの割り当ては次の通り。

テキストスクリーン(通常文字) GRP5 変更不可
テキストスクリーン(ユーザー定義文字) テキスト面毎に任意。デフォルトではGRP4(1024,0) TPAGEで変更可
スプライト スプライト毎に任意。デフォルトではGRP4(0,0) SPPAGEで変更可

テキストスクリーン

プチコン4では文字描画を行うためのテキストスクリーンを5枚持っており、0~4までの番号で表す。
テキストスクリーン4は特別なテキスト面で、BASICインタプリタの出力や従来のPRINT,INPUTといったコンソール出力命令の出力先として用いる。
(が、それらを無視して下記の機能を使用する事も可能)

テキストスクリーンでは、8x8、もしくは16x16のフォントを等倍以上のサイズで表示できる。フォントの表示設定はテキスト面毎に変更可能。
フォントは通常フォントと、ユーザー定義フォントの2種類を併用可能。
通常フォントはGRPFに格納されたフォントデータを意味し、一般的な文字はこちらを使用して表示する。
ユーザー定義フォントは文字コード&HE800から&HF7FFまでの4096文字で、この範囲の文字コードを表示した場合、通常フォントとは別に設定できるユーザー定義フォント用ページから任意の512x512(8x8フォントの場合。16x16フォントの場合は1024x1024)ピクセルの領域をフォント画像として表示する。

テキストスクリーンでは、文字単位で次のアトリビュートを設定可能。

・色
・回転(0°90°180°270°)
・上下反転
・左右反転

またテキストスクリーン単位で次のアトリビュートを設定可能

・色
・ブレンド方法(通常、加算)
・表示位置
・Z
・ホーム座標(表示位置、回転、拡大の原点)
・回転(任意角度)
・拡大

グラフィックハードウェアの仕様により、本来参照されるべきフォントピクセルの隣接ピクセルが参照される事がある。
回転・拡大や、表示位置・ホーム座標の値に実数値を使用するとこのような現象が発生しやすくなるので注意が必要。

グラフィック描画

プチコン4のグラフィック描画機能は、グラフィックページに対して任意の描画を行える機能として実装されている。
そのため、通常のグラフィック描画機能として使用する以外に、スプライトやフォントの画像を準備する機能としても使用する。
具体的には、グラフィック描画はすべてのグラフィックページに対して描画可能となっていて、現在スプライト等に使用中のグラフィックページに対してもリアルタイムに描画可能となっている。
プチコン4はグラフィック面独自の表示を持たず、かわりにスプライトのうち1枚をグラフィック描画用として使用する。

スプライト

スプライトは、グラフィックページの任意の矩形領域にさまざまな変形を施して描画できる。システム内で最大4096個のスプライトを表示可能。
定数#GSPRITEで参照できるスプライト(プチコン4の場合4095番)はデフォルトではグラフィック表示に使用され、ACLSやXSCREENを使用するとグラフィック表示向けに設定内容がリセットされる。(グラフィック表示が必要ない場合は、その後再設定する事で通常スプライトとして使用する事もできる)

スプライトは個々に次のパラメータを設定可能

・参照グラフィックページ
・参照座標(UV)
・UV回転(0°90°180°270°)
・UV上下反転
・UV左右反転
・色
・ブレンド方法(通常、加算)
・表示位置
・Z
・ホーム座標(表示位置、回転、拡大の原点)
・回転(任意角度)
・拡大

グラフィックハードウェアの仕様により、本来参照されるべき参照画像ピクセルの隣接ピクセルが参照される事がある。
回転・拡大や、表示位置・ホーム座標の値に実数値を使用するとこのような現象が発生しやすくなるので注意が必要。
この現象を厳密に回避するには、隣接するスプライト画像間に透明色で1ピクセル分すきまを空けておくと良い。

レイヤー

レイヤーは表示要素(テキストスクリーンとスプライト)のグループ分けをし、特殊効果や特殊合成を行うための機構となる。

レイヤーの枚数と優先度

レイヤーは0~7まで8枚存在し、7,6,5,4,3,2,1,0と降順に描画される。その結果、数字が小さいほど手前に描画される。

テキストスクリーンはTLAYER、スプライトはSPLAYERで所属レイヤーを変更できる。レイヤーを変更すると、表示要素の表示優先度よりレイヤーの表示優先度が優先されるため、最終の表示優先度が変わるので注意が必要。

レイヤー効果:描画行列のカスタマイズ

LMATRIX命令を用いて、レイヤー内の要素に適用される変換行列をカスタマイズできる。4x4の独自の行列を指定して従来の2D表現を超えた表現や、2D変換パラメーターを指定して平行移動・拡大縮小・回転を自由に行う事ができる。

レイヤー効果:クリッピング

LCLIP命令でレイヤー所属要素を描画する際のクリッピング領域を指定できる。

レイヤー効果:フィルター

LFILTER命令でレイヤー全体にぼかしやモザイクといった特殊効果をかける事ができる

レイヤー効果:合成

LAYER命令でレイヤー間の合成方法を変更することができる。通常・加算・乗算合成を行ったり、合成時に色を乗算する事ができる。

座標系

すべての画面要素は、左上を原点として右下方向を正とする座標系を取る。また奥行き(Z)は画面要素の表示優先度として使われ、一番奥が4095、一番手前が-4095となる。

表示優先度について

テキストとスプライトは、個別に表示優先度を設定できる。1つのレイヤー内では表示優先度は値が小さいほど手前に表示される。
また、同一優先度の表示要素間では、次の順序で表示される。

・テキスト間ではIDが小さいほど手前に表示される。
・スプライト間ではIDが小さいほど手前に表示される。
・テキストとスプライトではIDに関係なく常にスプライトが手前に表示される。

スプライトの初期表示優先度は0となっている。
テキストの初期表示優先度は4番が-4095、それ以外が0となっている。

レイヤーが異なる場合、レイヤーIDが小さいほど手前に表示される。

色について

描画は全てアルファチャネルつきの32bitカラー(ARGB8888)で行わる。

過負荷モードについて

GPUの描画処理時間が6V(1/10秒)を超えると、過負荷モードが発動する。
過負荷モードになると画面に過負荷モードを知らせる警告が表示され、実行中のプログラムは強制的に停止し、表示中のスプライト表示がすべてオフとなる。
過負荷状態が解消されると警告が消えて通常通り使用できるようになるが、スプライトの表示は戻らないため、ACLS命令等を実行して画面をリセットする必要がある。