bb4592ed63
Changing the mechanic of the renderer to support pipelines. One scene could have multiple pipelines. The pipelines allow for one shader, one camera, and multiple batches.
60 lines
2.1 KiB
C++
60 lines
2.1 KiB
C++
#include "MyBuiltinCubeScene.h"
|
|
|
|
#include <charcoal/constants.h>
|
|
|
|
#include <charcoal-builtin/MeshGenerator.h>
|
|
|
|
MyBuiltinCubeScene::MyBuiltinCubeScene(Application& application)
|
|
: basic::Scene(application),
|
|
m_shape(meshgenerator::gen_cube_p<basic::Vertex, basic::Index>(DRAW_TRIANGLES, 2.0f, 2.0f, 2.0f), DrawMode::DRAW_TRIANGLES),
|
|
m_camera((float)TAU_1_4, (float)m_screen_size.x / m_screen_size.y, 1.0f, 10.0f, vec3(0.0f, 0.0f, -5.0f)),
|
|
m_batch(add_batch(&m_shape, 2))
|
|
{
|
|
add_prerenderable(&m_camera);
|
|
set_camera(&m_camera);
|
|
}
|
|
|
|
void MyBuiltinCubeScene::update(float delta_time, clock_t clock)
|
|
{
|
|
float brightness;
|
|
float radians;
|
|
|
|
clock_t c;
|
|
const clock_t intervals = 512 * CLOCKS_PER_SEC / 100;
|
|
const clock_t half_interval = 256 * CLOCKS_PER_SEC / 100;
|
|
c = clock % intervals;
|
|
if (c < half_interval)
|
|
brightness = (float)c / half_interval;
|
|
else
|
|
brightness = (float)(intervals - c) / half_interval;
|
|
|
|
radians = (float)TAU * c / intervals;
|
|
|
|
m_pose_a.rotate(glm::normalize(vec3(1.0f, 1.0f, 0.0f)), (float)TAU_1_2 * delta_time);
|
|
m_pose_a.update_position(vec3(3 * (float)cos(radians), 0.0f, 0.0f));
|
|
|
|
m_pose_b.rotate(glm::normalize(vec3(1.0f, 1.0f, 0.0f)), (float)TAU_1_2 * delta_time);
|
|
m_pose_b.update_position(vec3(-3 * (float)cos(radians), 0.0f, 0.0f));
|
|
|
|
vec3 camera_translation(0.0f, 0.0f, 0.0f);
|
|
|
|
if (m_input_manager.is_key_down(GLFW_KEY_W)) camera_translation.y += 1;
|
|
if (m_input_manager.is_key_down(GLFW_KEY_S)) camera_translation.y -= 1;
|
|
if (m_input_manager.is_key_down(GLFW_KEY_A)) camera_translation.x -= 1;
|
|
if (m_input_manager.is_key_down(GLFW_KEY_D)) camera_translation.x += 1;
|
|
if (m_input_manager.is_key_down(GLFW_KEY_Q)) camera_translation.z -= 1;
|
|
if (m_input_manager.is_key_down(GLFW_KEY_E)) camera_translation.z += 1;
|
|
|
|
float camera_rotation = 0.0f;
|
|
if (m_input_manager.is_key_down(GLFW_KEY_Z)) camera_rotation += 1;
|
|
if (m_input_manager.is_key_down(GLFW_KEY_C)) camera_rotation -= 1;
|
|
|
|
m_camera.translate(camera_translation * delta_time);
|
|
m_camera.rotate(vec3(0.0f, 1.0f, 0.0f), camera_rotation * (float)TAU_1_8 * delta_time);
|
|
|
|
m_batch.reset_rendered();
|
|
m_batch.add_rendered(m_pose_a);
|
|
m_batch.add_rendered(m_pose_b);
|
|
}
|
|
|