diff --git a/Editor/src/Misc/GizmoDrawer.cpp b/Editor/src/Misc/GizmoDrawer.cpp index 6b201982..a33cbcc9 100644 --- a/Editor/src/Misc/GizmoDrawer.cpp +++ b/Editor/src/Misc/GizmoDrawer.cpp @@ -4,6 +4,7 @@ #include #include #include +#include #include #include @@ -35,6 +36,7 @@ GizmoDrawer::GizmoDrawer() _gizmos = std::map>(); _gizmos["cam"] = loader.LoadModel("resources/Models/Camera.gltf"); _gizmos["light"] = loader.LoadModel("resources/Models/Light.gltf"); + _gizmos["player"] = loader.LoadModel("resources/Models/Player.gltf"); } void GizmoDrawer::GenerateSphereGizmo() @@ -178,7 +180,7 @@ void GizmoDrawer::DrawGizmos(Ref scene) { using namespace Nuake; //RenderCommand::Disable(RendererEnum::DEPTH_TEST); - RenderCommand::Enable(RendererEnum::DEPTH_TEST); + //RenderCommand::Enable(RendererEnum::DEPTH_TEST); // Draw Axis lignes. { mLineShader->Bind(); @@ -224,6 +226,8 @@ void GizmoDrawer::DrawGizmos(Ref scene) glCullFace(GL_BACK); RenderList renderList; + + // Camera auto camView = scene->m_Registry.view(); for (auto e : camView) { @@ -233,6 +237,7 @@ void GizmoDrawer::DrawGizmos(Ref scene) } renderList.Flush(flatShader, true); + // Lights auto lightView = scene->m_Registry.view(); for (auto e : lightView) { @@ -242,8 +247,24 @@ void GizmoDrawer::DrawGizmos(Ref scene) renderList.AddToRenderList(_gizmos["light"]->GetMeshes()[0], transform.GetGlobalTransform()); renderList.Flush(flatShader, true); } + renderList.Flush(flatShader, true); + + + // Player + auto characterControllerView = scene->m_Registry.view(); + for (auto e : characterControllerView) + { + auto [transformComponent, characterControllerComponent] = scene->m_Registry.get(e); + + flatShader->SetUniformVec4("u_Color", Vector4(0.0f, 1.0f, 0.4f, 1.0f)); + + const auto scaledTransform = glm::scale(transformComponent.GetGlobalTransform(), Vector3(0.25f, 0.25f, 0.25f)); + renderList.AddToRenderList(_gizmos["player"]->GetMeshes()[0], scaledTransform); + renderList.Flush(flatShader, true); + } renderList.Flush(flatShader, true); + RenderCommand::Disable(RendererEnum::FACE_CULL); RenderCommand::Enable(RendererEnum::DEPTH_TEST); } \ No newline at end of file diff --git a/Editor/src/Windows/FileSystemUI.cpp b/Editor/src/Windows/FileSystemUI.cpp index 0054a8fb..5d6e70ac 100644 --- a/Editor/src/Windows/FileSystemUI.cpp +++ b/Editor/src/Windows/FileSystemUI.cpp @@ -84,10 +84,12 @@ namespace Nuake { void FileSystemUI::DrawDirectory(Ref directory) { ImGui::PushFont(EditorInterface::bigIconFont); - std::string id = directory->name; - + const char* icon = ICON_FA_FOLDER; + const std::string id = ICON_FA_FOLDER + std::string("##") + directory->name; if (ImGui::Button(id.c_str(), ImVec2(100, 100))) + { m_CurrentDirectory = directory; + } ImGui::Text(directory->name.c_str()); ImGui::PopFont(); diff --git a/Nuake/src/Rendering/SceneRenderer.cpp b/Nuake/src/Rendering/SceneRenderer.cpp index 10143130..7cbcb5c3 100644 --- a/Nuake/src/Rendering/SceneRenderer.cpp +++ b/Nuake/src/Rendering/SceneRenderer.cpp @@ -7,21 +7,20 @@ namespace Nuake { void SceneRenderer::Init() { - mGBuffer = CreateScope(false, Vector2(1920, 1080)); - mGBuffer->SetTexture(CreateRef(Vector2(1920, 1080), GL_DEPTH_COMPONENT), GL_DEPTH_ATTACHMENT); - mGBuffer->SetTexture(CreateRef(Vector2(1920, 1080), GL_RGB), GL_COLOR_ATTACHMENT0); - mGBuffer->SetTexture(CreateRef(Vector2(1920, 1080), GL_RGB), GL_COLOR_ATTACHMENT1); - mGBuffer->SetTexture(CreateRef(Vector2(1920, 1080), GL_RGB), GL_COLOR_ATTACHMENT2); - mGBuffer->SetTexture(CreateRef(Vector2(1920, 1080), GL_RGB), GL_COLOR_ATTACHMENT3); + const auto defaultResolution = Vector2(1920, 1080); + mGBuffer = CreateScope(false, defaultResolution); + mGBuffer->SetTexture(CreateRef(defaultResolution, GL_DEPTH_COMPONENT), GL_DEPTH_ATTACHMENT); + mGBuffer->SetTexture(CreateRef(defaultResolution, GL_RGB), GL_COLOR_ATTACHMENT0); + mGBuffer->SetTexture(CreateRef(defaultResolution, GL_RGB), GL_COLOR_ATTACHMENT1); + mGBuffer->SetTexture(CreateRef(defaultResolution, GL_RGB), GL_COLOR_ATTACHMENT2); + mGBuffer->SetTexture(CreateRef(defaultResolution, GL_RGB), GL_COLOR_ATTACHMENT3); - mShadingBuffer = CreateScope(true, Vector2(1920, 1080)); - Ref shadedTexture = CreateRef(Vector2(1920, 1080), GL_RGB, GL_RGB16F, GL_FLOAT); - mShadingBuffer->SetTexture(shadedTexture); + mShadingBuffer = CreateScope(true, defaultResolution); + mShadingBuffer->SetTexture(CreateRef(defaultResolution, GL_RGB, GL_RGB16F, GL_FLOAT)); mSSR = CreateScope(); - - mToneMapBuffer = CreateScope(false, Vector2(1920, 1080)); - mToneMapBuffer->SetTexture(CreateRef(Vector2(1920, 1080), GL_RGB), GL_COLOR_ATTACHMENT0); + mToneMapBuffer = CreateScope(false, defaultResolution); + mToneMapBuffer->SetTexture(CreateRef(defaultResolution, GL_RGB), GL_COLOR_ATTACHMENT0); } void SceneRenderer::Cleanup() @@ -36,8 +35,14 @@ namespace Nuake { mCamPos = camPos; } + /// + /// Renders a scene to a framebuffer. The size of the framebuffer will be used. + /// + /// Scene to render + /// Framebuffer to render the scene to. Should be in the right size void SceneRenderer::RenderScene(Scene& scene, FrameBuffer& framebuffer) { + // Renders all shadow maps ShadowPass(scene); mGBuffer->QueueResize(framebuffer.GetSize()); @@ -47,14 +52,14 @@ namespace Nuake { ShadingPass(scene); const auto& sceneEnv = scene.GetEnvironment(); - Texture* finalOutput = mShadingBuffer->GetTexture().get(); + Ref finalOutput = mShadingBuffer->GetTexture(); if (scene.GetEnvironment()->BloomEnabled) { sceneEnv->mBloom->SetSource(mShadingBuffer->GetTexture()); sceneEnv->mBloom->Resize(framebuffer.GetSize()); sceneEnv->mBloom->Draw(); - finalOutput = scene.GetEnvironment()->mBloom->GetOutput().get(); + finalOutput = scene.GetEnvironment()->mBloom->GetOutput(); } @@ -82,14 +87,15 @@ namespace Nuake { Shader* shader = ShaderManager::GetShader("resources/Shaders/combine.shader"); shader->Bind(); - shader->SetUniformTex("u_Source", finalOutput, 0); + shader->SetUniformTex("u_Source", finalOutput.get(), 0); shader->SetUniformTex("u_Source2", sceneEnv->mVolumetric->GetFinalOutput().get(), 1); Renderer::DrawQuad(); } framebuffer.Unbind(); } - finalOutput = framebuffer.GetTexture().get(); + finalOutput = framebuffer.GetTexture(); + // SSAO sceneEnv->mSSAO->Resize(framebuffer.GetSize()); sceneEnv->mSSAO->Draw(mGBuffer.get(), mProjection, mView); @@ -104,13 +110,11 @@ namespace Nuake { shader->SetUniform1f("u_Exposure", scene.GetEnvironment()->Exposure); shader->SetUniform1f("u_Gamma", scene.GetEnvironment()->Gamma); - shader->SetUniformTex("u_Source", finalOutput); + shader->SetUniformTex("u_Source", finalOutput.get()); Renderer::DrawQuad(); } mToneMapBuffer->Unbind(); - - mSSR->Resize(framebuffer.GetSize()); mSSR->Draw(mGBuffer.get(), framebuffer.GetTexture(), mView, mProjection, scene.GetCurrentCamera()); diff --git a/Nuake/src/Rendering/Textures/Texture.cpp b/Nuake/src/Rendering/Textures/Texture.cpp index 3e9c3df0..346c8a8c 100644 --- a/Nuake/src/Rendering/Textures/Texture.cpp +++ b/Nuake/src/Rendering/Textures/Texture.cpp @@ -23,11 +23,11 @@ namespace Nuake glGenerateMipmap(GL_TEXTURE_2D); //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_LOD_BIAS, -1.0f); + //glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_LOD_BIAS, -1.0f); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, m_Width, m_Height, 0, GL_RGBA, GL_UNSIGNED_BYTE, m_LocalBuffer); glGenerateMipmap(GL_TEXTURE_2D); if (m_LocalBuffer)