/// ****************************************************************************
/// @file   
/// @author Dr.Neeton
/// @date   2009/X/X - 2014/02/05
/// 
/// @brief  [Common Draw Interface] 基底ヘッダー？
/// 
/// ****************************************************************************

#pragma once

#include "../DX/CPL_DX_RenderCollection.h"
#include "../DX/CPL_DX_Graphics.h"

//#include "../Core/CPL_Core.h"
//#include "../Math/CPL_Math.h"


namespace CPL {

/// 描画インターフェースの共通化を目的としたクラス群…を実装予定。\n
/// 現状、GUCより移行したクラスと完全分離できていないため、中途半端ながらそのまま公開。\n
/// 現状でCorePLiメッシュ関連を扱うにはここに含まれるクラスを使用するしかない。
namespace CDI {


#define CPL_CDI_DEF_(name, dx_type, gl_type) typedef dx_type name;/* CPL_TYPE_PTR_REF1_(name)*/

// ※ ↓接頭辞のCはCommonのC

CPL_CDI_DEF_( CMatrix,               DX::Matrix,                GL::Matrix );
CPL_CDI_DEF_( CVector2,              DX::Vector2,               GL::Vector2 );
CPL_CDI_DEF_( CVector3,              DX::Vector3,               GL::Vector3 );
CPL_CDI_DEF_( CElement,              DX::Layout::Element,       GL::Element );
CPL_CDI_DEF_( CLayoutBuffer,         DX::Layout::Buffer,        GL::BufferLayout );
//CPL_CDI_DEF_( CVertexStreamLayout,   DX::VertexStreamLayout,    GL::VertexStreamLayout );
//CPL_CDI_DEF_( CVertexStreamBuffer,   DX::VertexStreamBuffer,    GL::VertexStreamBuffer );
CPL_CDI_DEF_( CBufferCollection,     DX::Buffer::Collection,    GL::Buffer::Collection );  
//CPL_CDI_DEF_( CVertexLayout,         DX::VertexLayout,          GL::VertexLayout );
CPL_CDI_DEF_( CVertexShader,         DX::Shader::VertexShader,  GL::VertexShader );
CPL_CDI_DEF_( CVertexShaderCode,     DX::Shader::VSCode,        GL::VSCode );
CPL_CDI_DEF_( CPixelShader,          DX::Shader::PixelShader,   GL::PixelShader );
CPL_CDI_DEF_( CPixelShaderCode,      DX::Shader::PSCode,        GL::PSCode );
//CPL_CDI_DEF_( CRenderStateTypes,     DX::RenderStateTypes,     GL::RenderStateTypes );
CPL_CDI_DEF_( CRenderCollection,     DX::RenderCollection,      GL::RenderCollection );
CPL_CDI_DEF_( CInputLayout,          DX::Layout::Input,         GL::InputLayout );

CPL_CDI_DEF_( CVtxBIndex,      DX::Vtx::BIndex,        GL::Vtx::BIndex );
CPL_CDI_DEF_( CVtxBINormal,    DX::Vtx::BINormal,      GL::Vtx::BINormal );
CPL_CDI_DEF_( CVtxBlend1,      DX::Vtx::Blend1,        GL::Vtx::Blend1 );
CPL_CDI_DEF_( CVtxBlend2,      DX::Vtx::Blend2,        GL::Vtx::Blend2 );
CPL_CDI_DEF_( CVtxBlend3,      DX::Vtx::Blend3,        GL::Vtx::Blend3 );
CPL_CDI_DEF_( CVtxBWeight1,    DX::Vtx::BWeight1,      GL::Vtx::BWeight1 );
CPL_CDI_DEF_( CVtxBWeight2,    DX::Vtx::BWeight2,      GL::Vtx::BWeight2 );
CPL_CDI_DEF_( CVtxBWeight3,    DX::Vtx::BWeight3,      GL::Vtx::BWeight3 );
CPL_CDI_DEF_( CVtxColor1,      DX::Vtx::Color<1>,      GL::Vtx::Color<1> );
CPL_CDI_DEF_( CVtxColor2,      DX::Vtx::Color<2>,      GL::Vtx::Color<2> );
CPL_CDI_DEF_( CVtxColor3,      DX::Vtx::Color<3>,      GL::Vtx::Color<3> );
CPL_CDI_DEF_( CVtxColor4,      DX::Vtx::Color<4>,      GL::Vtx::Color<4> );
CPL_CDI_DEF_( CVtxColor5,      DX::Vtx::Color<5>,      GL::Vtx::Color<5> );
CPL_CDI_DEF_( CVtxColor6,      DX::Vtx::Color<6>,      GL::Vtx::Color<6> );
CPL_CDI_DEF_( CVtxColor7,      DX::Vtx::Color<7>,      GL::Vtx::Color<7> );
CPL_CDI_DEF_( CVtxColor8,      DX::Vtx::Color<8>,      GL::Vtx::Color<8> );
//CPL_CDI_DEF_( CVtxDepth,       DX::Vtx::Depth,         GL::Vtx::Depth );
CPL_CDI_DEF_( CVtxDiffuse,     DX::Vtx::Diffuse,       GL::Vtx::Diffuse );
//CPL_CDI_DEF_( CVtxFog,         DX::Vtx::Fog,           GL::Vtx::Fog );
CPL_CDI_DEF_( CVtxNormal,      DX::Vtx::Normal,        GL::Vtx::Normal );
CPL_CDI_DEF_( CVtxPSize,       DX::Vtx::PSize,         GL::Vtx::PSize );
CPL_CDI_DEF_( CVtxSpecular,    DX::Vtx::Specular,      GL::Vtx::Specular );
CPL_CDI_DEF_( CVtxTangent,     DX::Vtx::Tangent,       GL::Vtx::Tangent );
//CPL_CDI_DEF_( CVtxTessFactor,  DX::Vtx::TessFactor,    GL::Vtx::TessFactor );
CPL_CDI_DEF_( CVtxUV0,         DX::Vtx::UV0,           GL::Vtx::UV0 );
CPL_CDI_DEF_( CVtxUV1,         DX::Vtx::UV1,           GL::Vtx::UV1 );
CPL_CDI_DEF_( CVtxUV2,         DX::Vtx::UV2,           GL::Vtx::UV2 );
CPL_CDI_DEF_( CVtxUV3,         DX::Vtx::UV3,           GL::Vtx::UV3 );
CPL_CDI_DEF_( CVtxXYZ,         DX::Vtx::XYZ,           GL::Vtx::XYZ );
CPL_CDI_DEF_( CVtxXYZBi1C,     DX::Vtx::XYZBi1C,       GL::Vtx::XYZBi1C );
CPL_CDI_DEF_( CVtxXYZBi1CT1,   DX::Vtx::XYZBi1CT1,     GL::Vtx::XYZBi1CT1 );
CPL_CDI_DEF_( CVtxXYZBi1NrCT1, DX::Vtx::XYZBi1NrCT1,   GL::Vtx::XYZBi1NrCT1 );
CPL_CDI_DEF_( CVtxXYZBi2NrCT1, DX::Vtx::XYZBi2NrCT1,   GL::Vtx::XYZBi2NrCT1 );
CPL_CDI_DEF_( CVtxXYZC,        DX::Vtx::XYZC,          GL::Vtx::XYZC );
CPL_CDI_DEF_( CVtxXYZCT1,      DX::Vtx::XYZCT1,        GL::Vtx::XYZCT1 );
CPL_CDI_DEF_( CVtxXYZNrC,      DX::Vtx::XYZNrC,        GL::Vtx::XYZNrC );
CPL_CDI_DEF_( CVtxXYZNrCT1,    DX::Vtx::XYZNrCT1,      GL::Vtx::XYZNrCT1 );
CPL_CDI_DEF_( CVtxXYZRHW,      DX::Vtx::XYZRHW,        GL::Vtx::XYZRHW );
CPL_CDI_DEF_( CVtxXYZWC,       DX::Vtx::XYZWC,         GL::Vtx::XYZWC );
CPL_CDI_DEF_( CVtxXYZWCT1,     DX::Vtx::XYZWCT1,       GL::Vtx::XYZWCT1 );

CPL_CDI_DEF_( CVtxSetDataTypes, DX::Vtx::SetDataTypes, GL::Vtx::SetDataTypes );
CPL_CDI_DEF_( CVtxGetDataTypes, DX::Vtx::GetDataTypes, GL::Vtx::GetDataTypes );


CPL_CDI_DEF_( ColorType, DX::ColorType, float4 );

//typedef Math::D2<float>::Vector CVector2;
//typedef Math::D3<float>::Vector CVector3;



// _____________________________________________________________________________
/// @brief 共通基本クラス
///
// *****************************************************************************
class Base : public Core::BaseObject
{
protected:
  Base(){}
public:
  virtual ~Base(){}
};







} // namespace CDI
} // namespace CPL
