Skip to content

Commit 784caf2

Browse files
authored
Merge pull request #62 from ErfanMo77/develop
Started content browser panel.
2 parents 0a57450 + 2360929 commit 784caf2

File tree

5 files changed

+122
-32
lines changed

5 files changed

+122
-32
lines changed

Syndra-Editor/imgui.ini

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -329,7 +329,7 @@ DockSpace ID=0x3BC79352 Window=0x4647B76E Pos=0,55 Size=1920,975 Spl
329329
DockNode ID=0x00000011 Parent=0x00000010 SizeRef=370,433 Selected=0x7C32BEAA
330330
DockNode ID=0x00000012 Parent=0x00000010 SizeRef=370,443 Split=Y Selected=0xC0BA51F5
331331
DockNode ID=0x00000013 Parent=0x00000012 SizeRef=370,543 Selected=0xFEC33C09
332-
DockNode ID=0x00000014 Parent=0x00000012 SizeRef=370,430 Selected=0xC0BA51F5
332+
DockNode ID=0x00000014 Parent=0x00000012 SizeRef=370,430 Selected=0x24E47430
333333
DockNode ID=0x00000006 Parent=0x00000004 SizeRef=1132,878 Split=Y Selected=0x995B0CF8
334334
DockNode ID=0x00000009 Parent=0x00000006 SizeRef=918,52 Selected=0xEADA6660
335335
DockNode ID=0x0000000A Parent=0x00000006 SizeRef=918,824 Split=Y Selected=0x995B0CF8
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
#include "lpch.h"
2+
#include "ContentBrowser.h"
3+
4+
namespace Syndra {
5+
6+
7+
ContentBrowser::ContentBrowser()
8+
:m_Directory("assets/Scenes")
9+
{
10+
m_SceneTexture = Texture2D::Create("assets/Textures/scene.png");
11+
}
12+
13+
void ContentBrowser::OnImGuiRender()
14+
{
15+
ImGui::Begin(ICON_FA_BOOK" Content Browser");
16+
17+
if (m_Directory != std::filesystem::path("assets/Scenes"))
18+
{
19+
if (ImGui::Button("<-"))
20+
{
21+
m_Directory = m_Directory.parent_path();
22+
}
23+
}
24+
25+
for (auto& directoryEntry : std::filesystem::directory_iterator(m_Directory))
26+
{
27+
28+
const auto& path = directoryEntry.path();
29+
auto relativePath = std::filesystem::relative(path, "assets/Scenes");
30+
std::string filenameString = relativePath.filename().string();
31+
if (directoryEntry.is_directory())
32+
{
33+
if (ImGui::Button(filenameString.c_str()))
34+
{
35+
m_Directory /= path.filename();
36+
}
37+
}
38+
else
39+
{
40+
ImGui::Text(filenameString.c_str());
41+
if (ImGui::ImageButton(reinterpret_cast<void*>(m_SceneTexture->GetRendererID()), { 40,40 }))
42+
{
43+
44+
}
45+
ImGui::SameLine();
46+
}
47+
48+
}
49+
50+
ImGui::End();
51+
}
52+
53+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
#pragma once
2+
#include "../UI.h"
3+
4+
#include <filesystem>
5+
6+
namespace Syndra {
7+
8+
class ContentBrowser
9+
{
10+
11+
public:
12+
ContentBrowser();
13+
14+
void OnImGuiRender();
15+
16+
17+
private:
18+
Ref<Texture2D> m_SceneTexture;
19+
std::filesystem::path m_Directory;
20+
};
21+
22+
23+
}

Syndra/src/Engine/Renderer/SceneRenderer.cpp

Lines changed: 42 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ namespace Syndra {
4545
//------------------------------------------------Deferred Geometry Render Pass----------------------------------------//
4646
FramebufferSpecification GeoFbSpec;
4747
GeoFbSpec.Attachments =
48-
{
48+
{
4949
FramebufferTextureFormat::RGBA16F, // Position texture attachment
5050
FramebufferTextureFormat::RGBA16F, // Normal texture attachment
5151
FramebufferTextureFormat::RGBA16F, // Albedo-specular texture attachment
@@ -73,14 +73,14 @@ namespace Syndra {
7373
RenderPassSpecification finalPassSpec;
7474
finalPassSpec.TargetFrameBuffer = FrameBuffer::Create(postProcFB);
7575
s_Data.lightingPass = RenderPass::Create(finalPassSpec);
76-
76+
7777
//-----------------------------------------------Shadow Pass---------------------------------------------//
7878
FramebufferSpecification shadowSpec;
7979
shadowSpec.Attachments = { FramebufferTextureFormat::DEPTH32 };
8080
shadowSpec.Width = 4096;
8181
shadowSpec.Height = 4096;
8282
shadowSpec.Samples = 1;
83-
shadowSpec.ClearColor = {0.0f, 0.0f, 0.0f, 1.0f};
83+
shadowSpec.ClearColor = { 0.0f, 0.0f, 0.0f, 1.0f };
8484

8585
RenderPassSpecification shadowPassSpec;
8686
shadowPassSpec.TargetFrameBuffer = FrameBuffer::Create(shadowSpec);
@@ -97,9 +97,9 @@ namespace Syndra {
9797
RenderPassSpecification aaPassSpec;
9898
aaPassSpec.TargetFrameBuffer = FrameBuffer::Create(aaFB);
9999
s_Data.aaPass = RenderPass::Create(aaPassSpec);
100-
100+
101101
//------------------------------------------------Shaders-----------------------------------------------//
102-
102+
103103
//s_Data.fxaa = Shader::Create("assets/shaders/FXAA.glsl");
104104

105105
if (!s_Data.main) {
@@ -152,7 +152,7 @@ namespace Syndra {
152152
s_Data.lightFar = 200.0f;
153153
//Light uniform Buffer layout: -- point lights -- spotlights -- directional light--Binding point 2
154154
s_Data.lightManager = CreateRef<LightManager>(2);
155-
155+
156156
GeneratePoissonDisk(s_Data.distributionSampler0, 64);
157157
GeneratePoissonDisk(s_Data.distributionSampler1, 64);
158158

@@ -188,7 +188,7 @@ namespace Syndra {
188188
Renderer::BeginScene(camera);
189189
}
190190

191-
void SceneRenderer::UpdateLights()
191+
void SceneRenderer::UpdateLights()
192192
{
193193
auto viewLights = s_Data.scene->m_Registry.view<TransformComponent, LightComponent>();
194194
//point light index
@@ -248,7 +248,7 @@ namespace Syndra {
248248
{
249249
auto& tc = view.get<TransformComponent>(ent);
250250
auto& mc = view.get<MeshComponent>(ent);
251-
if (!mc.path.empty())
251+
if (!mc.path.empty())
252252
{
253253
s_Data.depth->SetMat4("transform.u_trans", tc.GetTransform());
254254
SceneRenderer::RenderEntity(ent, mc, s_Data.depth);
@@ -267,7 +267,7 @@ namespace Syndra {
267267
{
268268
auto& tc = view.get<TransformComponent>(ent);
269269
auto& mc = view.get<MeshComponent>(ent);
270-
if (!mc.path.empty())
270+
if (!mc.path.empty())
271271
{
272272
if (s_Data.scene->m_Registry.has<MaterialComponent>(ent)) {
273273
auto& mat = s_Data.scene->m_Registry.get<MaterialComponent>(ent);
@@ -296,7 +296,7 @@ namespace Syndra {
296296
s_Data.geoPass->UnbindTargetFrameBuffer();
297297
}
298298

299-
void SceneRenderer::RenderEntity(const entt::entity& entity, MeshComponent& mc,const Ref<Shader>& shader)
299+
void SceneRenderer::RenderEntity(const entt::entity& entity, MeshComponent& mc, const Ref<Shader>& shader)
300300
{
301301
//RenderCommand::SetState(RenderState::CULL, false);
302302
Renderer::Submit(shader, mc.model);
@@ -324,7 +324,7 @@ namespace Syndra {
324324
Texture1D::BindTexture(s_Data.distributionSampler1->GetRendererID(), 5);
325325

326326
//Push constant variables
327-
s_Data.deferredLighting->SetFloat("pc.size", s_Data.lightSize*0.0001f);
327+
s_Data.deferredLighting->SetFloat("pc.size", s_Data.lightSize * 0.0001f);
328328
s_Data.deferredLighting->SetInt("pc.numPCFSamples", s_Data.numPCF);
329329
s_Data.deferredLighting->SetInt("pc.numBlockerSearchSamples", s_Data.numBlocker);
330330
s_Data.deferredLighting->SetInt("pc.softShadow", (int)s_Data.softShadow);
@@ -362,15 +362,17 @@ namespace Syndra {
362362

363363
s_Data.lightingPass->UnbindTargetFrameBuffer();
364364
//-------------------------------------------------ANTI ALIASING PASS------------------------------------------------------------------//
365-
366-
s_Data.aaPass->BindTargetFrameBuffer();
367-
s_Data.fxaa->Bind();
368-
s_Data.fxaa->SetFloat("pc.width", (float)s_Data.aaPass->GetSpecification().TargetFrameBuffer->GetSpecification().Width);
369-
s_Data.fxaa->SetFloat("pc.height", (float)s_Data.aaPass->GetSpecification().TargetFrameBuffer->GetSpecification().Height);
370-
Texture2D::BindTexture(s_Data.lightingPass->GetFrameBufferTextureID(0), 0);
371-
Renderer::Submit(s_Data.fxaa, s_Data.screenVao);
372-
s_Data.fxaa->Unbind();
373-
s_Data.aaPass->UnbindTargetFrameBuffer();
365+
366+
if (s_Data.useFxaa) {
367+
s_Data.aaPass->BindTargetFrameBuffer();
368+
s_Data.fxaa->Bind();
369+
s_Data.fxaa->SetFloat("pc.width", (float)s_Data.aaPass->GetSpecification().TargetFrameBuffer->GetSpecification().Width);
370+
s_Data.fxaa->SetFloat("pc.height", (float)s_Data.aaPass->GetSpecification().TargetFrameBuffer->GetSpecification().Height);
371+
Texture2D::BindTexture(s_Data.lightingPass->GetFrameBufferTextureID(0), 0);
372+
Renderer::Submit(s_Data.fxaa, s_Data.screenVao);
373+
s_Data.fxaa->Unbind();
374+
s_Data.aaPass->UnbindTargetFrameBuffer();
375+
}
374376

375377
Renderer::EndScene();
376378
}
@@ -437,12 +439,16 @@ namespace Syndra {
437439
ImGui::Image(reinterpret_cast<void*>(s_Data.geoPass->GetFrameBufferTextureID(3)), frameSize, ImVec2{ 0, 1 }, ImVec2{ 1, 0 });
438440
ImGui::End();
439441
}
440-
441-
ImGui::NewLine();
442+
ImGui::Separator();
442443
//V-Sync
443444
static bool vSync = true;
444445
ImGui::Checkbox("V-Sync", &vSync);
445446
Application::Get().GetWindow().SetVSync(vSync);
447+
ImGui::Separator();
448+
449+
ImGui::Text("Anti Aliasing");
450+
ImGui::Checkbox("FXAA", &s_Data.useFxaa);
451+
ImGui::Separator();
446452

447453
//Exposure
448454
ImGui::DragFloat("exposure", &s_Data.exposure, 0.01f, -2, 4);
@@ -453,10 +459,10 @@ namespace Syndra {
453459

454460
//shadow
455461
ImGui::Checkbox("Soft Shadow", &s_Data.softShadow);
456-
ImGui::DragFloat("PCF samples", &s_Data.numPCF,1,1,64);
457-
ImGui::DragFloat("blocker samples", &s_Data.numBlocker,1,1,64);
462+
ImGui::DragFloat("PCF samples", &s_Data.numPCF, 1, 1, 64);
463+
ImGui::DragFloat("blocker samples", &s_Data.numBlocker, 1, 1, 64);
458464
ImGui::DragFloat("Size", &s_Data.lightSize, 0.01f, 0, 100);
459-
465+
460466
ImGui::PushMultiItemsWidths(2, ImGui::CalcItemWidth());
461467
if (ImGui::DragFloat("near", &s_Data.lightNear, 0.01f, 0.1f, 100.0f)) {
462468
s_Data.lightProj = glm::perspective(45.0f, 1.0f, s_Data.lightNear, s_Data.lightFar);
@@ -469,7 +475,7 @@ namespace Syndra {
469475
ImGui::PopItemWidth();
470476
ImGui::NewLine();
471477
ImGui::Separator();
472-
std::string label = "shader";
478+
std::string label = "shader";
473479
static Ref<Shader> selectedShader;
474480
if (selectedShader) {
475481
label = selectedShader->GetName();
@@ -478,7 +484,7 @@ namespace Syndra {
478484
static int index = 0;
479485
if (ImGui::BeginCombo("##Shaders", label.c_str()))
480486
{
481-
for(auto& shader : s_Data.shaders.GetShaders())
487+
for (auto& shader : s_Data.shaders.GetShaders())
482488
{
483489
//const bool is_selected = (item_current_idx == n);
484490
if (ImGui::Selectable(shader.first.c_str(), true)) {
@@ -503,12 +509,12 @@ namespace Syndra {
503509
//Add texture as sRGB color space if it is binded to 0 (diffuse texture binding)
504510
s_Data.environment = CreateRef<Environment>(Texture2D::CreateHDR(*path, false, true));
505511
s_Data.scene->m_EnvironmentPath = *path;
506-
}
512+
}
507513
}
508514
if (s_Data.environment) {
509515
ImGui::Image(reinterpret_cast<void*>(s_Data.environment->GetBackgroundTextureID()), { 300, 150 }, ImVec2{ 0, 1 }, ImVec2{ 1, 0 });
510516
}
511-
if (ImGui::DragFloat("Intensity", &s_Data.intensity, 0.01f, 1,20)) {
517+
if (ImGui::DragFloat("Intensity", &s_Data.intensity, 0.01f, 1, 20)) {
512518
if (s_Data.environment) {
513519
s_Data.environment->SetIntensity(s_Data.intensity);
514520
}
@@ -530,7 +536,13 @@ namespace Syndra {
530536

531537
uint32_t SceneRenderer::GetTextureID(int index)
532538
{
533-
return s_Data.aaPass->GetSpecification().TargetFrameBuffer->GetColorAttachmentRendererID(index);
539+
if (s_Data.useFxaa) {
540+
return s_Data.aaPass->GetSpecification().TargetFrameBuffer->GetColorAttachmentRendererID(index);
541+
}
542+
else
543+
{
544+
return s_Data.lightingPass->GetSpecification().TargetFrameBuffer->GetColorAttachmentRendererID(index);
545+
}
534546
}
535547

536548
Syndra::FramebufferSpecification SceneRenderer::GetMainFrameSpec()

Syndra/src/Engine/Renderer/SceneRenderer.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
#include "Engine/Renderer/Environment.h"
88
#include "Engine/Renderer/LightManager.h"
99
#include "Engine/Renderer/RenderPass.h"
10+
1011
#include "entt.hpp"
1112

1213
#include <glm/gtc/matrix_transform.hpp>
@@ -73,6 +74,8 @@ namespace Syndra {
7374
//Environment
7475
float intensity;
7576
Ref<Environment> environment;
77+
//Anti ALiasing
78+
bool useFxaa = true;
7679
//Light
7780
Ref<LightManager> lightManager;
7881
float exposure;
@@ -101,5 +104,4 @@ namespace Syndra {
101104
};
102105

103106
};
104-
105107
}

0 commit comments

Comments
 (0)