/// ****************************************************************************
/// @file   
/// @author Dr.Neeton
/// @date   2009/X/X - 2014/01/24
/// 
/// @brief  メッシュ基本情報。
/// 
/// ****************************************************************************

#include "CPL_CDI_MeshData.h"

namespace CPL {
namespace CDI {


// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// チャンク基底クラス　コンストラクタ（64bit定数指定ver）
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
MeshFileInfo::Chunk::Chunk( U64 in_type, long in_size )
  : m_type( in_type )
  , m_size( in_size )
{}

// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// チャンク基底クラス　コンストラクタ（文字列指定ver）
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
MeshFileInfo::Chunk::Chunk( char_cptr in_type, long in_size )
  : m_size( in_size )
{
  Core::StringA::str_ncpy_
  ( m_type_c,
    in_type,
    Min<size_t>( sizeof(m_type), Core::StringA::str_len_(in_type) ) );
}

// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// チャンク基底クラス　タイプ判定
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bool MeshFileInfo::Chunk::IsType( char_cptr in_type ) const
{
  return (m_type == *(U64*)in_type);
}



// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// ファイルヘッダチャンク　コンストラクタ
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
MeshFileInfo::Header::Header() : Chunk( CPL_MFI_CHUNK_HEAD, 0 ) {}


// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// 
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


// シェーダコード情報
#define CPL_MFI_CHUNK_SFINFO_BlendMatrixNum      "BLDMTXNM" // ブレンドマトリクス数
#define CPL_MFI_CHUNK_SFINFO_BlendIndexLevel     "BLDIDXLV" // ブレンドインデックスレベル
#define CPL_MFI_CHUNK_SFINFO_InVertexLayout      "VTXLYOUT" // 頂点レイアウト
#define CPL_MFI_CHUNK_SFINFO_InPos3D             "INPOS3D " // 
#define CPL_MFI_CHUNK_SFINFO_InPos2D             "INPOS2D " // 
#define CPL_MFI_CHUNK_SFINFO_InBlend             "INBLEND " // 
#define CPL_MFI_CHUNK_SFINFO_InNormal            "INNORMAL" // 
#define CPL_MFI_CHUNK_SFINFO_InPointSize         "INPSIZE " // 
#define CPL_MFI_CHUNK_SFINFO_InColor             "INCOLOR " // 
#define CPL_MFI_CHUNK_SFINFO_InTexCoord          "INTEXCLR" // 
#define CPL_MFI_CHUNK_SFINFO_InTangent           "INTANGEN" // 
#define CPL_MFI_CHUNK_SFINFO_BiNormal            "INBINRML" // 
#define CPL_MFI_CHUNK_SFINFO_TessFactor          "INTESFAC" // 
#define CPL_MFI_CHUNK_SFINFO_OutPosition         "OUTPOSSC" // 
#define CPL_MFI_CHUNK_SFINFO_OutPSize            "OUTPSIZE" // 
#define CPL_MFI_CHUNK_SFINFO_OutFog              "OUTFOG  " // 
#define CPL_MFI_CHUNK_SFINFO_OutColor            "OUTCOLOR" // 
#define CPL_MFI_CHUNK_SFINFO_OutTexCoord         "OUTTXCRD" // 
#define CPL_MFI_CHUNK_SFINFO_IntactTransVtxPos   "ITVTXPOS" // 
#define CPL_MFI_CHUNK_SFINFO_IntactTransVtxColor "ITVTXCLR" // 
#define CPL_MFI_CHUNK_SFINFO_IntactTransTexCoord "ITVTXTCD" // 
#define CPL_MFI_CHUNK_SFINFO_VertexTransform     "VTXTRANS" // 
//#define CPL_MFI_CHUNK_SFINFO_ "" // 


struct SD_BlendMatrixNum : MeshFileInfo::Shader::ShaderData {
  int m_blend_num;
  SD_BlendMatrixNum( int in_blend_mtx_num )
    : ShaderData( CPL_MFI_CHUNK_SFINFO_BlendMatrixNum ),
      m_blend_num( in_blend_mtx_num ) {}
};
struct SD_BlendIndexLevel : MeshFileInfo::Shader::ShaderData {
  int m_blend_index_level;
  SD_BlendIndexLevel( int in_blend_index_level )
    : ShaderData( CPL_MFI_CHUNK_SFINFO_BlendIndexLevel ),
      m_blend_index_level( in_blend_index_level ) {}
};
struct SD_InVertexLayout : MeshFileInfo::Shader::ShaderData {
};


} // namespace CDI
} // namespace CPL

