##### Kamui2 Library - 構造体/その他のデータ型

# KMSYSTEMCONFIGSTRUCT

システム設定情報構造体

### 定義

>     typedef struct _tagKMSYSTEMCONFIGSTRUCT
>     {
>          KMDWORD dwSize; /* Size Of KMSYSTEMCONFIGSTRUCT */
>          MDWORD flags; /* System Configuration Flags */
>          /* for Frame Buffer */
>          PPKMSURFACEDESC ppSurfaceDescArray; /* Array of SurfaceDesc Pointer */
>          union{
>               KMUINT32 nNumOfFrameBuffer; /* Number Of Frame Buffer */
>               KMUINT32 nStripBufferHeight; /* Height of Strip Buffer */
>          }fb;
>          /* for Texture Memory */
>          KMUINT32 nTextureMemorySize; /* Texture Memory size */
>          KMUINT32 nNumOfTextureStruct; /* number of Texture Control Structure */
>          KMUINT32 nNumOfSmallVQStruct; /* number of SmallVQ Texture Control Structure */
>          PKMDWORD pTextureWork; /* Pointer to kamui work area */
>          /* for Vertex Buffer */
>          PKMVERTEXBUFFDESC pBufferDesc; /* pointer to KMVERTEXBUFFDESC */
>          KMUINT32 nNumOfVertexBank; /* Number of VertexBank */
>          PKMDWORD pVertexBuffer; /* VertexBuffer Pointer */
>          KMUINT32 nVertexBufferSize; /* VertexBuffer Size */
>          KMUINT32 nPassDepth; /* Path Depth */
>          KMPASSINFO Pass[KM_MAX_DISPLAY_LIST_PASS]; /* Pass Information */
>          /* Reserve Area */
>          KMDWORD reserved00; /* reserved for future use */
>          KMDWORD reserved01; /* reserved for future use */
>          KMDWORD reserved02; /* reserved for future use */
>          KMDWORD reserved03; /* reserved for future use */
>          KMDWORD reserved04; /* reserved for future use */
>          KMDWORD reserved05; /* reserved for future use */
>          KMDWORD reserved06; /* reserved for future use */
>          KMDWORD reserved07; /* reserved for future use */
>     } KMSYSTEMCONFIGSTRUCT, *PKMSYSTEMCONFIGSTRUCT;

### メンバ

> dwSize | この構造体のサイズ
> flags | システム構成に関する各種指定
> ppSurfaceDescArray | フレームバッファのサーフェスディスクプリタのポインタの配列
> nNumOfFrameBuffer | フレームバッファの数
> nStripBufferHeight | ストリップバッファの高さ
> nTextureMemorySize | 最大テクスチャ使用サイズ
> nNumOfTextureStruct | テクスチャ管理構造体の最大数
> nNumOfSmallVQStruct | SmallVQテクスチャ管理構造体の最大数
> pTextureWork | テクスチャワークエリアのアドレス
> pBufferDesc | 頂点データバッファデスクリプタへのポインタ
> nNumOfVertexBank | 頂点のバンク数
> pVertexBuffer | メインメモリ上に確保した頂点バッファへのポインタ
> nVertexBufferSize | メインメモリ上に確保した頂点データバッファのサイズ(バイト)
> nPassDepth | 頂点のバンクのパス分割数
> Pass | パスの情報
> reserved00〜07 | リザーブ領域

### 解説

> メンバdwSizeには、KMSYSTEMCONFIGSTRUCT構造体のサイズを指定します。Sizeof(KMSYSTEMCONFIGSTRUCT)を設定してください。

> システム構成に関する各種指定を行なうメンバ flagsには次の値が定義されています。

> 定義 | 意味
> KM_CONFIGFLAG_ENABLE_CLEAR_FRAMEBUFFER | フレームバッファを確保時にバッファの内容をクリア
> KM_CONFIGFLAG_ENABLE_STRIPBUFFER | StripBuffer形式のフレームバッファを生成
> KM_CONFIGFLAG_ENABLE_2V_LATENCY | 2Vレイテンシモードの指定（これが指定されない場合は3Vレイテンシモードとなる）
> KM_CONFIGFLAG_NOWAITVSYNC | VSync割り込みを待たずにフレームバッファサーフェスを表示（これが指定されないと VSync割り込みを待つ）
> KM_CONFIGFLAG_SEPARATE_EACH_PASS | 各パス毎に頂点バッファを確保（KMPASSINFOの設定値が有効になる）。
> KM_CONFIGFLAG_NOWAIT_FINISH_TEXTUREDMA | テクスチャロード関数において、テクスチャをグラフィックメモリへDMA転送を起動した後、その終了を待たずに関数を終了する

> KM_CONFIGFLAG_NOWAIT_FINISH_TEXTUREDMAを指定した場合は、kmQueryFinishLastTextureDMA()関数でDMA転送の終了が確認できます。また、DMA転送中に転送元メモリへのアクセスは必ず避けるようにしてください。

> これらのフラグをORして設定します。どのフラグも指定しない場合はゼロを指定してください。

> メンバppSurfaceDescArrayには、各フレームバッファ用のKMSURFACEDESC型構造体へのポインタの配列を指定します。 なお、KMSTATUS_NOT_ENOUGH_MEMORYを返した場合にはこのフレームバッファ用構造体の内容は不定となります。 フレームバッファ用構造体の領域と、そこへのポインタの配列は、アプリケーション側で準備する必要があります。

> #### ■通常のバッファの場合(ストリップバッファでない場合)

> メンバnNumOfFrameBufferには、生成するフレームバッファサーフェスの数を指定します。 ppSurfaceDescArrayは、nNumOfFrameBufferを使用して次のように指定します。

> (例)フレームバッファサーフェスの数が2の場合

    KMSURFACEDESC Surface1;
    KMSURFACEDESC Surface2;
    PKMSURFACEDESC ppSurfaceArray[nNumOfFrameBuffer];
    ppSurfaceArray[0] = &Surface1;
    ppSurfaceArray[1] = &Surface2;
    ppSurfaceDescArray = ppSurfaceArray;

#### ■ストリップバッファの場合

メンバ nStripBufferHeightには、ストリップバッファの高さを設定します。32の倍数を指定してください。 メンバnTextureMemorySizeには、最大テクスチャ使用サイズ。これはネイティブデータバッファ領域の容量を決定するのに使用されます。 なお、このサイズは32バイトの倍数でなければなりません。 メンバnNumOfTextureStructには、Kanuiがテクスチャの管理に使用するテクスチャ管理構造体の最大数を指定します。 1つのテクスチャ／フレームバッファサーフェスそして1つの空き領域は、 1つの管理構造体を消費します。 テクスチャを全く使用しない場合でも、ネイティブデータバッファ、フレームバッファ とその他の空き領域のために最低3つ分の構造体用領域が必要です。 なお、この値は、kmuCalculateKamuiWorkareaSizeで求めることができます。 メンバnNumOfSmallVQStructには、Kanuiがテクスチャの管理に使用するSmallVQテクスチャ管理構造体の最大数を指定します。 SmallVQテクスチャは、下記に示すブロック数毎に1つのSmallVQテクスチャ管理構造体と1つのテクスチャ管理構造体を消費します。

SmallVQ size | ブロック数
8x8 | 16
8x8 mipmap | 16
16x16 | 16
16x16 mipmap | 16
32x32 | 8
32x32 mipmap | 4
64x64 | 2
64x64 mipmap | 1

SmallVQテクスチャを全く使用しない場合は、SmallVQテクスチャ管理構造体の最大数はゼロでもかまいません。 なお、この値は、kmuCalculateKamuiWorkareaSize()関数で求めることができます。 メンバpTextureWorkには、Kamuiワークエリアの先頭アドレスを与えます。 ここには、アプリケーションで使用するレンダリングパス・フレームバッファ／テクスチャの数より求められる容量のシステムメモリ領域を準備する必要があります。

なお、ここの容量は、kmuCalculateKamuiWorkareaSize()関数で求めることができます。 メンバpBufferDescには、 KMVERTEXBUFFDESC型の頂点データバッファデスクリプタへのポインタを入力します。 この構造体の領域はアプリケーション側で準備する必要があります。 この構造体は kmStartVertexStrip()関数、kmSetVertex()関数から参照されます。 メンバ nNumOfVertexBankには、 Vertexのバンク数を指定します。 メンバpVertexBufferaには、アプリケーションによりシステムメモリ上に確保した頂点バッファへのポインタをセットします。Kanuiはこれを頂点バッファのベースアドレスとして使用します。なお、このアドレスは32バイトアライメントされている必要があります。

メンバnVertexBufferSizeには、アプリケーションによりシステムメモリ上に確保した頂点データバッファのサイズ(バイト)を指定します。 32バイトの倍数でなければなりません メンバnPassDepthには、VertexBankのパス分割数を指定します。

メンバPass[KM_MAX_PASS]には、パスの情報を設定します。KMPASSINFO構造体の解説を参照してください。

メンバdwRegionArrayFlagには、RegionArrayに関する各種指定を行います。下記のフラグをORして設定します。

定義 | 意味
KM_PASSINFO_AUTOSORT | 現在の描画処理のTranslucentポリゴンのソートモードをAutoSortにする
KM_PASSINFO_PRESORT | 現在の描画処理のTranslucentポリゴンのソートモードをPreSortにする
KM_PASSINFO_USE_ANOTHERLIST | 下記の KM_PASSINFO_UA_XXXXX フラグを有効にする
KM_PASSINFO_UA_TRMOD_AS_OPMOD | TransModifierは、OpaqueModifierと同じものを使用
KM_PASSINFO_UA_OPMOD_AS_TRMOD | OpaqueModifierは、TransModifierと同じものを使用
KM_PASSINFO_UA_DISCADING_TRANSPOLY | TransPolygonをPunchThroughPolygonとして使用

KM_PASSINFO_UA_TRMOD_AS_OPMOD、KM_PASSINFO_UA_OPMOD_AS_TRMOD、KM_PASSINFO_UA_DISCADING_TRANSPOLYは、KM_PASSINFO_USE_ANOTHERLISTが設定されていない場合は無効となります。

メンバpVertexBufferには、アプリケーションによりシステムメモリ上に確保した頂点バッファへのポインタをセットします。Kamuiはこれを頂点バッファのベースアドレスとして使用します。 (Kamui内部でのmallocを避けるため、バッファはアプリケーション側で準備する必要があります。) なお、このアドレスは32バイトアライメントされている必要があります。 この設定はflagsに KM_CONFIGFLAG_SEPARATE_EACH_PASSを設定した場合に有効です。

メンバnVertexBufferSizeには、 アプリケーションによりシステムメモリ上に確保した頂点データバッファのサイズをで指定します。 なお、このサイズは32バイトの倍数でなければなりません。 この設定はflagsに KM_CONFIGFLAG_SEPARATE_EACH_PASSを設定した場合に有効です。 nDirectTransferListには、 2V_LATENCYモードの時に直接転送するListTypeを指定します。 2V_LATENCYモードでない場合はこの設定を行っても無効です。

定義 | 意味
KM_OPAQUE_POLYGON | OpaquePolygonを直接転送
KM_OPAQUE_MODIFIER | OpaqueModifierを直接転送
KM_TRANS_POLYGON | TransPolygonを直接転送
KM_TRANS_MODIFIER | TransPolygonを直接転送
KM_PUNCHTHROUGH_POLYGON | Punchthroughを直接転送

メンバfBufferSize[KM_MAX_DISPLAY_LIST]には、 各シーンでの、ポリゴンの使用量をリストタイプ別にパーセントで指定します。 これら5つについては、0.0fから100.0fのいずれかを浮動小数で指定します。 これらの合計は100.0fでなければなりません。合計が100.0fを超えた場合の動作は保証しません。 Kamui はこれらの値を元にして、頂点データバッファを各ポリゴンタイプ別に振り分けます。 この設定はflagsに KM_CONFIGFLAG_SEPARATE_EACH_PASSを設定した場合に有効です。

メンバdwOPBMode[KM_MAX_DISPLAY_LIST]には、次の各リスト毎のOPBモードを設定します。

配列変数 | OPBモード
dwOPBMode[0] | OpaquePolygon
dwOPBMode[1] | OpaqueModifier
dwOPBMode[2] | TransPolygon
dwOPBMode[3] | TransModifier
dwOPBMode[4] | PunchThroughPolygon

定義 | 意味
KM_OPB_ALLOCCTRL_NOLIST | リストが存在しない場合
KM_OPB_ALLOCCTRL_SMALL | 登録するリストが少ない場合
KM_OPB_ALLOCCTRL_NORMAL | リストが存在する場合は（通常の設定）
KM_OPB_ALLOCCTRL_LARGE | 登録するリストが多い場合

### 参照

> kmSetSystemConfiguration() | システム構成の設定
> kmBeginScene() | シーンの開始
> kmEndScene() | シーンの終了

KMSYSTEMCONFIGSTRUCT

COPYRIGHT © NEC Corporation / © SEGA ENTERPRISES, LTD., 1998-2000