/// ****************************************************************************
/// @file   
/// @author Dr.Neeton
/// @date   200X/X/X - 2014/01/24
/// 
/// @brief  DirectX シェーダー共通フラグメント（ローカルパラメーター）
/// 
/// ****************************************************************************

#pragma once

#include "CPL_DX_Shader_CSF_Base.h"

namespace CPL {
namespace DX {
namespace Shader {
namespace CSF { // Common Shader Fragment 


    
  // _____________________________________________________________________________
  /// @brief ローカルパラメーター：３Ｄ座標
  ///
  // *****************************************************************************
  class Local_Position
    : virtual public CodeFragment
    , public KW_L_Position
  {
  protected:
    int m_pos_No;

    void On_SetupInitializer( rout<CIV_Initializer> out_initialize_param ) override;
  public:
    Local_Position( int in_No = 0 )
      : m_pos_No( in_No )
    {}
  };

  CPL_DX_CSF_DEFINED_DERIVED_CLASS_N_TYPE( Local_Position );

  // _____________________________________________________________________________
  /// @brief ローカルパラメーター：法線
  ///
  // *****************************************************************************
  class Local_Normal
    : virtual public CodeFragment
    , public KW_L_Normal
  {
  protected:
    int m_normal_No;

    void On_SetupInitializer( rout<CIV_Initializer> out_initialize_param ) override;
  public:
    Local_Normal( int in_No = 0 )
      : m_normal_No( in_No )
    {}
  };

  CPL_DX_CSF_DEFINED_DERIVED_CLASS_N_TYPE( Local_Normal );
  
  // _____________________________________________________________________________
  /// @brief ローカルパラメーター：マトリクス
  ///
  // *****************************************************************************
  class Local_Matrix
    : virtual public CodeFragment
    , public KW_L_Matrix
  {
  protected:
    int m_matrix_No;

    void On_SetupInitializer( rout<CIV_Initializer> out_initialize_param ) override;
  public:
    Local_Matrix( int in_No = 0 )
      : m_matrix_No( in_No )
    {}
  };

  CPL_DX_CSF_DEFINED_DERIVED_CLASS_N_TYPE( Local_Matrix );


  // _____________________________________________________________________________
  /// @brief ローカルパラメーター：カラー
  ///
  // *****************************************************************************
  class Local_Color
    : virtual public CodeFragment
    , public KW_L_Color
  {
  protected:
    int m_color_No;

    void On_SetupInitializer( rout<CIV_Initializer> out_initialize_param ) override;
  public:
    Local_Color( int in_No = 0 )
      : m_color_No( in_No )
    {}
  };





} // namespace CSF
} // namespace Shader
} // namespace DX
} // namespace CPL
