Skip to content

Commit

Permalink
Added fragment
Browse files Browse the repository at this point in the history
  • Loading branch information
denis-beqiraj committed May 3, 2024
1 parent f130d87 commit 9306eb2
Show file tree
Hide file tree
Showing 9 changed files with 46 additions and 115 deletions.
17 changes: 10 additions & 7 deletions Engine/Shaders/DeferredPipeline/fragment_d.glsl
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,6 @@ layout(std430, binding = 5) restrict buffer clusterSSBO
Cluster clusters[];
};

uniform vec3 viewPos;

struct ShadowData {
mat4 shadow;
};
Expand Down Expand Up @@ -79,9 +77,14 @@ layout(std430, binding = 3) buffer Omni
OmniData omniData[];
};

layout(bindless_sampler) uniform samplerCube irradianceMap;
layout(bindless_sampler) uniform samplerCube prefilterMap;
layout(bindless_sampler) uniform sampler2D brdfLUT;
layout(std140, binding = 3) uniform FragmentData
{
vec4 viewPos;
samplerCube irradianceMap;
samplerCube prefilterMap;
sampler2D brdfLUT;
vec2 paddingFragment;
};

const float PI = 3.14159265359;

Expand Down Expand Up @@ -149,7 +152,7 @@ float ShadowCalculation(vec3 fragPos,vec3 lightPos,int depthMapId)
float shadow = 0.0;
float bias = 0.15;
int samples = 20;
float viewDistance = length(viewPos - fragPos);
float viewDistance = length(viewPos.xyz - fragPos);
float diskRadius = (1.0 + (viewDistance / omniData[depthMapId].far_plane.r)) / 25.0;
for(int i = 0; i < samples; ++i)
{
Expand Down Expand Up @@ -213,7 +216,7 @@ void main()
float roughness = texture(gNormal, TexCoords).a;
float metallic = texture(gAlbedo, TexCoords).a;

vec3 V = normalize(viewPos - FragPos);
vec3 V = normalize(viewPos.xyz - FragPos);

vec3 F0 = vec3(0.04);
F0 = mix(F0, albedo, metallic);
Expand Down
18 changes: 11 additions & 7 deletions Engine/Shaders/ForwardPipeline/fragment.glsl
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ out vec4 FragColor;

in vec3 FragPos;
in vec2 TexCoords;
uniform vec3 viewPos;
in vec3 Normal;
flat in int drawId;
in vec4 shadowDirData[16];
Expand Down Expand Up @@ -47,6 +46,15 @@ layout(std140, binding = 1) uniform MeshData
mat4 projection;
};

layout(std140, binding = 3) uniform FragmentData
{
vec4 viewPos;
samplerCube irradianceMap;
samplerCube prefilterMap;
sampler2D brdfLUT;
vec2 paddingFragment;
};

struct OmniData {
vec4 position;
vec4 diffuse;
Expand All @@ -64,10 +72,6 @@ struct MaterialData {
vec2 padding;
};

layout(bindless_sampler) uniform samplerCube irradianceMap;
layout(bindless_sampler) uniform samplerCube prefilterMap;
layout(bindless_sampler) uniform sampler2D brdfLUT;

layout(std430, binding = 0) buffer Material
{
MaterialData materialData[];
Expand Down Expand Up @@ -178,7 +182,7 @@ float ShadowCalculation(vec3 fragPos,vec3 lightPos,int depthMapId)
float shadow = 0.0;
float bias = 0.15;
int samples = 20;
float viewDistance = length(viewPos - fragPos);
float viewDistance = length(viewPos.xyz - fragPos);
float diskRadius = (1.0 + (viewDistance / omniData[depthMapId].far_plane.r)) / 25.0;
for(int i = 0; i < samples; ++i)
{
Expand Down Expand Up @@ -240,7 +244,7 @@ void main()

vec3 N = getNormalFromMap();

vec3 V = normalize(viewPos - FragPos);
vec3 V = normalize(viewPos.xyz - FragPos);

vec3 F0 = vec3(0.04);
F0 = mix(F0, albedo, metallic);
Expand Down
11 changes: 11 additions & 0 deletions Engine/include/Handlers/MeshHandler.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,14 @@ namespace Prisma {
float padding[2];
};

struct alignas(16) UBOFragment {
glm::vec4 viewPos;
uint64_t irradiancePos;
uint64_t prefilterPos;
uint64_t lutPos;
glm::vec2 padding;
};

static const unsigned int VIEW_OFFSET = 0;
static const unsigned int PROJECTION_OFFSET = sizeof(glm::mat4);

Expand All @@ -30,6 +38,7 @@ namespace Prisma {
MeshHandler& operator=(const MeshHandler&) = delete;
void updateCamera();
void updateCluster();
void updateFragment();

static MeshHandler& getInstance();

Expand All @@ -39,7 +48,9 @@ namespace Prisma {
std::shared_ptr<UBOData> m_uboData;
std::shared_ptr<Ubo> m_ubo;
std::shared_ptr<Ubo> m_uboCluster;
std::shared_ptr<Ubo> m_uboFragment;
UBOCluster m_uboClusterData;
UBOFragment m_fragment;
Prisma::Settings m_settings;
static std::shared_ptr<MeshHandler> instance;
};
Expand Down
9 changes: 0 additions & 9 deletions Engine/include/Pipelines/PipelineDeferred.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,19 +32,10 @@ namespace Prisma {
unsigned int m_positionLocation;
unsigned int m_normalLocation;
unsigned int m_albedoLocation;
unsigned int m_viewPosLocation;
std::shared_ptr<Prisma::FBO> m_output;
std::shared_ptr<Prisma::FBO> m_fbo;
std::shared_ptr<Prisma::FBO> m_fboSSR;
std::shared_ptr<Prisma::PipelineFullScreen> m_fullscreenPipeline;
unsigned int m_irradiancePos;
unsigned int m_prefilterPos;
unsigned int m_lutPos;

unsigned int m_nearPos;
unsigned int m_farPos;
unsigned int m_gridSizePos;
unsigned int m_screenDimensionsPos;

Prisma::Settings m_settings;

Expand Down
20 changes: 0 additions & 20 deletions Engine/include/Pipelines/PipelineForward.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,26 +23,6 @@ namespace Prisma {
private:
unsigned int m_width;
unsigned int m_height;
unsigned int m_irradiancePos;
unsigned int m_prefilterPos;
unsigned int m_lutPos;
unsigned int m_viewPos;
unsigned int m_planesCSM;

unsigned int m_nearPos;
unsigned int m_farPos;
unsigned int m_gridSizePos;
unsigned int m_screenDimensionsPos;

unsigned int m_irradianceAnimatePos;
unsigned int m_prefilterAnimatePos;
unsigned int m_lutAnimatePos;
unsigned int m_viewAnimatePos;

unsigned int m_nearAnimatePos;
unsigned int m_farAnimatePos;
unsigned int m_gridSizeAnimatePos;
unsigned int m_screenDimensionsAnimatePos;

Prisma::Settings m_settings;

Expand Down
13 changes: 13 additions & 0 deletions Engine/src/Handlers/MeshHandler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@
#include "../../include/GlobalData/GlobalData.h"
#include "../../include/Helpers/SettingsLoader.h"
#include "../../include/Helpers/ClusterCalculation.h"
#include "../../include/Pipelines/PipelineDIffuseIrradiance.h"
#include "../../include/Pipelines/PipelinePrefilter.h"
#include "../../include/Pipelines/PipelineLUT.h"

std::shared_ptr<Prisma::MeshHandler> Prisma::MeshHandler::instance = nullptr;

Expand All @@ -20,6 +23,15 @@ void Prisma::MeshHandler::updateCluster()
m_uboCluster->modifyData(0, sizeof(Prisma::MeshHandler::UBOCluster), &m_uboClusterData);
}

void Prisma::MeshHandler::updateFragment()
{
m_fragment.irradiancePos= Prisma::PipelineDiffuseIrradiance::getInstance().id();
m_fragment.prefilterPos=Prisma::PipelinePrefilter::getInstance().id();
m_fragment.lutPos = Prisma::PipelineLUT::getInstance().id();
m_fragment.viewPos = glm::vec4(currentGlobalScene->camera->position(),1.0f);
m_uboFragment->modifyData(0, sizeof(Prisma::MeshHandler::UBOFragment), &m_fragment);
}

Prisma::MeshHandler& Prisma::MeshHandler::getInstance()
{
if (!instance) {
Expand All @@ -32,6 +44,7 @@ Prisma::MeshHandler::MeshHandler()
{
m_ubo = std::make_shared<Ubo>(sizeof(Prisma::MeshHandler::UBOData), 1);
m_uboCluster = std::make_shared<Ubo>(sizeof(Prisma::MeshHandler::UBOCluster), 2);
m_uboFragment = std::make_shared<Ubo>(sizeof(Prisma::MeshHandler::UBOFragment), 3);
m_uboData = std::make_shared<Prisma::MeshHandler::UBOData>();
m_settings = Prisma::SettingsLoader::instance().getSettings();
}
Expand Down
25 changes: 0 additions & 25 deletions Engine/src/Pipelines/PipelineDeferred.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,6 @@ Prisma::PipelineDeferred::PipelineDeferred(const unsigned int& width, const unsi
m_shaderD = std::make_shared<Shader>("../../../Engine/Shaders/DeferredPipeline/vertex_d.glsl", "../../../Engine/Shaders/DeferredPipeline/fragment_d.glsl");
m_ssr=std::make_shared<Prisma::PipelineSSR>();
m_shaderD->use();
m_irradiancePos = m_shaderD->getUniformPosition("irradianceMap");
m_prefilterPos = m_shaderD->getUniformPosition("prefilterMap");
m_lutPos = m_shaderD->getUniformPosition("brdfLUT");

glGenFramebuffers(1, &m_gBuffer);
glBindFramebuffer(GL_FRAMEBUFFER, m_gBuffer);
Expand Down Expand Up @@ -75,12 +72,6 @@ Prisma::PipelineDeferred::PipelineDeferred(const unsigned int& width, const unsi
m_positionLocation = m_shaderD->getUniformPosition("gPosition");
m_normalLocation = m_shaderD->getUniformPosition("gNormal");
m_albedoLocation = m_shaderD->getUniformPosition("gAlbedo");
m_viewPosLocation = m_shaderD->getUniformPosition("viewPos");

m_nearPos = m_shaderD->getUniformPosition("zNear");
m_farPos = m_shaderD->getUniformPosition("zFar");
m_gridSizePos = m_shaderD->getUniformPosition("gridSize");
m_screenDimensionsPos = m_shaderD->getUniformPosition("screenDimensions");

m_settings = Prisma::SettingsLoader::instance().getSettings();

Expand Down Expand Up @@ -120,17 +111,6 @@ void Prisma::PipelineDeferred::render(std::shared_ptr<Camera> camera)
m_shaderD->setInt64(m_albedoLocation, m_albedo);
m_shaderD->setInt64(m_normalLocation, m_normal);
m_shaderD->setInt64(m_positionLocation, m_position);
m_shaderD->setInt64(m_irradiancePos, Prisma::PipelineDiffuseIrradiance::getInstance().id());
m_shaderD->setInt64(m_prefilterPos, Prisma::PipelinePrefilter::getInstance().id());
m_shaderD->setInt64(m_lutPos, Prisma::PipelineLUT::getInstance().id());
m_shaderD->setVec3(m_viewPosLocation, camera->position());


m_shaderD->setFloat(m_nearPos, m_settings.nearPlane);
m_shaderD->setFloat(m_farPos, m_settings.farPlane);
m_shaderD->setFloat(m_nearPos, m_settings.nearPlane);
m_shaderD->setUVec3(m_gridSizePos, Prisma::ClusterCalculation::grids());
m_shaderD->setUVec2(m_screenDimensionsPos, { m_settings.width,m_settings.height });
Prisma::IBLBuilder::getInstance().renderQuad();

glBindFramebuffer(GL_READ_FRAMEBUFFER, m_gBuffer);
Expand All @@ -141,11 +121,6 @@ void Prisma::PipelineDeferred::render(std::shared_ptr<Camera> camera)
Prisma::PipelineSkybox::getInstance().render(camera);
m_fbo->unbind();

/*m_fboSSR->bind();
glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
m_ssr->update(m_fbo->texture(),m_albedo,m_normal);
m_fboSSR->unbind();*/

m_output->bind();
glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
m_fullscreenPipeline->render(m_fbo->texture());
Expand Down
47 changes: 0 additions & 47 deletions Engine/src/Pipelines/PipelineForward.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -33,36 +33,12 @@ Prisma::PipelineForward::PipelineForward(const unsigned int& width, const unsign
fboData.enableDepth = true;
fboData.internalFormat = GL_RGBA16F;
fboData.internalType = GL_FLOAT;
m_shader->use();
m_irradiancePos = m_shader->getUniformPosition("irradianceMap");
m_prefilterPos = m_shader->getUniformPosition("prefilterMap");
m_lutPos = m_shader->getUniformPosition("brdfLUT");
m_viewPos = m_shader->getUniformPosition("viewPos");
m_irradiancePos = m_shader->getUniformPosition("irradianceMap");

m_nearPos = m_shader->getUniformPosition("zNear");
m_farPos = m_shader->getUniformPosition("zFar");
m_gridSizePos = m_shader->getUniformPosition("gridSize");
m_screenDimensionsPos = m_shader->getUniformPosition("screenDimensions");

m_settings = Prisma::SettingsLoader::instance().getSettings();

m_fbo = std::make_shared<Prisma::FBO>(fboData);
m_fullscreenPipeline = std::make_shared<Prisma::PipelineFullScreen>();

m_shaderAnimate->use();

m_irradianceAnimatePos = m_shaderAnimate->getUniformPosition("irradianceMap");
m_prefilterAnimatePos = m_shaderAnimate->getUniformPosition("prefilterMap");
m_lutAnimatePos = m_shaderAnimate->getUniformPosition("brdfLUT");
m_viewAnimatePos = m_shaderAnimate->getUniformPosition("viewPos");
m_irradianceAnimatePos = m_shaderAnimate->getUniformPosition("irradianceMap");

m_nearAnimatePos = m_shaderAnimate->getUniformPosition("zNear");
m_farAnimatePos = m_shaderAnimate->getUniformPosition("zFar");
m_gridSizeAnimatePos = m_shaderAnimate->getUniformPosition("gridSize");
m_screenDimensionsAnimatePos = m_shaderAnimate->getUniformPosition("screenDimensions");

#ifndef NPHYSICS_DEBUG
drawDebugger=new DrawDebugger();
Physics::getInstance().physicsWorld()->dynamicsWorld->setDebugDrawer(drawDebugger);
Expand All @@ -83,33 +59,10 @@ void Prisma::PipelineForward::render(std::shared_ptr<Camera> camera)
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
m_shader->use();

m_shader->setInt64(m_irradiancePos, Prisma::PipelineDiffuseIrradiance::getInstance().id());
m_shader->setInt64(m_prefilterPos, Prisma::PipelinePrefilter::getInstance().id());
m_shader->setInt64(m_lutPos, Prisma::PipelineLUT::getInstance().id());
m_shader->setVec3(m_viewPos, camera->position());

m_shader->setFloat(m_nearPos, m_settings.nearPlane);
m_shader->setFloat(m_farPos, m_settings.farPlane);
m_shader->setFloat(m_nearPos, m_settings.nearPlane);
m_shader->setUVec3(m_gridSizePos, Prisma::ClusterCalculation::grids());
m_shader->setUVec2(m_screenDimensionsPos, { m_settings.width,m_settings.height });

Prisma::MeshIndirect::getInstance().renderMeshes();


m_shaderAnimate->use();

m_shaderAnimate->setInt64(m_irradianceAnimatePos, Prisma::PipelineDiffuseIrradiance::getInstance().id());
m_shaderAnimate->setInt64(m_prefilterAnimatePos, Prisma::PipelinePrefilter::getInstance().id());
m_shaderAnimate->setInt64(m_lutAnimatePos, Prisma::PipelineLUT::getInstance().id());
m_shaderAnimate->setVec3(m_viewAnimatePos, camera->position());

m_shaderAnimate->setFloat(m_nearAnimatePos, m_settings.nearPlane);
m_shaderAnimate->setFloat(m_farAnimatePos, m_settings.farPlane);
m_shaderAnimate->setFloat(m_nearAnimatePos, m_settings.nearPlane);
m_shaderAnimate->setUVec3(m_gridSizeAnimatePos, Prisma::ClusterCalculation::grids());
m_shaderAnimate->setUVec2(m_screenDimensionsAnimatePos, { m_settings.width,m_settings.height });

Prisma::MeshIndirect::getInstance().renderAnimateMeshes();

Prisma::PipelineSkybox::getInstance().render(camera);
Expand Down
1 change: 1 addition & 0 deletions Engine/src/engine.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,7 @@ bool Prisma::Engine::run()
data->timer.start();

MeshHandler::getInstance().updateCamera();
MeshHandler::getInstance().updateFragment();
AnimationHandler::getInstance().updateAnimations();
MeshIndirect::getInstance().update();
LightHandler::getInstance().update();
Expand Down

0 comments on commit 9306eb2

Please sign in to comment.