﻿/******************************************************************************
    DccImage の使用方法

    Date: 2017/06/09

    Copyright (C)Nintendo All rights reserved.
******************************************************************************/

/******************************************************************************
    概要
******************************************************************************/

//-----------------------------------------------------------------------------
// DccImage
DccImage はテクスチャー像関連のライブラリです。
TGA、PNG、DDS ファイルをリードして情報を取得する処理などが含まれます。

【注意】
現在、NintendoSDK では付加情報の付いた TGA ファイルをサポートしていません。

/******************************************************************************
    【手順 1】 ヘッダを include
******************************************************************************/

#include "DccImage.h"
using namespace nn::gfx::tool::dcc;

/******************************************************************************
    【手順 2】 TGA、PNG、DDS ファイルの幅と高さを取得して次元を決定
******************************************************************************/

// キューブマップ（6 面個別指定）の場合
// filePaths には右手座標系で +X、-X、+Y、-Y、+Z、-Z 面の順にパスを格納します。

int imageW;
int imageH;
RStatus rstatus = RGetImageInfo(&imageW, &imageH, filePaths[0]);

const bool checksCubeWH = true; // 幅と高さから水平／垂直十字キューブマップか判定するなら true を指定します。
const RImage::Dimension dimension = RImage::GetDimension(
    static_cast<int>(filePaths.size()), checksCubeWH, imageW, imageH);

// DDS ファイルがキューブマップかどうかは RIsCubeMapImage で判定できます。

/******************************************************************************
    【手順 3】 TGA、DDS ファイルをリードして RImage オブジェクトを構築
******************************************************************************/

RImage rimg;
RStatus rstatus = rimg.ReadFile(
    filePaths,              // リードする画像ファイルのパス配列です。
    mergePath,              // マージする ftx ファイルのパスです。空文字ならマージしません。
    "",                     // DCC プリセット名です。
    RImage::HINT_ALBEDO,    // ヒント情報です。
    RImage::LINEAR_NONE,    // リニア変換フラグです。
    false,                  // sRGB フォーマットを使用するなら true です。
    dimension,              // 次元です。
    0,                      // 初期スウィズル値です。
    ""                      // 編集用コメント文です。
);

/******************************************************************************
    【手順 4】 3D テクスチャーコンバーターの引数を取得
******************************************************************************/

// ftx ファイルは 3D テクスチャーコンバーターで作成します。
// 次の関数で 3D テクスチャーコンバーターの引数を取得できます。
const std::string opt = rimg.GetConverterOption(ftxPath);

//-----------------------------------------------------------------------------
// ここからは複数の TGA、DDS ファイルを ftx ファイルに変換する手順を説明します。

std::ostringstream cvtrOss;
for (TGA、DDS ファイルについてループ)
{
    RImage rimg;
    RStatus rstatus = rimg.ReadFile(filePaths, mergePath, ...);
    if (rstatus)
    {
        cvtrOss << texImg.GetConverterOption(ftxPath) << R_ENDL;
    }
}

const std::string cvtrStr = cvtrOss.str();
if (!cvtrStr.empty())
{
    // cvtrStr をテキストファイルにライトします。

    // "3dTextureConverter.exe --job-list=テキストファイルのパス" を実行します。
}

/******************************************************************************
    RImage のメンバ関数について
******************************************************************************/

■ 取得関数について
Get**** といった名前の取得関数は、
ReadFile 呼出し後に取得可能です。

GetName は補正後（禁止文字を "_" に変換）のテクスチャーです。
GetOrgName は補正前のテクスチャーです。

/******************************************************************************
    改訂履歴
******************************************************************************/

■ 2017/06/09
3D テクスチャーコンバーターの実行手順を修正。

■ 2016/11/29
3D テクスチャーコンバーターの実行手順を修正。

■ 2015/12/01
RImage::Init で m_WeightedCompress を false で初期化するように変更

■ 2015/11/12
RGetImageInfo が PNG ファイルに対応、引数の型を変更。

■ 2014/01/08
RImage の m_WeightedCompress を bool 型に変更。
RImage::SetWeightedCompress を追加。

■ 2013/12/03
RImage::SetFormat、RImage::GetCompSel、RImage::SetCompSel を追加。

■ 2013/08/07
RImage::SetFormatFromBitmap で m_LinearFlag == LINEAR_RGBA の場合も srgb フォーマットを使用するように変更。

■ 2012/07/19
RImage::GetDimensionFromName で cube または cube_array なら DIM_CUBE_INPUT を返すように修正。

■ 2012/07/02
RImage::ReadFile の引数に dccPreset を追加。

■ 2012/05/22
一次元の場合のフォーマットを unorm_8_8_8_8 または srgb_8_8_8_8 または
snorm_8_8（法線マップ）に変更。
DirectX 10 形式の DDS ファイルの入力に対応。

■ 2012/03/15
RImage の Usage を削除。
RImage::ReadFile の引数に hint、linearFlag、usesSrgbFetch、initialSwizzle、comment を追加、
usage を廃止。

■ 2012/02/21
DDS ファイルに対応。
RIsCubeMapImage を追加。

■ 2012/02/09
定数を大文字に変更。

■ 2011/07/13
RImage::ReadFile の引数に mergePath を追加。
RImage::GetMipmapCount を GetMipLevel にリネーム。

■ 2011/06/28
RImage::Usage の Color を ColorMap にリネーム。AlphaMap を追加。

■ 2011/05/16
初版。

