Refactoring

This commit is contained in:
2022-10-09 17:34:23 +02:00
parent 028829a291
commit 41d09c2b5f
14 changed files with 53 additions and 88 deletions

View File

@@ -16,41 +16,20 @@
#include <glm/gtc/matrix_transform.hpp>
Controller::Controller()
: m_gameWindow(std::make_shared<Window>()), m_camera(std::make_shared<Camera>(90., m_gameWindow->aspectRatio()))
: m_gameWindow(std::make_shared<Window>()),
m_camera(std::make_shared<Camera>(90., m_gameWindow->aspectRatio())),
m_postProcessFrameBuffer(m_gameWindow->dimensions().first, m_gameWindow->dimensions().second,
postProcessingProgram)
{
std::array shaderProgramPrototypes{
ShaderProgram::Prototype{"defaultProgram", "data/shaders/basic.vert", "data/shaders/basic.frag"},
ShaderProgram::Prototype{"lightProgram", "data/shaders/light.vert", "data/shaders/light.frag"},
ShaderProgram::Prototype{"skyboxProgram", "data/shaders/skybox.vert", "data/shaders/skybox.frag"},
ShaderProgram::Prototype{"postProcessingProgram", "data/shaders/postprocessing.vert",
"data/shaders/postprocessing.frag"},
};
for (auto &prototype : shaderProgramPrototypes) {
m_shaderPrograms.push_back(std::make_shared<ShaderProgram>(prototype));
Log::logger().info("Loaded shaderprogram \"{}\"", prototype.name);
}
auto dimensions = m_gameWindow->dimensions();
m_postProcessFrameBuffer = std::make_shared<FrameBuffer>(dimensions.first, dimensions.second,
getShaderProgramByName("postProcessingProgram").get());
m_scene = std::make_shared<Scene>(m_shaderPrograms);
}
void Controller::run()
{
updateExposure(*getShaderProgramByName("postProcessingProgram"));
auto lightSource = m_scene->getEntityByName("light");
lightSource->setScale(.1F);
lightSource->setRotation(glm::vec3(0.));
lightSource->setPosition(glm::vec3(-2., 1.5, 2.));
updateExposure(postProcessingProgram);
m_camera->translate(glm::vec3(0., 1.5, 5.));
static constexpr float INTENSITY = 7.5;
glm::vec3 lightColor{1., 1., 1.};
Log::logger().info("Startup complete.");
// This is the game loop
while (glfwWindowShouldClose(&m_gameWindow->glfw_window()) == GLFW_FALSE) {
@@ -59,26 +38,21 @@ void Controller::run()
limit_framerate();
// --- Update game ---
m_scene->updatePointLight(0, true, m_scene->getEntityByName("light")->getPosition(), lightColor, INTENSITY);
m_scene->updateDirectionalLight(true, m_scene->getDirectionalLight()->getDirection(), lightColor);
getShaderProgramByName("lightProgram")->bind();
getShaderProgramByName("lightProgram")->setUniform("v_lightColor", glm::vec3{1., 1., 1.} * 100.0F);
getShaderProgramByName("lightProgram")->unbind();
lightProgram.bind();
lightProgram.setUniform("v_lightColor", glm::vec3{1., 1., 1.} * 100.0F);
lightProgram.unbind();
// --- Render and buffer swap ---
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
m_postProcessFrameBuffer->bind();
m_postProcessFrameBuffer.bind();
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
m_camera->lookForward();
m_camera->updateVPM();
m_scene->getSkybox()->draw(m_camera->getView(), m_camera->getProj());
m_scene->draw(m_camera->getViewProj(), m_camera->getPosition());
m_postProcessFrameBuffer->unbind();
m_postProcessFrameBuffer->drawOnEntireScreen();
m_postProcessFrameBuffer.unbind();
m_postProcessFrameBuffer.drawOnEntireScreen();
glfwSwapBuffers(&m_gameWindow->glfw_window());
@@ -127,7 +101,7 @@ void Controller::update_window_dimensions()
// m_gameEventHandler->setFirstMouseInput(1);
auto dimensions = m_gameWindow->dimensions();
m_postProcessFrameBuffer->changeDimensions(dimensions.first, dimensions.second);
m_postProcessFrameBuffer.changeDimensions(dimensions.first, dimensions.second);
}
void Controller::updateExposure(ShaderProgram &shaderProgram) const
@@ -136,20 +110,3 @@ void Controller::updateExposure(ShaderProgram &shaderProgram) const
shaderProgram.setUniform("u_exposure", m_exposure);
shaderProgram.unbind();
}
std::shared_ptr<ShaderProgram> Controller::getShaderProgramByName(const std::string &name)
{
return getShaderProgramByName(name, m_shaderPrograms);
}
std::shared_ptr<ShaderProgram>
Controller::getShaderProgramByName(const std::string &name, std::vector<std::shared_ptr<ShaderProgram>> shaderPrograms)
{
for (auto program : shaderPrograms) {
if (program->getUniqueName() == name) {
return program;
}
}
Log::logger().critical("Shaderprogram could not be found by name \"{}\"", name);
return {};
}