All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
DebugRenderable.h
1 // Copyright eeGeo Ltd (2012-2014), All Rights Reserved
2 
3 #pragma once
4 
5 #include "Types.h"
6 #include "VectorMath.h"
7 #include "Rendering.h"
8 #include "DebugRendering.h"
9 #include "Camera.h"
10 #include <string>
11 #include <vector>
12 
13 namespace Eegeo
14 {
15 
16  namespace DebugRendering
17  {
18  typedef struct {
19  float x, y, z;
20  float r, g, b, a;
21  float u, v;
22 
23  } Eegeo_Vertex;
24 
26  {
27  bool m_tesellated;
28  Shader* m_pShader;
29  Eegeo::v3 m_color;
30  u32 *m_pTexture;
31 
32  u32 m_numVerts;
33  u32 m_numIndices;
34  u32 m_glVertexBuffer;
35  u32 m_glIndexBuffer;
36  Eegeo_Vertex *m_pVertexBuffer;
37  u16 *m_pIndexBuffer;
38  bool m_requires32bitIndices;
39 
40  public:
41  DebugRenderable(u32 *texture)
42  : m_tesellated(false)
43  , m_pShader(NULL)
44  , m_color(Eegeo::v4(1,1,1,1))
45  , m_pTexture(texture)
46  {
47 
48  }
49 
51  {
52  DestroyGeometry();
53  }
54 
55  void Draw(const Eegeo::v3& cameraRelativeMeshPosition, const Camera::RenderCamera& renderCamera, Eegeo::Rendering::GLState& glState);
56 
57  void Build(std::vector<Eegeo::v3>& verts,
58  std::vector<Eegeo::v3>& colors,
59  std::vector<u16>& indices,
60  std::vector<Eegeo::v2>& uvs,
61  Eegeo::Rendering::GLState& glState);
62 
63  void Build(std::vector<Eegeo::v3>& verts,
64  std::vector<Eegeo::v4>& colors,
65  std::vector<u16>& indices,
66  std::vector<Eegeo::v2>& uvs,
67  Eegeo::Rendering::GLState& glState);
68 
69  static void DestroyShaderInstance();
70 
71  private:
72  std::string VertexShader();
73  std::string FragmentShader();
74  void InitMeshGLBuffers(Eegeo::Rendering::GLState& glState);
75  void BuildGeometry();
76  void DestroyGeometry();
77 
78  static DebugShader* shaderInstance;
79  static DebugShader* GetShaderInstance(Eegeo::Rendering::GLState& glState);
80  };
81  }
82 }