I am trying to write a procedure called CreateShape which has a parameter shapeID as input and then pushes VAO ID (Vertex Array Object ID) into a vector so I can bind and draw the specified shape at any time using the VAO ID. However, when I try to create and draw a shape using nothing CreateShape nothing gets drawn.
However if I write the same code in the core engine class it works.
Note: GLCall() is just for debugging purposes.
Core Engine Main Procedure Using Render Class Procedures: https://gyazo.com/9f9dfce8bfd8fbb68e06d7e2a3c67066
void Engine::Start()
{
graphics::Renderer renderer;
renderer.CreateShape(graphics::Triangle::id);
renderer.SetShader("source/graphics/renderer/resource/Default.shader");
while(!window.IsWindowClosed())
{
renderer.DrawTriangle();
window.Update();
}
}
Core Engine Main Procedure creating and drawing shape itself:https://gyazo.com/a7b701d16fae76475456192b31190812
void Engine::Start()
{
graphics::Renderer renderer;
VertexBuffer VBO(Triangle::vertices, sizeof(Triangle::vertices));
VBO.PushLayout(3, GL_FLOAT);
VertexArray VAO;
VAO.Set(VBO);
VAO.Bind();
renderer.SetShader("source/graphics/renderer/resources/Default.shader");
while(!window.IsWindowClosed())
{
GLCall(glDrawArrays(GL_TRIANGLES, 0, 3));
window.Update();
}
}
Create Shape Procedure:
void Renderer::CreateShape(unsigned int shapeID){ //During this test shapeID is set to be a Triangle
switch (shapeID)
{
case graphics::Triangle::id:
{
VertexBuffer VBO(Triangle::vertices, sizeof(Triangle::vertices));
VBO.PushLayout(3, GL_FLOAT);
VertexArray VAO;
VAO.Set(VBO);
VAO.Bind();
renderObjects.push_back(VAO.GetId());
break;
}
// More cases included here...
}
Draw Triangle Procedure:
void graphics::Renderer::DrawTriangle()
{
GLCall(glBindVertexArray(renderObjects.front()));
GLCall(glDrawArrays(GL_TRIANGLES, 0, 3));
}