Blamite Game Engine - blam!  00296.01.12.21.0102.blamite
The core library for the Blamite Game Engine.
models.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <bgfx/bgfx.h>
4 #include <bx/math.h>
5 #include <vector>
6 
9 
10 #ifndef BLAM
11 #define BLAM
12 #endif
13 
15 {
16  float x;
17  float y;
18  float z;
19  uint32_t abgr;
20 };
21 
23 {
25 
26  float rotation_x = 0.0f;
27  float rotation_y = 0.0f;
28 
29  std::vector<PosColorVertex> verticies;
30  std::vector<uint16_t> triangles;
31 
34 
35  bgfx::VertexBufferHandle vertex_buffer = { 0 };
36  bgfx::IndexBufferHandle index_buffer = { 0 };
37  bgfx::VertexLayout vertex_layout;
38 
39  bool draw_ready = false;
40  bool drawing = false;
41 
43  {
44  verticies = {
45  {-1.0f, 1.0f, 1.0f, 0xff000000 },
46  { 1.0f, 1.0f, 1.0f, 0xff0000ff },
47  {-1.0f, -1.0f, 1.0f, 0xff00ff00 },
48  { 1.0f, -1.0f, 1.0f, 0xff00ffff },
49  {-1.0f, 1.0f, -1.0f, 0xffff0000 },
50  { 1.0f, 1.0f, -1.0f, 0xffff00ff },
51  {-1.0f, -1.0f, -1.0f, 0xffffff00 },
52  { 1.0f, -1.0f, -1.0f, 0xffffffff },
53  };
54 
55  triangles = {
56  0, 1, 2,
57  1, 3, 2,
58  4, 6, 5,
59  5, 6, 7,
60  0, 2, 4,
61  4, 2, 6,
62  1, 5, 3,
63  5, 7, 3,
64  0, 4, 1,
65  4, 5, 1,
66  2, 3, 6,
67  6, 3, 7,
68  };
69 
70  Rebuild();
71  }
72 
74  {
75  draw_ready = false;
76 
77  while (drawing)
78  {
79  // Wait for drawing to stop
80  }
81 
82  if (vertex_buffer.idx != 0)
83  {
84  bgfx::destroy(vertex_buffer);
85  }
86 
87  if (index_buffer.idx != 0)
88  {
89  bgfx::destroy(index_buffer);
90  }
91  }
92 
93  void Rebuild()
94  {
95  draw_ready = false;
96 
97  while (drawing)
98  {
99  // Wait for drawing to stop
100  }
101 
102  if (vertex_buffer.idx != 0)
103  {
104  bgfx::destroy(vertex_buffer);
105  }
106 
107  if (index_buffer.idx != 0)
108  {
109  bgfx::destroy(index_buffer);
110  }
111 
112  vertex_layout.begin()
113  .add(bgfx::Attrib::Position, 3, bgfx::AttribType::Float)
114  .add(bgfx::Attrib::Color0, 4, bgfx::AttribType::Uint8, true)
115  .end();
116 
117  uint32_t verticies_size = verticies.size() * sizeof(PosColorVertex);
118  uint32_t triangles_size = triangles.size() * sizeof(uint16_t);
119 
120  verticies_data = bgfx::copy(verticies.data(), verticies_size);
121  triangles_data = bgfx::copy(triangles.data(), triangles_size);
122 
123  vertex_buffer = bgfx::createVertexBuffer(verticies_data, vertex_layout);
124  index_buffer = bgfx::createIndexBuffer(triangles_data);
125 
126  draw_ready = true;
127  }
128 
129  void Draw()
130  {
131  if (draw_ready)
132  {
133  drawing = true;
134 
135  float mtx[16];
136  bx::mtxRotateXY(mtx, rotation_x, rotation_y);
137  bgfx::setTransform(mtx);
138 
139  bgfx::setVertexBuffer(0, vertex_buffer);
140  bgfx::setIndexBuffer(index_buffer);
141 
142  bgfx::ProgramHandle program = BlamRendering::BGFX::Shaders::GetShaderProgram("test_program")->GetProgramHandle();
143  bgfx::submit(0, program);
144 
145  drawing = false;
146  }
147  }
148 };
149 
151 {
153 }
BlamRenderModel::rotation_y
float rotation_y
Definition: models.h:27
render_model
Definition: render_model.h:37
BlamRenderModel::Rebuild
void Rebuild()
Definition: models.h:93
PosColorVertex::y
float y
Definition: models.h:17
BlamRenderModel
Definition: models.h:22
BlamRenderModel::verticies
std::vector< PosColorVertex > verticies
Definition: models.h:29
render_model.h
BlamRenderModel::triangles_data
const bgfx::Memory * triangles_data
Definition: models.h:33
BlamRenderModel::model
render_model model
Definition: models.h:24
Float
@ Float
Definition: render_model.h:17
shaders.h
PosColorVertex::abgr
uint32_t abgr
Definition: models.h:19
BlamRenderModel::draw_ready
bool draw_ready
Definition: models.h:39
Memory
@ Memory
Indicates the tag originated from the engine's memory.
Definition: tags.h:20
BlamRenderModel::Draw
void Draw()
Definition: models.h:129
PosColorVertex
Definition: models.h:14
BlamRendering::Models::GetTestModel
BLAM BlamRenderModel * GetTestModel()
Definition: models.cpp:15
PosColorVertex::z
float z
Definition: models.h:18
BlamRenderModel::verticies_data
const bgfx::Memory * verticies_data
Definition: models.h:32
BlamRendering::Models
Definition: models.h:150
PosColorVertex::x
float x
Definition: models.h:16
BlamRenderModel::vertex_buffer
bgfx::VertexBufferHandle vertex_buffer
Definition: models.h:35
BLAM
#define BLAM
Definition: models.h:11
BlamRenderModel::BlamRenderModel
BlamRenderModel()
Definition: models.h:42
BlamRenderModel::drawing
bool drawing
Definition: models.h:40
BlamRenderModel::rotation_x
float rotation_x
Definition: models.h:26
BlamRenderModel::index_buffer
bgfx::IndexBufferHandle index_buffer
Definition: models.h:36
BlamRenderModel::vertex_layout
bgfx::VertexLayout vertex_layout
Definition: models.h:37
BlamShaderProgram::GetProgramHandle
bgfx::ProgramHandle GetProgramHandle()
Definition: BlamShaderProgram.cpp:44
BlamRenderModel::~BlamRenderModel
~BlamRenderModel()
Definition: models.h:73
BlamRenderModel::triangles
std::vector< uint16_t > triangles
Definition: models.h:30
BlamRendering::BGFX::Shaders::GetShaderProgram
BLAM BlamShaderProgram * GetShaderProgram(std::string id)
Definition: shaders.cpp:44