ブロックフォーマットとリニアフォーマット間のレイアウト変換を行う関数は nn::gd::Memory
クラスに定義されています。
5.1. ブロックフォーマットからリニアフォーマットへの変換
ブロックフォーマットからリニアフォーマットへの変換を行うための関数が用意されています。.
static nnResult nn::gd::Memory::CopyTexture2DResourceBlockToLinear( const nn::gd::Texture2DResource* source, s32 srcMipLevelIndex, u32 srcOffsetY, s32 srcCountRow, const nn::gd::Texture2DResource* dest, s32 dstMipLevelIndex, u32 dstOffsetY, nn::gd::Memory::DownScalingMode downScalingMode, gdBool yFlip); static nnResult nn::gd::Memory::CopyTexture2DResourceBlockToLinear( const nn::gd::Texture2DResource* source, s32 srcMipLevelIndex, u32 srcOffsetY, u8* dstAddr, u32 dstWidth, u32 dstHeight, u32 dstFormat, nn::gd::Memory::DownScalingMode downScalingMode, gdBool yFlip);
source
に指定された Texture2DResource
オブジェクトのリソースデータが、ブロックフォーマットからリニアフォーマットに変換されて転送されます。また、変換するミップマップレベルを srcMipLevelIndex
に指定することができます。-1 を指定した場合は Texture2DResource
オブジェクトの最大のミップマップレベルが使用されます。
srcOffsetY
には変換を開始する Y 座標値を指定します。アドレッシングの違いを関数内で吸収しますので、リソースデータの座標値そのままを指定してください。
転送先に Texture2DResource
オブジェクトを指定する関数では、srcCountRow
に変換するライン数を指定します。-1 を指定した場合は Texture2DResource
オブジェクトの高さが使用されます。dstMipLevelIndex
や dstOffsetY
には、転送先のミップマップレベルと転送開始位置の Y 座標値を指定します。
転送先にアドレスを指定する関数では、dstAddr
に先頭アドレス、dstWidth
に幅、dstHeight
に高さ、dstFormat
にピクセルフォーマットを指定します。
downScalingMode
にはアンチエイリアスの指定を、yFlip
には縦方向のフリップを有効にする場合に GD_TRUE
を指定します。
これらの関数は内部で nngxAddB2LTransferCommand()
を呼び出していますので、実際の変換処理はコマンドリストの実行時に行われます。
ブロックフォーマットからリニアフォーマットへの変換関数は、主にカラーバッファからディスプレイバッファへの転送時に使用します。コードの例は「2.7. 描画結果の表示」にあります。
5.2. リニアフォーマットからブロックフォーマットへの変換
リニアフォーマットからブロックフォーマットへの変換を行うための関数が用意されています。
static nnResult nn::gd::Memory::CopyTexture2DResourceLinearToBlock( const nn::gd::Texture2DResource* source, s32 srcMipLevelIndex, u32 srcOffsetY, s32 srcCountRow, const nn::gd::Texture2DResource* dest, s32 dstMipLevelIndex, u32 dstOffsetY); static nnResult nn::gd::Memory::CopyTexture2DResourceLinearToBlock( u8* srcAddr, u32 width, u32 height, const nn::gd::Texture2DResource* dest, s32 dstMipLevelIndex, u32 dstOffsetY);
dest
に指定された Texture2DResource
オブジェクトに、転送元のデータがリニアフォーマットからブロックフォーマットに変換されて転送されます。また、変換されたデータを受け取るミップマップレベルを dstMipLevelIndex
に指定することができます。-1 を指定した場合は Texture2DResource
オブジェクトの最大のミップマップレベルが使用されます。また、dstOffsetY
にはデータの受け取りを開始する Y 座標値を指定します。アドレッシングの違いを関数内で吸収しますので、リソースデータの座標値そのままを指定してください。
転送元に Texture2DResource
オブジェクトを指定する関数では、srcCountRow
に変換するライン数を指定します。-1 を指定した場合は Texture2DResource
オブジェクトの高さが使用されます。srcMipLevelIndex
と srcOffsetY
には、転送元のミップマップレベルと転送開始位置の Y 座標値を指定します。
転送元にアドレスを指定する関数では、srcAddr
に先頭アドレス、width
に幅、height
に高さを指定します。
これらの関数は内部で nngxAddL2BTransferCommand()
を呼び出していますので、実際の変換処理はコマンドリストの実行時に行われます。