// CGfxEnvironmentMap - [2020-04-13 11:57:46]
#ifndef _CGFXENVIRONMENTMAP_H_
#define _CGFXENVIRONMENTMAP_H_

#include "CPBRLighting.h"
#include "CFTTTexture.h"

/*
001ACFC8 CGfxEnvironmentMap::CGfxEnvironmentMap()
001ACFDC CGfxEnvironmentMap::~CGfxEnvironmentMap()
001ACCD0 CGfxEnvironmentMap::Init()
001ACD00 CGfxEnvironmentMap::Initialise()
001ACF98 CGfxEnvironmentMap::Shutdown()
001ACFB8 CGfxEnvironmentMap::Get()
001AD0C0 CGfxEnvironmentMap::CreateVDCLUT()
001AD244 CGfxEnvironmentMap::CreateBRDFLUT()
001AD300 CGfxEnvironmentMap::PreprocessCommon()
001AD368 CGfxEnvironmentMap::BeginRenderMaps()
001AD380 CGfxEnvironmentMap::RenderRaw()
001ADB8C CGfxEnvironmentMap::PreprocessDiffuse()
001ADBB4 CGfxEnvironmentMap::PreprocessDiffuse_Float()
001ADDF0 CGfxEnvironmentMap::PreprocessSpecular()
001ADE18 CGfxEnvironmentMap::PreprocessSpecular_Float()
001AE144 CGfxEnvironmentMap::EndRenderMaps()
001AE158 CGfxEnvironmentMap::DeleteMaps()
001AE4D0 CGfxEnvironmentMap::GetRaw()
001AE4D4 CGfxEnvironmentMap::GetDiffuseEnv()
001AE500 CGfxEnvironmentMap::GetSpecularEnv(EPBRLightingMat)
001AE534 CGfxEnvironmentMap::GetBRDFLUT()
001AE538 CGfxEnvironmentMap::GetVDC()
001AE53C CGfxEnvironmentMap::GetForced()
001AE540 CGfxEnvironmentMap::SetForced(EEnvMapOverride)

0x78
*/

enum EEnvMapOverride {
  EEnvMapOverride_0,
  EEnvMapOverride_1,
  EEnvMapOverride_2,
  EEnvMapOverride_3,
  EEnvMapOverride_4,
  EEnvMapOverride_5,
};

class CGfxEnvironmentMap {
public:
  CGfxEnvironmentMap();                          // 001ACFC8
  ~CGfxEnvironmentMap();                         // 001ACFDC
  static void Init();                            // 001ACCD0
  void Initialise();                             // 001ACD00
  static void Shutdown();                        // 001ACF98
  static CGfxEnvironmentMap* Get();              // 001ACFB8
  void CreateVDCLUT();                           // 001AD0C0
  void CreateBRDFLUT();                          // 001AD244
  static bool PreprocessCommon();                // 001AD300
  void BeginRenderMaps();                        // 001AD368
  void RenderRaw();                              // 001AD380
  void PreprocessDiffuse();                      // 001ADB8C
  void PreprocessDiffuse_Float();                // 001ADBB4
  void PreprocessSpecular();                     // 001ADDF0
  void PreprocessSpecular_Float();               // 001ADE18
  void EndRenderMaps();                          // 001AE144
  void DeleteMaps();                             // 001AE158
  CFTTTexture* GetRaw();                         // 001AE4D0
  CFTTTexture* GetDiffuseEnv();                  // 001AE4D4
  CFTTTexture* GetSpecularEnv(EPBRLightingMat);  // 001AE500
  CFTTTexture* GetBRDFLUT();                     // 001AE534
  void GetVDC();                                 // 001AE538
  EEnvMapOverride GetForced();                   // 001AE53C
  void SetForced(EEnvMapOverride);               // 001AE540

  CFTTTexture* list_texture_0[23];
  int dMatID_Cube2DShader_5C;
  // ushort field_5E;
  int dMatID_RawDiffuseShader_60;
  // ushort field_62;
  int dMatID_IntegrateBRDFShader_64;
  // ushort field_66;
  int dMatID_RawSpecularShader_68;
  // ushort field_6A;
  ushort dMatID_PackedCombineShader_6C; //001ACD7A   STR    R0, [R4,#0x6C]
                                        //001ACFFC   LDRH.W R1, [R4,#0x6C]
                                        //从最小值的取值情况看，此处应为 ushort
  ushort field_6E;
  int dMatID_RawEnvShader_70;  // 001AD6DE
  // ushort field_72;
  int field_74;

  static CGfxEnvironmentMap* ms_pInstance;
};

#endif  //_CGFXENVIRONMENTMAP_H_