Refactoring
This commit is contained in:
@@ -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 {};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user