diff --git a/Editor/src/Misc/ThumbnailManager.cpp b/Editor/src/Misc/ThumbnailManager.cpp index 1dfd48ea..00c5d5f2 100644 --- a/Editor/src/Misc/ThumbnailManager.cpp +++ b/Editor/src/Misc/ThumbnailManager.cpp @@ -4,6 +4,7 @@ #include #include #include +#include ThumbnailManager::ThumbnailManager() @@ -68,61 +69,130 @@ Ref ThumbnailManager::GenerateThumbnail(const std::string& path, Matrix4 view = Matrix4(1.0f); view = glm::lookAt(Vector3(1, -1.0, 0), Vector3(0, 0, 0), Vector3(0, 1, 0));; - // Gbuffer pass - m_Framebuffer->Bind(); + + auto file = FileSystem::GetFile(path); + if (file->GetFileType() == FileType::Prefab) { - RenderCommand::SetClearColor({ 0.0f, 0.0f, 0.0f, 0.0f }); - m_Framebuffer->Clear(); + Ref scene = Scene::New(); + auto cam = scene->CreateEntity("Camera"); + cam.AddComponent(); - RenderCommand::Disable(RendererEnum::BLENDING); - RenderCommand::Enable(RendererEnum::DEPTH_TEST); - auto shader = ShaderManager::GetShader("Resources/Shaders/gbuffer.shader"); - shader->Bind(); + scene->Update(0.01f); + scene->Draw(*m_ShadedFramebuffer.get()); - auto cam = Engine::GetCurrentScene()->GetCurrentCamera(); - shader->SetUniformMat4f("u_View", view); - shader->SetUniformMat4f("u_Projection", ortho); - shader->SetUniformMat4f("u_Model", Matrix4(1.0f)); - Ref material = ResourceLoader::LoadMaterial(path); - material->Bind(shader); - Renderer::SphereMesh->Draw(shader, false); + // Gbuffer pass + //m_Framebuffer->Bind(); + //{ + // RenderCommand::SetClearColor({ 0.3f, 0.3f, 0.3f, 0.3f }); + // m_Framebuffer->Clear(); + // + // RenderCommand::Disable(RendererEnum::BLENDING); + // RenderCommand::Enable(RendererEnum::DEPTH_TEST); + // auto shader = ShaderManager::GetShader("Resources/Shaders/gbuffer.shader"); + // shader->Bind(); + // + // auto cam = Engine::GetCurrentScene()->GetCurrentCamera(); + // shader->SetUniformMat4f("u_View", view); + // shader->SetUniformMat4f("u_Projection", ortho); + // shader->SetUniformMat4f("u_Model", Matrix4(1.0f)); + // Renderer::SphereMesh->Draw(shader, true); + //} + //m_Framebuffer->Unbind(); + //m_ShadedFramebuffer->SetTexture(texture); + //m_ShadedFramebuffer->Bind(); + //{ + // //RenderCommand::Enable(RendererEnum::BLENDING); + // RenderCommand::SetClearColor({ 0.2, 0.2, 0.2, 1 }); + // m_ShadedFramebuffer->Clear(); + // RenderCommand::Disable(RendererEnum::DEPTH_TEST); + // RenderCommand::Disable(RendererEnum::FACE_CULL); + // auto shader = ShaderManager::GetShader("Resources/Shaders/deferred.shader"); + // shader->Bind(); + // shader->SetUniformVec3("u_EyePosition", Vector3(1, 0, 0)); + // shader->SetUniform1i("LightCount", 0); + // auto dir = Engine::GetCurrentScene()->GetEnvironment()->ProceduralSkybox->GetSunDirection(); + // shader->SetUniform3f("u_DirectionalLight.Direction", 0.6, -0.6, 0.6); + // shader->SetUniform3f("u_DirectionalLight.Color", 10.0f, 10.0f, 10.0f); + // shader->SetUniform1i("u_DirectionalLight.Shadow", 0); + // shader->SetUniform1i("u_DisableSSAO", 1); + // shader->SetUniformMat4f("u_View", view); + // shader->SetUniformMat4f("u_Projection", ortho); + // + // m_Framebuffer->GetTexture(GL_DEPTH_ATTACHMENT)->Bind(5); + // m_Framebuffer->GetTexture(GL_COLOR_ATTACHMENT0)->Bind(6); + // m_Framebuffer->GetTexture(GL_COLOR_ATTACHMENT1)->Bind(7); + // m_Framebuffer->GetTexture(GL_COLOR_ATTACHMENT2)->Bind(8); + // m_Framebuffer->GetTexture(GL_COLOR_ATTACHMENT4)->Bind(10); + // + // shader->SetUniform1i("m_Depth", 5); + // shader->SetUniform1i("m_Albedo", 6); + // shader->SetUniform1i("m_Normal", 7); + // shader->SetUniform1i("m_Material", 8); + // shader->SetUniform1i("m_Emissive", 10); + // + // Renderer::DrawQuad(Matrix4()); + //} + //m_ShadedFramebuffer->Unbind(); } - m_Framebuffer->Unbind(); - m_ShadedFramebuffer->SetTexture(texture); - m_ShadedFramebuffer->Bind(); + else if (file->GetFileType() == FileType::Material) { - //RenderCommand::Enable(RendererEnum::BLENDING); - RenderCommand::SetClearColor({ 0.2, 0.2, 0.2, 1 }); - m_ShadedFramebuffer->Clear(); - RenderCommand::Disable(RendererEnum::DEPTH_TEST); - RenderCommand::Disable(RendererEnum::FACE_CULL); - auto shader = ShaderManager::GetShader("Resources/Shaders/deferred.shader"); - shader->Bind(); - shader->SetUniformVec3("u_EyePosition", Vector3(1, 0, 0)); - shader->SetUniform1i("LightCount", 0); - auto dir = Engine::GetCurrentScene()->GetEnvironment()->ProceduralSkybox->GetSunDirection(); - shader->SetUniform3f("u_DirectionalLight.Direction", 0.6, -0.6, 0.6); - shader->SetUniform3f("u_DirectionalLight.Color", 10.0f, 10.0f, 10.0f); - shader->SetUniform1i("u_DirectionalLight.Shadow", 0); - shader->SetUniform1i("u_DisableSSAO", 1); - shader->SetUniformMat4f("u_View", view); - shader->SetUniformMat4f("u_Projection", ortho); + // Gbuffer pass + m_Framebuffer->Bind(); + { + RenderCommand::SetClearColor({ 0.0f, 0.0f, 0.0f, 0.0f }); + m_Framebuffer->Clear(); - m_Framebuffer->GetTexture(GL_DEPTH_ATTACHMENT)->Bind(5); - m_Framebuffer->GetTexture(GL_COLOR_ATTACHMENT0)->Bind(6); - m_Framebuffer->GetTexture(GL_COLOR_ATTACHMENT1)->Bind(7); - m_Framebuffer->GetTexture(GL_COLOR_ATTACHMENT2)->Bind(8); - m_Framebuffer->GetTexture(GL_COLOR_ATTACHMENT4)->Bind(10); + RenderCommand::Disable(RendererEnum::BLENDING); + RenderCommand::Enable(RendererEnum::DEPTH_TEST); + auto shader = ShaderManager::GetShader("Resources/Shaders/gbuffer.shader"); + shader->Bind(); - shader->SetUniform1i("m_Depth", 5); - shader->SetUniform1i("m_Albedo", 6); - shader->SetUniform1i("m_Normal", 7); - shader->SetUniform1i("m_Material", 8); - shader->SetUniform1i("m_Emissive", 10); + auto cam = Engine::GetCurrentScene()->GetCurrentCamera(); + shader->SetUniformMat4f("u_View", view); + shader->SetUniformMat4f("u_Projection", ortho); + shader->SetUniformMat4f("u_Model", Matrix4(1.0f)); + Ref material = ResourceLoader::LoadMaterial(path); + material->Bind(shader); + Renderer::SphereMesh->Draw(shader, false); + } + m_Framebuffer->Unbind(); + m_ShadedFramebuffer->SetTexture(texture); + m_ShadedFramebuffer->Bind(); + { + //RenderCommand::Enable(RendererEnum::BLENDING); + RenderCommand::SetClearColor({ 0.2, 0.2, 0.2, 1 }); + m_ShadedFramebuffer->Clear(); + RenderCommand::Disable(RendererEnum::DEPTH_TEST); + RenderCommand::Disable(RendererEnum::FACE_CULL); + auto shader = ShaderManager::GetShader("Resources/Shaders/deferred.shader"); + shader->Bind(); + shader->SetUniformVec3("u_EyePosition", Vector3(1, 0, 0)); + shader->SetUniform1i("LightCount", 0); + auto dir = Engine::GetCurrentScene()->GetEnvironment()->ProceduralSkybox->GetSunDirection(); + shader->SetUniform3f("u_DirectionalLight.Direction", 0.6, -0.6, 0.6); + shader->SetUniform3f("u_DirectionalLight.Color", 10.0f, 10.0f, 10.0f); + shader->SetUniform1i("u_DirectionalLight.Shadow", 0); + shader->SetUniform1i("u_DisableSSAO", 1); + shader->SetUniformMat4f("u_View", view); + shader->SetUniformMat4f("u_Projection", ortho); + + m_Framebuffer->GetTexture(GL_DEPTH_ATTACHMENT)->Bind(5); + m_Framebuffer->GetTexture(GL_COLOR_ATTACHMENT0)->Bind(6); + m_Framebuffer->GetTexture(GL_COLOR_ATTACHMENT1)->Bind(7); + m_Framebuffer->GetTexture(GL_COLOR_ATTACHMENT2)->Bind(8); + m_Framebuffer->GetTexture(GL_COLOR_ATTACHMENT4)->Bind(10); + + shader->SetUniform1i("m_Depth", 5); + shader->SetUniform1i("m_Albedo", 6); + shader->SetUniform1i("m_Normal", 7); + shader->SetUniform1i("m_Material", 8); + shader->SetUniform1i("m_Emissive", 10); + + Renderer::DrawQuad(Matrix4()); + } + m_ShadedFramebuffer->Unbind(); + } - Renderer::DrawQuad(Matrix4()); - } - m_ShadedFramebuffer->Unbind(); return m_ShadedFramebuffer->GetTexture(GL_COLOR_ATTACHMENT0); } \ No newline at end of file diff --git a/Editor/src/Windows/FileSystemUI.cpp b/Editor/src/Windows/FileSystemUI.cpp index fe9dd6b6..42e7e357 100644 --- a/Editor/src/Windows/FileSystemUI.cpp +++ b/Editor/src/Windows/FileSystemUI.cpp @@ -353,6 +353,10 @@ namespace Nuake { textureImage = textureMgr->GetTexture("Resources/Images/Audio_file_icon.png"); } + else if (fileType == FileType::Prefab) + { + textureImage = ThumbnailManager::Get().GetThumbnail(file->GetRelativePath()); + } ImGui::SetCursorPos(prevCursor); ImGui::Image(reinterpret_cast(textureImage->GetID()), ImVec2(100, 100), ImVec2(0, 1), ImVec2(1, 0)); diff --git a/Nuake/src/Resource/Prefab.cpp b/Nuake/src/Resource/Prefab.cpp index f13eed4f..f20fc7a9 100644 --- a/Nuake/src/Resource/Prefab.cpp +++ b/Nuake/src/Resource/Prefab.cpp @@ -11,6 +11,7 @@ namespace Nuake Ref prefab = CreateRef(); prefab->DisplayName = nameComponent.Name; prefab->EntityWalker(entity); + entity.GetComponent() = TransformComponent{}; prefab->Root = entity; return prefab; }