#ifndef _CFTTSHADERBUILTINCONSTANTS_H_
#define _CFTTSHADERBUILTINCONSTANTS_H_

#include "CFTTMatrix32.h"
#include "CFTTVector32.h"
#include "CFTTVector32x4.h"
#include "CFTTMatrix3x3.h"

class CFTTShaderBuiltInConstants {
public:
  static void SetWorldMatrix(CFTTMatrix32 const &worldmatrix);      // 002014A8
  static void SetViewMatrix(CFTTMatrix32 const &viewmatrix);        // 00201540
  static void SetProjMatrix(CFTTMatrix32 const &projmatrix);        // 002015DC
  static void SetViewport(int width, int height);                   // 00201634
  static void SetBoneMatrices(CFTTVector32x4 const *bonematrices);  // 0020166C
  static void SetPosTransform(float const *postransform);           // 0020167C
  static void SetUVTransform1(CFTTVector32x4 transform);            // 002016C4
  static void SetUVTransform2(CFTTVector32x4 transform);            // 002016E0
  static CFTTMatrix3x3 *GetWorldMatrix3x3();                        // 002016FC
  static CFTTMatrix32 *GetWorldViewProjMatrix();                    // 0020179C
  static CFTTMatrix32 *GetPosWorldViewProjMatrix();                 // 00201754
  static CFTTMatrix32 *GetWorldViewMatrix();                        // 0020179C
  static CFTTMatrix32 *GetViewProjMatrix();                         // 00201828
  static CFTTMatrix32 *GetPosWorldMatrix();                         // 0020186C
  static CFTTMatrix32 *GetInvTransposeWorldMatrix();                // 002018B0
  static CFTTMatrix32 *GetInvViewMatrix();                          // 00201950
  static float *GetCamPos();                                        // 00201998
  static CFTTVector32x4 *GetOrthoProjectionX();                     // 002019AC
  static void RecalcOrthoProj();                                    // 002019D0
  static CFTTVector32x4 *GetOrthoProjectionY();                     // 00201A24
  static CFTTVector32x4 *GetWorldViewMatrixZ();                     // 00201A48
  static float *GetFragCoordToUVMatrix();                           // 00201A90
  static const CFTTVector32x4 *GetBoneMatrices();                   // 00201B98
  static CFTTMatrix32 *GetPosTransform();                           // 00201BA8
  static CFTTMatrix3x3 *GetUVTransform1();                          // 00201BB4
  static CFTTMatrix3x3 *GetUVTransform2();                          // 00201BC0

  static bool ms_bRecalcWorldMatrix3x3;
  static bool ms_bRecalcWorldView;
  static bool ms_bRecalcWorldViewProj;
  static bool ms_bRecalcPosWorldViewProj;
  static bool ms_bRecalcPosWorld;
  static bool ms_bRecalcWorldViewMatrixZ;
  static bool ms_bRecalcWorldInvTrans;
  static bool ms_bRecalcOrthoProj;
  static bool ms_bRecalcViewProj;
  static bool ms_bRecalcInvView;
  static float ms_fFragCoordToUVMatrix[9];
  static CFTTVector32 ms_vCamDir;
  static CFTTVector32x4 ms_vViewport;
  static CFTTVector32x4 ms_vOrthoProjX;
  static CFTTVector32x4 ms_vOrthoProjY;
  static CFTTVector32x4 ms_vWorldViewMatrixZ;
  static const CFTTVector32x4 *ms_pBoneMats;
  static CFTTMatrix32 ms_matWorld;
  static CFTTMatrix32 ms_matView;
  static CFTTMatrix32 ms_matProj;
  static CFTTMatrix32 ms_matPos;
  static CFTTMatrix32 ms_matPosWorldViewProj;
  static CFTTMatrix32 ms_matWorldViewProj;
  static CFTTMatrix32 ms_matWorldView;
  static CFTTMatrix32 ms_matViewProj;
  static CFTTMatrix32 ms_matPosWorld;
  static CFTTMatrix32 ms_matWorldInvTrans;
  static CFTTMatrix32 ms_matInvView;
  static CFTTMatrix3x3 ms_fUVMatrix3x3[2];
  static CFTTMatrix3x3 ms_fWorldMatrix3x3;
};
#endif
