charcoal/OpenGLEngine/MyApplication.cpp
elipzer a933c19fa9 Got the scene to render.
Need to re-make the builtin version. The problem, again, was caused
by vtables. Need to find a way to make interfaces without virtual
methods to remove the need for vtables. Found a good stackoverflow
article on this.

https://stackoverflow.com/questions/44317289/c-interface-without-virtual-functions

The Positioned, Normaled, Textured, etc. Interfaces should be
re-made using this format.
2018-09-13 13:35:30 -04:00

74 lines
1.4 KiB
C++

#include "MyApplication.h"
MyApplication::MyApplication(int width, int height)
: Application(width, height),
m_basic_scene(*this),
m_simple_2d_scene(*this),
m_simple_3d_scene(*this),
m_simple_cube_scene(*this),
m_builtin_basic_scene(*this)
{}
void MyApplication::init()
{
m_basic_scene.init();
m_simple_2d_scene.init();
m_simple_3d_scene.init();
m_simple_cube_scene.init();
m_builtin_basic_scene.init();
m_p_current_scene = &m_basic_scene;
m_p_current_scene->use();
}
void MyApplication::update(float delta_time, clock_t clock)
{
if (m_glfw_input_manager.is_key_pressed(GLFW_KEY_1))
{
swap_scene(&m_basic_scene);
}
else if (m_glfw_input_manager.is_key_pressed(GLFW_KEY_2))
{
swap_scene(&m_simple_2d_scene);
}
else if (m_glfw_input_manager.is_key_pressed(GLFW_KEY_3))
{
swap_scene(&m_simple_3d_scene);
}
else if (m_glfw_input_manager.is_key_pressed(GLFW_KEY_4))
{
swap_scene(&m_simple_cube_scene);
}
else if (m_glfw_input_manager.is_key_pressed(GLFW_KEY_5))
{
swap_scene(&m_builtin_basic_scene);
}
m_p_current_scene->update(delta_time, clock);
}
void MyApplication::prerender()
{
m_p_current_scene->prerender();
}
void MyApplication::render()
{
m_p_current_scene->render();
}
void MyApplication::close()
{
m_p_current_scene->unuse();
}
void MyApplication::swap_scene(Scene* scene)
{
if (m_p_current_scene != scene)
{
m_p_current_scene->unuse();
m_p_current_scene = scene;
m_p_current_scene->use();
}
}