Fixed some lighting bug + serialization progress

This commit is contained in:
Antoine Pilote
2021-05-24 19:23:34 -04:00
parent e14a2f18d9
commit 1f1047d23b
33 changed files with 277 additions and 597 deletions

View File

@@ -19,36 +19,39 @@
#include "Resource/FontAwesome5.h"
#include "../Engine.h"
// TODO: Use abstraction for vertex buffers
unsigned int vbo;
unsigned int vao;
// TODO: Move to primitive storage.
float vertices[] = {
1.0f, 1.0f, 0.0f, 1.0f, 1.0f,
1.0f, -1.0f, 0.0f, 1.0f, 0.0f,
-1.0f, 1.0f, 0.0f, 0.0f, 1.0f,
-1.0f, -1.0f, 0.0f, 0.0f, 0.0f,
-1.0f, 1.0f, 0.0f, 0.0f, 1.0f,
1.0f, -1.0f, 0.0f, 1.0f, 0.0f
1.0f, -1.0f, 0.0f, 1.0f, 0.0f,
-1.0f, -1.0f, 0.0f, 0.0f, 0.0f,
-1.0f, 1.0f, 0.0f, 0.0f, 1.0f
};
Ref<Window> Window::s_Instance;
Window::Window()
{
s_Instance = this;
Init();
Renderer::Init();
//m_Scene->Init();
}
Window::~Window()
{
}
Window::~Window() { }
Window* Window::Get()
Ref<Window> Window::Get()
{
if (s_Instance == nullptr)
s_Instance = CreateRef<Window>();
return s_Instance;
}
@@ -64,6 +67,9 @@ GLFWwindow* Window::GetHandle()
bool Window::SetScene(Ref<Scene> scene)
{
if (scene == nullptr)
return false;
m_Scene = scene;
return true;
}
@@ -78,41 +84,44 @@ Ref<FrameBuffer> Window::GetFrameBuffer() const
return m_Framebuffer;
}
unsigned int captureFBO, captureRBO;
Window* Window::s_Instance;
unsigned int texture;
int Window::Init()
{
if (!glfwInit()) {
std::cout << "glfw initialization failed." << std::endl;
return -1;
if (!glfwInit())
{
Logger::Log("glfw initialization failed.");
return -1;
}
int width, height;
// Create window
m_Window = glfwCreateWindow(1280, 720, "Editor - Dev build", NULL, NULL);
m_Window = glfwCreateWindow(m_Width, m_Height, "Editor - Dev build", NULL, NULL);
if (!m_Window) {
std::cout << "Window creation failed." << std::endl;
if (!m_Window)
{
Logger::Log("Window creation failed.");
return -1;
}
glfwMakeContextCurrent(m_Window);
std::cout << glGetString(GL_VERSION) << std::endl;
Logger::Log((char*)glGetString(GL_VERSION));
if (glewInit() != GLEW_OK) {
std::cout << "GLEW initialization failed!";
if (glewInit() != GLEW_OK)
{
Logger::Log("GLEW initialization failed!");
return -1;
}
// TODO: Move this to renderer init. The window shouldnt have to do gl calls.
glfwWindowHint(GLFW_SAMPLES, 4);
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); // To make MacOS happy; should not be needed
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
// TODO: have clear color in environnement.
glClearColor(0.019f, 0.501f, 1.0f, 1.0f);
glEnable(GL_TEXTURE_CUBE_MAP_SEAMLESS);
glEnable(GL_DEPTH_TEST);
glEnable(GL_MULTISAMPLE);
@@ -120,16 +129,11 @@ int Window::Init()
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
//glEnable(GL_CULL_FACE);
// create viewports
m_DeferredFrambuffer = new FrameBuffer(false, glm::vec2(1920, 1080), GL_COLOR_ATTACHMENT0);
m_DeferredFrambuffer->SetTexture(CreateRef<Texture>(glm::vec2(1920, 1080), GL_RGB));
m_Framebuffer = CreateRef<FrameBuffer>(true, glm::vec2(1920, 1080), GL_COLOR_ATTACHMENT0);
// Create viewports
m_Framebuffer = CreateRef<FrameBuffer>(true, glm::vec2(1920, 1080));
m_Framebuffer->SetTexture(CreateRef<Texture>(glm::vec2(1920, 1080), GL_RGB));
m_GBuffer = new GBuffer(glm::vec2(1920, 1080));
// Temporary quad vbo for deferred.
glGenVertexArrays(1, &vao);
glBindVertexArray(vao);
@@ -146,14 +150,13 @@ int Window::Init()
glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, sizeof(float) * 5, (void*)(sizeof(float) * 3));
glEnableVertexAttribArray(1);
// TODO: Style should move to editor
ImGui::CreateContext();
ImGuiIO& io = ImGui::GetIO(); (void)io;
io.Fonts->AddFontDefault();
io.ConfigFlags |= ImGuiConfigFlags_DockingEnable;
ImGui::StyleColorsDark();
//io.Fonts->AddFontFromFileTTF("../data/Fonts/Ruda-Bold.ttf", 15.0f, &config);
ImGui::GetStyle().FrameRounding = 4.0f;
ImGui::GetStyle().GrabRounding = 4.0f;
@@ -207,53 +210,43 @@ int Window::Init()
colors[ImGuiCol_NavWindowingDimBg] = ImVec4(0.80f, 0.80f, 0.80f, 0.20f);
colors[ImGuiCol_ModalWindowDimBg] = ImVec4(0.80f, 0.80f, 0.80f, 0.35f);
ImGui_ImplGlfw_InitForOpenGL(m_Window, true);
ImGui_ImplOpenGL3_Init("#version 330");
//m_Scene = CreateRef<Scene>();
return 0;
}
void Window::Update(Timestep ts)
{
// TODO: have event here?
}
glm::vec4 m_Color;
float x = 0.0f;
float y = 0.0f;
float z = 0.0f;
bool init = false;
void Window::Draw()
{
// Dont render if no scene is loaded.
if (!m_Scene)
return;
// Dont render if no cam is found.
Ref<Camera> cam = m_Scene->GetCurrentCamera();
if (!cam)
return;
if (!cam) return;
Renderer::BeginDraw(cam);
{
glCullFace(GL_FRONT);
m_Scene->DrawShadows();
glCullFace(GL_BACK);
//glCullFace(GL_FRONT);
//glCullFace(GL_BACK);
m_Scene->DrawShadows();
m_Framebuffer->Bind();
if(Engine::IsPlayMode)
m_Scene->Draw();
else
m_Scene->EditorDraw();
m_Framebuffer->Unbind();
m_Framebuffer->Bind();
{
if (Engine::IsPlayMode)
m_Scene->Draw();
else
m_Scene->EditorDraw();
}
m_Framebuffer->Unbind();
}
Renderer::EndDraw();
}
@@ -265,40 +258,3 @@ void Window::EndDraw()
glfwSwapBuffers(m_Window);
glfwPollEvents();
}
void Window::DrawQuad()
{
//Renderer::m_DeferredShader->Bind();
//m_DeferredFrambuffer->Bind();
//m_Scene->DrawDeferred();
//glActiveTexture(GL_TEXTURE0 + 5);
//glBindTexture(GL_TEXTURE_2D, m_GBuffer->gAlbedo);
//
//glActiveTexture(GL_TEXTURE0 + 6);
//glBindTexture(GL_TEXTURE_2D, m_GBuffer->gNormal);
//
//glActiveTexture(GL_TEXTURE0 + 7);
//glBindTexture(GL_TEXTURE_2D, m_GBuffer->gMaterial);
//
//glActiveTexture(GL_TEXTURE0 + 8);
//glBindTexture(GL_TEXTURE_2D, m_GBuffer->gDepth);
//
//Renderer::m_DeferredShader->SetUniform1i("m_Albedo", 5);
//Renderer::m_DeferredShader->SetUniform1i("m_Depth", 8);
//Renderer::m_DeferredShader->SetUniform1i("m_Normal", 6);
//Renderer::m_DeferredShader->SetUniform1i("m_Material", 7);
//
//glBindVertexArray(vao);
//glDrawArrays(GL_TRIANGLES, 0, 6);
//
//m_DeferredFrambuffer->Unbind();
}
Ref<Texture> Window::GetSceneRenderTexture()
{
return m_Framebuffer->GetTexture();
}