プラグイン
Graphics

TextureLoader

  1. プロジェクトの作成
    メインメニューの「ファイル」→「新規作成」→「プロジェクト」を選んで、「Win32 コンソールアプリケーション」で 空のDLLのプロジェクトを作成します。
    次にプロジェクトのプロパティを開き、「構成プロパティ」→「C/C++」→「全般」にある「追加のインクルードディレクトリ」に Mix のインクルードファイルがあるディレクトリ(※)を指定します。

    ※ "Mix\Engine\Include\"

  2. DLL エクスポートのソースファイルの作成
    プロジェクトに "main.cpp" を追加し、以下の関数を実装します。

    • Mix::Plugin::INFORMATION __stdcall GetInformation ( void )
      このプラグインの情報を取得する関数です。

    • Int32 __stdcall Load ( Mix::Plugin::IReader* pSrc, Mix::Plugin::Graphics::ITextureKit* pDst )
      テクスチャをロードする関数であり Mix::Plugin::Graphics::TEXTURE_PLUGIN_RESULT 列挙定数のいずれかを返す必要があります。

      • ソース ( pSrc )
        テクスチャの元になるデータになります。
        このソースからデータを読み取り、キットに設定、展開をします。

      • キット ( pDst )
        ソースから読み取ったデータをテクスチャにする直前の構成になります。
        キットは基本設定として、タイプ、フォーマット、サイズ、深度、ミップレベル、フラグがあります。
        これらは、以下のメソッドを使用して設定します。

        Mix::Plugin::Graphics::ITextureKit::SetType
        Mix::Plugin::Graphics::ITextureKit::SetFormat
        Mix::Plugin::Graphics::ITextureKit::SetSize
        Mix::Plugin::Graphics::ITextureKit::SetDepth
        Mix::Plugin::Graphics::ITextureKit::SetMipLevels
        Mix::Plugin::Graphics::ITextureKit::SetFlags

        また、タイプ、サイズ、深度、ミップレベル数、フラグによって、数、レイアウトが変化する、サブリソースというものがあります。
        サブリソースとは、メインイメージ、ミップマップイメージなどの部分的なリソースのことをいい、
        Mix::Plugin::Graphics::ITextureKit::AddSubResourceData メソッドを使用して追加します。
        サブリースのレイアウトを以下に提示します。

        • Type = PLANE Size = 128x128 MipLevels = 8
          プレーンテクスチャは MipLevels 分のサブリソースを必要とし、深度は無視されます。

          • MipLevel = 1 Size = 128x128
          • MipLevel = 2 Size = 64x64
          • MipLevel = 3 Size = 32x32
          • MipLevel = 4 Size = 16x16
          • MipLevel = 5 Size = 8x8
          • MipLevel = 6 Size = 4x4
          • MipLevel = 7 Size = 2x2
          • MipLevel = 8 Size = 1x1

        • Type = VOLUME Size = 64x64 MipLevels = 7 Depth ( Slice ) = 4
          ボリュームテクスチャは MipLevels 分のサブリソースを必要とします。
          また、Slice はミップレベルが上がるにつれて半分になっていきますが、0 になることはありません。

          • MipLevel = 1 Slice = 4
            • Slice = 1/4 Size = 64x64
            • Slice = 2/4 Size = 64x64
            • Slice = 3/4 Size = 64x64
            • Slice = 4/4 Size = 64x64
          • MipLevel = 2 Slice = 2
            • Slice = 1/2 Size = 32x32
            • Slice = 2/2 Size = 32x32
          • MipLevel = 3 Slice = 1
            • Slice = 1/1 Size = 16x16
          • MipLevel = 4 Slice = 1
            • Slice = 1/1 Size = 8x8
          • MipLevel = 5 Slice = 1
            • Slice = 1/1 Size = 4x4
          • MipLevel = 6 Slice = 1
            • Slice = 1/1 Size = 2x2
          • MipLevel = 7 Slice = 1
            • Slice = 1/1 Size = 1x1

        • Type = CUBE Size = 256x256 MipLevels = 9
          キューブテクスチャは 1 〜 6 面 * MipLevels のサブリソースを必要とし、深度は無視されます。
          また、面の順序は Mix::Plugin::Graphics::ITextureKit::FLAG に定義されている CUBE_??? の並びと同じになり、
          サブリソースとして追加される面を Mix::Plugin::Graphics::ITextureKit::SetFlags メソッドで設定しておく必要があります。
          以下のレイアウトは、6 面全てのフラグを設定したものになります。

          • POSITIVEX ( 正方向のX面 )
            • MipLevel = 1 Size = 256x256
            • MipLevel = 2 Size = 128x128
            • MipLevel = 3 Size = 64x64
            • MipLevel = 4 Size = 32x32
            • MipLevel = 5 Size = 16x16
            • MipLevel = 6 Size = 8x8
            • MipLevel = 7 Size = 4x4
            • MipLevel = 8 Size = 2x2
            • MipLevel = 9 Size = 1x1
          • NEGATIVEX ( 負方向のX面 )
            • MipLevel = 1 Size = 256x256
            • MipLevel = 2 Size = 128x128
            • MipLevel = 3 Size = 64x64
            • MipLevel = 4 Size = 32x32
            • MipLevel = 5 Size = 16x16
            • MipLevel = 6 Size = 8x8
            • MipLevel = 7 Size = 4x4
            • MipLevel = 8 Size = 2x2
            • MipLevel = 9 Size = 1x1
          • POSITIVEY ( 正方向のY面 )
            • MipLevel = 1 Size = 256x256
            • MipLevel = 2 Size = 128x128
            • MipLevel = 3 Size = 64x64
            • MipLevel = 4 Size = 32x32
            • MipLevel = 5 Size = 16x16
            • MipLevel = 6 Size = 8x8
            • MipLevel = 7 Size = 4x4
            • MipLevel = 8 Size = 2x2
            • MipLevel = 9 Size = 1x1
          • NEGATIVEY ( 負方向のY面 )
            • MipLevel = 1 Size = 256x256
            • MipLevel = 2 Size = 128x128
            • MipLevel = 3 Size = 64x64
            • MipLevel = 4 Size = 32x32
            • MipLevel = 5 Size = 16x16
            • MipLevel = 6 Size = 8x8
            • MipLevel = 7 Size = 4x4
            • MipLevel = 8 Size = 2x2
            • MipLevel = 9 Size = 1x1
          • POSITIVEZ ( 正方向のZ面 )
            • MipLevel = 1 Size = 256x256
            • MipLevel = 2 Size = 128x128
            • MipLevel = 3 Size = 64x64
            • MipLevel = 4 Size = 32x32
            • MipLevel = 5 Size = 16x16
            • MipLevel = 6 Size = 8x8
            • MipLevel = 7 Size = 4x4
            • MipLevel = 8 Size = 2x2
            • MipLevel = 9 Size = 1x1
          • NEGATIVEZ ( 負方向のZ面 )
            • MipLevel = 1 Size = 256x256
            • MipLevel = 2 Size = 128x128
            • MipLevel = 3 Size = 64x64
            • MipLevel = 4 Size = 32x32
            • MipLevel = 5 Size = 16x16
            • MipLevel = 6 Size = 8x8
            • MipLevel = 7 Size = 4x4
            • MipLevel = 8 Size = 2x2
            • MipLevel = 9 Size = 1x1

  3. DLL エクスポートのモジュール定義ファイルの作成
    プロジェクトに以下のモジュール文を記述したファイル "main.def" を追加してください。

    EXPORTS
        GetInformation
        Load

    最後にプロジェクトのプロパティの「構成プロパティ」→「リンカ」→「入力」にある「モジュール定義ファイル」に "main.def" を指定してください。