@@ -2,11 +2,12 @@
#include <glm/gtc/matrix_transform.hpp>
#include <iostream>
#include <GLFW/glfw3.h>
#include <ImmediateDraw.h>

Renderer::Renderer() {
Renderer::Renderer() : postProcessBuffer({ 800, 600 }, RGB) {
shadow_pass_shader.loadFromFile("shaders/shadow_pass.vert", "shaders/shadow_pass.frag", "shaders/shadow_pass.geom");
forward_render_shader.loadFromFile("shaders/basic.vert", "shaders/basic.frag");

post_process_shader.loadFromFile("shaders/post_process.vert", "shaders/post_process.frag");
}

void Renderer::addPointLight(PointLight light) {
@@ -31,6 +32,7 @@ void Renderer::render() {
shadow_pass_shader.setUniform("far_plane", POINT_LIGHT_DEPTH_MAP_FAR_PLANE);

gl::Enable(gl::DEPTH_TEST);
gl::DepthFunc(gl::LESS);
for (int i = 0; i < point_lights.size(); i++) {
PointLight& light = point_lights.at(i);
Framebuffer& fb = shadow_maps.at(i);
@@ -60,8 +62,8 @@ void Renderer::render() {


// Render scene
gl::BindFramebuffer(gl::FRAMEBUFFER, 0);
gl::Viewport(0, 0, 800, 800);
postProcessBuffer.bind();
gl::Viewport(0, 0, 800, 600);
gl::ClearColor(0.1f, 0.1f, 0.1f, 1.0f);
gl::Clear(gl::COLOR_BUFFER_BIT | gl::DEPTH_BUFFER_BIT);

@@ -89,5 +91,16 @@ void Renderer::render() {
it.draw(forward_render_shader);
}


//gl::PolygonMode(gl::FRONT_AND_BACK, gl::LINE);
gl::Disable(gl::DEPTH_TEST);

gl::BindFramebuffer(gl::FRAMEBUFFER, 0);
gl::Clear(gl::COLOR_BUFFER_BIT | gl::DEPTH_BUFFER_BIT);

post_process_shader.bind();
post_process_shader.setUniform("screen_capture", 0);
postProcessBuffer.bindTexture(0);


ImmediateDraw::drawPlane(2, 2);
}
@@ -20,6 +20,9 @@ class Renderer {
Camera* camera;
glm::mat4 projection;
private:
Framebuffer postProcessBuffer;

Shader post_process_shader;
Shader shadow_pass_shader;
Shader forward_render_shader;

@@ -52,19 +52,23 @@ void Shader::compile(const char* vertexSource, const char* fragmentSource, const
geometrySource ? gl::DeleteShader(geometry) : 0;
}

#include <Log.h>

std::string Shader::loadSingle(const char* shaderFile) {
std::stringstream out;
try {
std::ifstream file;
file.exceptions(std::ifstream::failbit | std::ifstream::badbit);
file.open(shaderFile);

out << file.rdbuf();
file.close();
}
catch (std::exception e) {
std::cout << "ERROR::SHADER: Failed loading file: " << shaderFile << "\n" << e.what() << std::endl;
Log::write("Error: Compiling shader failed. Abort ship.");
}

Log::write("Info: Shader Source: \n" + out.str());
return out.str();
}

@@ -16,7 +16,7 @@
#include <glm/gtc/type_ptr.hpp>

#include <Renderer.h>

#include <2D/GUIContext.h>
#include <ImmediateDraw.h>

constexpr float CAMERA_NEAR_PLANE = 0.1f;
@@ -43,8 +43,8 @@ void key_callback(GLFWwindow* window, int key, int scancode, int action, int mod
void CALLBACK ErrorCallback(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar* message, const void* userParam) {
std::cout << message << std::endl;

if (severity != gl::DEBUG_SEVERITY_NOTIFICATION) {

if (severity == gl::DEBUG_SEVERITY_HIGH || severity == gl::DEBUG_SEVERITY_MEDIUM) {
//std::cin.get();
}
}

@@ -250,6 +250,8 @@ int main() {

};

GUIContext gui_context(800, 600);

//glPolygonMode(gl::FRONT_AND_BACK, gl::LINE);
gl::DepthFunc(gl::LESS);
gl::Enable(gl::DEPTH_TEST);
@@ -262,7 +264,7 @@ int main() {
brick_diffuse.bind(0);
brick_specular.bind(1);
renderer.render();
drawPlane(100, 100);
gui_context.render();

glfwSwapBuffers(window);
}