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テクスチャを全く使用しない場合は、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_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モードでない場合はこの設定を行っても無効です。
|
メンバ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モードを設定します。
|
|
kmSetSystemConfiguration() システム構成の設定 kmBeginScene() シーンの開始 kmEndScene() シーンの終了