// CFTT3dGenShader - [2020-04-13 11:57:46]
#ifndef _CFTT3DGENSHADER_H_
#define _CFTT3DGENSHADER_H_

#include "common.h"
#include "CFTTUberShader.h"

/*
0020ED20 CFTT3dGenShader::CFTT3dGenShader()
0020ED2C CFTT3dGenShader::~CFTT3dGenShader()
0020ED30 CFTT3dGenShader::CreateMat(EFTT3dGenShader_TexMode,
                                    EFTT3dGenShader_LightingMode,
                                    EFTT3dGenShader_AlphaTest,
                                    CFTTVector32 const&,
                                    CFTTVector32x4 const&,
                                    CFTTVector32x4 const&,
                                    float,
                                    CFTTTexParam,
                                    EFTT3dGenShader_BlendMode,
                                    EFTT3dGenShader_CullMode)
001239AE CFTT3dGenShader::SetBlendMode(EFTT3dGenShader_BlendMode,int)
001239BE CFTT3dGenShader::SetSampler00(CFTTTexParam,int)
0020E760 CFTT3dGenShader::SetMatDiffuse(CFTTVector32x4 const&,int)

*/

enum EFTT3dGenShader_TexMode {
  EFTT3dGenShader_TexMode_0,
  EFTT3dGenShader_TexMode_1,
  EFTT3dGenShader_TexMode_2,
  EFTT3dGenShader_TexMode_3,
  EFTT3dGenShader_TexMode_4,
  EFTT3dGenShader_TexMode_5,
};

enum EFTT3dGenShader_LightingMode {
  EFTT3dGenShader_LightingMode_0,
  EFTT3dGenShader_LightingMode_1,
  EFTT3dGenShader_LightingMode_2,
  EFTT3dGenShader_LightingMode_3,
  EFTT3dGenShader_LightingMode_4,
  EFTT3dGenShader_LightingMode_5,
};

enum EFTT3dGenShader_AlphaTest {
  EFTT3dGenShader_AlphaTest_0,
  EFTT3dGenShader_AlphaTest_1,
  EFTT3dGenShader_AlphaTest_2,
  EFTT3dGenShader_AlphaTest_3,
  EFTT3dGenShader_AlphaTest_4,
  EFTT3dGenShader_AlphaTest_5,
};

enum EFTT3dGenShader_BlendMode {
  EFTT3dGenShader_BlendMode_0,
  EFTT3dGenShader_BlendMode_1,
  EFTT3dGenShader_BlendMode_2,
  EFTT3dGenShader_BlendMode_3,
  EFTT3dGenShader_BlendMode_4,
  EFTT3dGenShader_BlendMode_5,
};

enum EFTT3dGenShader_CullMode {
  EFTT3dGenShader_CullMode_0,
  EFTT3dGenShader_CullMode_1,
  EFTT3dGenShader_CullMode_2,
  EFTT3dGenShader_CullMode_3,
  EFTT3dGenShader_CullMode_4,
  EFTT3dGenShader_CullMode_5,
};

class CFTT3dGenShader : public CFTTUberShader {
public:
  CFTT3dGenShader();   // 0020ED20
  ~CFTT3dGenShader();  // 0020ED2C

  void SetBlendMode(EFTT3dGenShader_BlendMode eBlendMode, int a2);  // 001239AE
  void SetSampler00(CFTTTexParam aTexParam, int a2);                // 001239BE
  void SetMatDiffuse(CFTTVector32x4 const&, int);                   // 0020E760
  ushort CreateMat(EFTT3dGenShader_TexMode,
                   EFTT3dGenShader_LightingMode,
                   EFTT3dGenShader_AlphaTest,
                   CFTTVector32 const&,
                   CFTTVector32x4 const&,
                   CFTTVector32x4 const&,
                   float,
                   CFTTTexParam,
                   EFTT3dGenShader_BlendMode,
                   EFTT3dGenShader_CullMode);  // 0020ED30

  static CFTT3dGenShader s_tInstance;
};

#endif  //_CFTT3DGENSHADER_H_