コントロールのプライオリティについて

ウィンドウをレンダリングする際、メッシュを用います。

メッシュはテクスチャ一つに対して一つ用意されます。

これによって、コントロールの数が増えてもドローコールが増えないようになっています。

ただし、コントロール間のプライオリティについては気を付ける必要があります。

同一テクスチャ(=同一メッシュ)内で1回のドローコールでレンダリングされるコントロール間では、柔軟にプライオリティの変更が可能です。

それに対して、別のテクスチャ(=異なるメッシュ)間でのプライオリティは、テクスチャ間のプライオリティに依存します。

最初に、テクスチャでソートされ、次に同一テクスチャ内でプライオリティでソートされることになります。

例えば、次のウィンドウはメッシュ(テクスチャ)が4つで構成されています。

_images/CtrlPriority.png

このウィンドウは、フォントメッシュとテクスチャメッシュから構成されています。

  • fn40

  • fn30

  • 100_000_00001

  • 100_010_00000

同一のテクスチャIDが指定されているとき

コントロールのプロパティである、 PRIORITY によって設定可能です。

PRIORITY の値が大きいほど手前に表示されます。

BUTTON(Button) {
  ID = 001_000_00010;
  POSITION = 100,100;
  SIZE = 64;
  PRIORITY = 5;
};

プライオリティが同一の時

プライオリティが同一の時は、コントロールの種類に応じて自動的にソートされます。

上にあるものほど、手前にレンダリングされます。

  • SCROLLBAR

  • LISTBOX

  • LISTBOXEX

  • CONTAINER

  • TEXT

  • RICHTEXT

  • LOG

  • LOGTEXT

  • BUTTON

  • CHECKBOX

  • RADIO

  • HELPBUTTON

  • EDITBOX

  • TEXTBOX

  • METER

  • ICON

  • CARD

  • TEXTURE

  • RENDER

  • RENDERICON

  • RECASTICON

  • LINE

  • LABEL

  • FRAME

  • BAR

テクスチャIDが異なるとき

テクスチャIDが異なるときは、コントロールのプライオリティよりもテクスチャのZオフセットが優先されます。

テクスチャのZオフセットを設定するには、WINDOWのプロパティである、 TEXTURE_ZOFFSET を使います。

値が大きいものほど、奥に表示されます。

WINDOW(100_100_00010) {
  TEX_ID = DEFAULT_TEXTURE;
  STYLE = POPUP|NOFRAME|NOTITLEBAR;
  TEXTURE_ZOFFSET = 100_100_00000,-1;
  TEXTURE_ZOFFSET = 100_010_00000,1;
  POSITION = 0,0;
  SCREEN = 0,0,{100},{-BASEY};
  SIZE = WIN_W,WIN_H;
};

この例では、次の順番に表示されます。

  • 100_100_00000 手前

  • DEFAULT_TEXTURE

  • 100_010_00000 再背面

注釈

Zオフセットを明示的に指定しなかったとき、デフォルトテクスチャとして設定したメッシュより手前に、レンダリングされるようにシステム側でZオフセットを設定します。 その順番はシステム側で処理されるため、厳密に制御が困難です。 3枚以上のテクスチャを一つのウィンドウで使うときは、明示的に TEXTURE_ZOFFSET を指示するようにしてください。

注釈

レンダーターゲットとして生成されたメッシュについても、 TEXTURE_ZOFFSET でレンダリング順序を指定可能です。 RENDERRENDERICON を参照ください。