//CFTTShaderProgramOGLES - [2020-04-13 11:57:46]
#ifndef _CFTTSHADERPROGRAMOGLES_H_
#define _CFTTSHADERPROGRAMOGLES_H_

#include <GLES2/gl2.h>
#include <GLES2/gl2ext.h>
#include "CFTTShaderProgram.h"
#include "CFTTTexture.h"
#include "CFTTUberShader.h"

/*
00203A10 CFTTShaderProgramOGLES::CFTTShaderProgramOGLES(CFTTUberShader const* pUberShader, uchar const* pBuf, bool flag)
00203A88 CFTTShaderProgramOGLES::Create(uchar const*)
00203AA0 CFTTShaderProgramOGLES::~CFTTShaderProgramOGLES()
00203AD0 CFTTShaderProgramOGLES::~CFTTShaderProgramOGLES()
00203ADE CFTTShaderProgramOGLES::EnsureCreated()
00203AFC CFTTShaderProgramOGLES::Apply(uchar const*,uchar const*,EFTTCullMode,CFTTUberShaderBlendMode const*)
00203B44 CFTTShaderProgramOGLES::ApplyUniforms(uchar const*,uchar const*)
00203CCC CFTTShaderProgramOGLES::ApplyBlend(CFTTUberShaderBlendMode const*)
00203E40 CFTTShaderProgramOGLES::ApplyCull(EFTTCullMode)
00203EF8 CFTTShaderProgramOGLES::CreateShaders(uchar const*)
00203FA0 CFTTShaderProgramOGLES::CreateProgram()
00204024 CFTTShaderProgramOGLES::InspectUniforms()
00204144 CFTTShaderProgramOGLES::SetTextures(int,CFTTTexture **)

00328034 `vtable for'CFTTShaderProgramOGLES
 CFTTShaderProgramOGLES::~CFTTShaderProgramOGLES()
 CFTTShaderProgramOGLES::~CFTTShaderProgramOGLES()
 CFTTShaderProgramOGLES::EnsureCreated()
 CFTTShaderProgramOGLES::Apply(uchar const*,uchar const*,EFTTCullMode,CFTTUberShaderBlendMode const*)

0x28
*/

//0x8
struct struc_UniformLocation {
  GLint location_0;
  short field_4;
  short field_6;
};

class CFTTShaderProgramOGLES : public CFTTShaderProgram {
public:
  CFTTShaderProgramOGLES(CFTTUberShader const* pUberShader,
                         uchar const* pName,
                         bool flag);  //00203A10

  virtual ~CFTTShaderProgramOGLES();  //00203AA0 00203AD0

  virtual bool EnsureCreated();                                                                  //00203ADE
  virtual void Apply(uchar const*, uchar const*, EFTTCullMode, CFTTUberShaderBlendMode const*);  //00203AFC
  void Create(uchar const*);                                                                     //00203A88
  void ApplyUniforms(uchar const*, uchar const*);                                                //00203B44
  void ApplyBlend(CFTTUberShaderBlendMode const*) const;                                         //00203CCC
  void ApplyCull(EFTTCullMode) const;                                                            //00203E40
  void CreateShaders(uchar const*);                                                              //00203EF8
  void CreateProgram();                                                                          //00203FA0
  void InspectUniforms();                                                                        //00204024
  void SetTextures(int, CFTTTexture**) const;                                                    //00204144

  GLuint list_shader_8[2];
  GLuint Program_10;
  int field_14;
  struc_UniformLocation* pLocation_18;
  uchar* pBuf_1C;
  uchar* pName_20;
  bool bool_24;
  uchar byte_25;
  uchar byte_26;
  uchar byte_27;
};

#endif  //_CFTTSHADERPROGRAMOGLES_H_