All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
BaseModelMaterial.h
1 // Copyright eeGeo Ltd (2012-2014), All Rights Reserved
2 
3 #pragma once
4 
5 #include "Types.h"
6 
7 #include "EffectHandler.h"
8 #include "PODMaterial.h"
9 #include "AsyncTexturing.h"
10 
11 #include <vector>
12 #include <string>
13 
14 namespace Eegeo
15 {
16  typedef enum {
17 
18  MATERIAL_TYPE_STANDARD,
19  MATERIAL_TYPE_MULTI
20 
21  } MATERIAL_TYPE;
22 
23  enum MaterialFlags
24  {
25  kMaterialFlag_None = 0x00000000,
26  kMaterialFlag_Blend = 0x00000001,
27 
28  kMaterialFlag_Default = kMaterialFlag_None,
29  };
30 
32  {
33  std::string m_name;
34 
35  Eegeo::EffectHandler::GraphicsEffect m_effect;
36 
37  s32 m_diffuseTexturePodId;
38  u32 m_diffuseTextureGlId;
39 
40  s32 m_shadowMapTextureID;
41  s32 m_shaderIndex;
42 
43  float m_animUScale;
44  float m_animVScale;
45 
46  u32 m_materialFlags;
47 
48  float m_alpha;
49 
50  void InitFromPODMaterial(const IO::POD::PODMaterial* podMaterial, bool isPreLit);
51 
52  public:
53  ModelMaterial();
54  ~ModelMaterial();
55 
56  static ModelMaterial* CreateFromPODMaterial(const IO::POD::PODMaterial* podMaterial, bool isPreLit);
57 
58  const std::string& GetName() const;
59 
60  typedef std::vector<Eegeo::Rendering::AsyncTexturing::IAsyncTexture*> TTexturesByPodId;
61  bool AssignTexture (const TTexturesByPodId& texturesByPodId);
62 
63  void Use (Eegeo::Rendering::GLState& glState);
64 
65  Eegeo::EffectHandler::GraphicsEffect GetEffect ();
66  void SetEffect (Eegeo::EffectHandler::GraphicsEffect effect);
67 
68  u32 GetDiffuseTexture();
69  void SetDiffuseTexture(u32 pTexture);
70 
71  float GetAnumUScale ();
72  void SetAnumUScale (float scale);
73 
74  float GetAnumVScale ();
75  void SetAnumVScale (float scale);
76 
77 
78  bool IsAlpha () const { return (m_materialFlags & kMaterialFlag_Blend); }
79 
80  u32 GetMaterialFlags () const { return (m_materialFlags); }
81  void SetAlpha (float value)
82  {
83  m_materialFlags |= kMaterialFlag_Blend;
84  m_alpha = value;
85  }
86  float GetAlpha(void) const;
87  };
88 }