Water now rendered in forward rendering
This commit is contained in:
Executable
BIN
Binary file not shown.
|
After Width: | Height: | Size: 11 MiB |
+25
-12
@@ -134,14 +134,26 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Halfpipe background test model.
|
//Halfpipe background test model.
|
||||||
|
// {
|
||||||
|
// auto t_halfPipe = m_World->CreateEntity();
|
||||||
|
// auto transform = m_World->AddComponent<Components::Transform>(t_halfPipe);
|
||||||
|
// transform->Position = glm::vec3(0.f, 0.f, -15.f);
|
||||||
|
// transform->Scale = glm::vec3(15.f);
|
||||||
|
// auto model = m_World->AddComponent<Components::Model>(t_halfPipe);
|
||||||
|
// model->ModelFile = "Models/Test/halfpipe/Halfpipe.obj";
|
||||||
|
// model->Color = glm::vec4(1.f, 1.f, 1.f, 0.3f);
|
||||||
|
// m_World->CommitEntity(t_halfPipe);
|
||||||
|
// }
|
||||||
|
|
||||||
|
//Background
|
||||||
{
|
{
|
||||||
auto t_halfPipe = m_World->CreateEntity();
|
auto background = m_World->CreateEntity();
|
||||||
auto transform = m_World->AddComponent<Components::Transform>(t_halfPipe);
|
auto transform = m_World->AddComponent<Components::Transform>(background);
|
||||||
transform->Position = glm::vec3(0.f, 0.f, -15.f);
|
transform->Position = glm::vec3(0.f, 0.f, -15.f);
|
||||||
transform->Scale = glm::vec3(15.f);
|
transform->Scale = glm::vec3(2681.f/100.f, 1080.f/100.f, 1.f);
|
||||||
auto model = m_World->AddComponent<Components::Model>(t_halfPipe);
|
auto sprite = m_World->AddComponent<Components::Sprite>(background);
|
||||||
model->ModelFile = "Models/Test/halfpipe/Halfpipe.obj";
|
sprite->SpriteFile = "Textures/Background.png";
|
||||||
m_World->CommitEntity(t_halfPipe);
|
m_World->CommitEntity(background);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Water test
|
//Water test
|
||||||
@@ -159,7 +171,7 @@ public:
|
|||||||
{
|
{
|
||||||
auto topWall = m_World->CreateEntity();
|
auto topWall = m_World->CreateEntity();
|
||||||
std::shared_ptr<Components::Transform> transform = m_World->AddComponent<Components::Transform>(topWall);
|
std::shared_ptr<Components::Transform> transform = m_World->AddComponent<Components::Transform>(topWall);
|
||||||
transform->Position = glm::vec3(0.f, -3.f, -10.f);
|
transform->Position = glm::vec3(0.f, -3.f, -9.9f);
|
||||||
transform->Scale = glm::vec3(3.f, 0.5f, 1.f);
|
transform->Scale = glm::vec3(3.f, 0.5f, 1.f);
|
||||||
std::shared_ptr<Components::Sprite> sprite = m_World->AddComponent<Components::Sprite>(topWall);
|
std::shared_ptr<Components::Sprite> sprite = m_World->AddComponent<Components::Sprite>(topWall);
|
||||||
sprite->SpriteFile = "Textures/Core/ErrorTexture.png";
|
sprite->SpriteFile = "Textures/Core/ErrorTexture.png";
|
||||||
@@ -172,7 +184,7 @@ public:
|
|||||||
{
|
{
|
||||||
auto topWall = m_World->CreateEntity();
|
auto topWall = m_World->CreateEntity();
|
||||||
std::shared_ptr<Components::Transform> transform = m_World->AddComponent<Components::Transform>(topWall);
|
std::shared_ptr<Components::Transform> transform = m_World->AddComponent<Components::Transform>(topWall);
|
||||||
transform->Position = glm::vec3(1.5f, -1.5f, -10.f);
|
transform->Position = glm::vec3(1.5f, -1.5f, -9.9f);
|
||||||
transform->Scale = glm::vec3(0.5f, 3.f, 1.f);
|
transform->Scale = glm::vec3(0.5f, 3.f, 1.f);
|
||||||
std::shared_ptr<Components::Sprite> sprite = m_World->AddComponent<Components::Sprite>(topWall);
|
std::shared_ptr<Components::Sprite> sprite = m_World->AddComponent<Components::Sprite>(topWall);
|
||||||
sprite->SpriteFile = "Textures/Core/ErrorTexture.png";
|
sprite->SpriteFile = "Textures/Core/ErrorTexture.png";
|
||||||
@@ -185,7 +197,7 @@ public:
|
|||||||
{
|
{
|
||||||
auto topWall = m_World->CreateEntity();
|
auto topWall = m_World->CreateEntity();
|
||||||
std::shared_ptr<Components::Transform> transform = m_World->AddComponent<Components::Transform>(topWall);
|
std::shared_ptr<Components::Transform> transform = m_World->AddComponent<Components::Transform>(topWall);
|
||||||
transform->Position = glm::vec3(-1.5f, -1.5f, -10.f);
|
transform->Position = glm::vec3(-1.5f, -1.5f, -9.9f);
|
||||||
transform->Scale = glm::vec3(0.5f, 3.0f, 1.f);
|
transform->Scale = glm::vec3(0.5f, 3.0f, 1.f);
|
||||||
std::shared_ptr<Components::Sprite> sprite = m_World->AddComponent<Components::Sprite>(topWall);
|
std::shared_ptr<Components::Sprite> sprite = m_World->AddComponent<Components::Sprite>(topWall);
|
||||||
sprite->SpriteFile = "Textures/Core/ErrorTexture.png";
|
sprite->SpriteFile = "Textures/Core/ErrorTexture.png";
|
||||||
@@ -366,7 +378,7 @@ public:
|
|||||||
Components::Transform absoluteTransform = m_TransformSystem->AbsoluteTransform(entity);
|
Components::Transform absoluteTransform = m_TransformSystem->AbsoluteTransform(entity);
|
||||||
glm::mat4 modelMatrix = glm::translate(absoluteTransform.Position)
|
glm::mat4 modelMatrix = glm::translate(absoluteTransform.Position)
|
||||||
* glm::scale(absoluteTransform.Scale);
|
* glm::scale(absoluteTransform.Scale);
|
||||||
EnqueueWaterParticles(absoluteTransform.Position, glm::vec4(1.f, 1.f, 1.f, 1.f), modelMatrix);
|
EnqueueWaterParticles(absoluteTransform.Position, glm::vec4(1.f, 1.f, 1.f, 1.f), modelMatrix, absoluteTransform.Position.z);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -451,14 +463,15 @@ public:
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void EnqueueWaterParticles(glm::vec3 position, glm::vec4 color, glm::mat4 modelMatrix)
|
void EnqueueWaterParticles(glm::vec3 position, glm::vec4 color, glm::mat4 modelMatrix, float depth)
|
||||||
{
|
{
|
||||||
WaterParticleJob job;
|
WaterParticleJob job;
|
||||||
job.Position = position;
|
job.Position = position;
|
||||||
job.Color = color;
|
job.Color = color;
|
||||||
job.ModelMatrix = modelMatrix;
|
job.ModelMatrix = modelMatrix;
|
||||||
|
job.Depth = depth;
|
||||||
|
|
||||||
m_RendererQueue.Water.Add(job);
|
m_RendererQueue.Forward.Add(job);
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|||||||
@@ -172,14 +172,12 @@ struct RenderQueueCollection
|
|||||||
RenderQueue Deferred;
|
RenderQueue Deferred;
|
||||||
RenderQueue Forward;
|
RenderQueue Forward;
|
||||||
RenderQueue Lights;
|
RenderQueue Lights;
|
||||||
RenderQueue Water;
|
|
||||||
|
|
||||||
void Clear()
|
void Clear()
|
||||||
{
|
{
|
||||||
Deferred.Clear();
|
Deferred.Clear();
|
||||||
Forward.Clear();
|
Forward.Clear();
|
||||||
Lights.Clear();
|
Lights.Clear();
|
||||||
Water.Clear();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Sort()
|
void Sort()
|
||||||
@@ -187,8 +185,6 @@ struct RenderQueueCollection
|
|||||||
Deferred.Sort();
|
Deferred.Sort();
|
||||||
Forward.Sort();
|
Forward.Sort();
|
||||||
Lights.Sort();
|
Lights.Sort();
|
||||||
//TODO: Is water sort needed?
|
|
||||||
Water.Sort();
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -112,7 +112,7 @@ private:
|
|||||||
|
|
||||||
static bool DepthSort(const std::shared_ptr<RenderJob> &i, const std::shared_ptr<RenderJob> &j) { return (i->Depth < j->Depth); }
|
static bool DepthSort(const std::shared_ptr<RenderJob> &i, const std::shared_ptr<RenderJob> &j) { return (i->Depth < j->Depth); }
|
||||||
|
|
||||||
void DrawDeferred(RenderQueue &objects, RenderQueue &lights, RenderQueue &waterParticles);
|
void DrawDeferred(RenderQueue &objects, RenderQueue &lights);
|
||||||
void DrawForward(RenderQueue &objects, RenderQueue &lights);
|
void DrawForward(RenderQueue &objects, RenderQueue &lights);
|
||||||
void DrawScene(RenderQueue &objects, ShaderProgram &program);
|
void DrawScene(RenderQueue &objects, ShaderProgram &program);
|
||||||
void DrawLightSpheres(RenderQueue &lights);
|
void DrawLightSpheres(RenderQueue &lights);
|
||||||
|
|||||||
+41
-35
@@ -243,6 +243,7 @@ void dd::Renderer::CreateBuffers()
|
|||||||
//water Blur texture2
|
//water Blur texture2
|
||||||
glGenTextures(1, &t_m_BWater2);
|
glGenTextures(1, &t_m_BWater2);
|
||||||
glBindTexture(GL_TEXTURE_2D, t_m_BWater2);
|
glBindTexture(GL_TEXTURE_2D, t_m_BWater2);
|
||||||
|
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, m_rbDepthBuffer);
|
||||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, m_Resolution.Width, m_Resolution.Height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
|
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, m_Resolution.Width, m_Resolution.Height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
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_MAG_FILTER, GL_LINEAR);
|
||||||
@@ -284,13 +285,12 @@ void dd::Renderer::CreateBuffers()
|
|||||||
|
|
||||||
void dd::Renderer::Draw(RenderQueueCollection& rq)
|
void dd::Renderer::Draw(RenderQueueCollection& rq)
|
||||||
{
|
{
|
||||||
|
|
||||||
DrawDeferred(rq.Deferred, rq.Lights, rq.Water);
|
|
||||||
rq.Forward.Jobs.sort(dd::Renderer::DepthSort);
|
rq.Forward.Jobs.sort(dd::Renderer::DepthSort);
|
||||||
|
DrawDeferred(rq.Deferred, rq.Lights);
|
||||||
DrawForward(rq.Forward, rq.Lights);
|
DrawForward(rq.Forward, rq.Lights);
|
||||||
|
|
||||||
// Finally: Draw the deferred+forward combined texture to the screen
|
// Finally: Draw the deferred+forward combined texture to the screen
|
||||||
glCullFace(GL_BACK);
|
glDisable(GL_CULL_FACE);
|
||||||
glDepthMask(GL_FALSE);
|
glDepthMask(GL_FALSE);
|
||||||
glDisable(GL_DEPTH_TEST);
|
glDisable(GL_DEPTH_TEST);
|
||||||
glDisable(GL_BLEND);
|
glDisable(GL_BLEND);
|
||||||
@@ -308,7 +308,7 @@ void dd::Renderer::Draw(RenderQueueCollection& rq)
|
|||||||
DebugKeys();
|
DebugKeys();
|
||||||
}
|
}
|
||||||
|
|
||||||
void dd::Renderer::DrawDeferred(RenderQueue &objects, RenderQueue &lights, RenderQueue &waterParticles)
|
void dd::Renderer::DrawDeferred(RenderQueue &objects, RenderQueue &lights)
|
||||||
{
|
{
|
||||||
// Pass #1: Fill G-buffers
|
// Pass #1: Fill G-buffers
|
||||||
glDisable(GL_CULL_FACE);
|
glDisable(GL_CULL_FACE);
|
||||||
@@ -323,18 +323,6 @@ void dd::Renderer::DrawDeferred(RenderQueue &objects, RenderQueue &lights, Rende
|
|||||||
m_spDeferred1->Bind();
|
m_spDeferred1->Bind();
|
||||||
DrawScene(objects, *m_spDeferred1);
|
DrawScene(objects, *m_spDeferred1);
|
||||||
|
|
||||||
//WaterPass
|
|
||||||
glDisable(GL_CULL_FACE);
|
|
||||||
glCullFace(GL_BACK);
|
|
||||||
glDepthMask(GL_FALSE);
|
|
||||||
glDisable(GL_DEPTH_TEST);
|
|
||||||
glEnable(GL_BLEND);
|
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, t_m_fbWater);
|
|
||||||
glClearColor(0, 0, 0, 1);
|
|
||||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
|
||||||
t_m_spWater->Bind();
|
|
||||||
DrawWater(waterParticles);
|
|
||||||
|
|
||||||
// Pass #2: Lighting
|
// Pass #2: Lighting
|
||||||
glEnable(GL_CULL_FACE);
|
glEnable(GL_CULL_FACE);
|
||||||
glCullFace(GL_FRONT);
|
glCullFace(GL_FRONT);
|
||||||
@@ -344,7 +332,7 @@ void dd::Renderer::DrawDeferred(RenderQueue &objects, RenderQueue &lights, Rende
|
|||||||
glBlendFunc(GL_ONE, GL_ONE);
|
glBlendFunc(GL_ONE, GL_ONE);
|
||||||
glDepthMask(GL_FALSE);
|
glDepthMask(GL_FALSE);
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, m_fbDeferred2);
|
glBindFramebuffer(GL_FRAMEBUFFER, m_fbDeferred2);
|
||||||
glClearColor(0, 0, 0, 1);
|
glClearColor(0, 0, 0, 0);
|
||||||
glClear(GL_COLOR_BUFFER_BIT);
|
glClear(GL_COLOR_BUFFER_BIT);
|
||||||
m_spDeferred2->Bind();
|
m_spDeferred2->Bind();
|
||||||
DrawLightSpheres(lights);
|
DrawLightSpheres(lights);
|
||||||
@@ -353,7 +341,7 @@ void dd::Renderer::DrawDeferred(RenderQueue &objects, RenderQueue &lights, Rende
|
|||||||
glCullFace(GL_BACK);
|
glCullFace(GL_BACK);
|
||||||
glDisable(GL_BLEND);
|
glDisable(GL_BLEND);
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, m_fbDeferred3);
|
glBindFramebuffer(GL_FRAMEBUFFER, m_fbDeferred3);
|
||||||
glClearColor(0, 0, 0, 1);
|
glClearColor(0, 0, 0, 0);
|
||||||
glClear(GL_COLOR_BUFFER_BIT);
|
glClear(GL_COLOR_BUFFER_BIT);
|
||||||
m_spDeferred3->Bind();
|
m_spDeferred3->Bind();
|
||||||
glUniform3fv(glGetUniformLocation(*m_spDeferred3, "La"), 1, glm::value_ptr(glm::vec3(0.5f)));
|
glUniform3fv(glGetUniformLocation(*m_spDeferred3, "La"), 1, glm::value_ptr(glm::vec3(0.5f)));
|
||||||
@@ -361,15 +349,12 @@ void dd::Renderer::DrawDeferred(RenderQueue &objects, RenderQueue &lights, Rende
|
|||||||
glBindTexture(GL_TEXTURE_2D, m_GDiffuse);
|
glBindTexture(GL_TEXTURE_2D, m_GDiffuse);
|
||||||
glActiveTexture(GL_TEXTURE1);
|
glActiveTexture(GL_TEXTURE1);
|
||||||
glBindTexture(GL_TEXTURE_2D, m_tLighting);
|
glBindTexture(GL_TEXTURE_2D, m_tLighting);
|
||||||
glActiveTexture(GL_TEXTURE2);
|
|
||||||
glBindTexture(GL_TEXTURE_2D, t_m_BWater2);
|
|
||||||
glBindVertexArray(m_ScreenQuad);
|
glBindVertexArray(m_ScreenQuad);
|
||||||
glDrawArrays(GL_TRIANGLES, 0, 6);
|
glDrawArrays(GL_TRIANGLES, 0, 6);
|
||||||
}
|
}
|
||||||
|
|
||||||
void dd::Renderer::DrawForward(RenderQueue &objects, RenderQueue &lights)
|
void dd::Renderer::DrawForward(RenderQueue &objects, RenderQueue &lights)
|
||||||
{
|
{
|
||||||
|
|
||||||
// Forward-render semi-transparent objects on top of the current framebuffer
|
// Forward-render semi-transparent objects on top of the current framebuffer
|
||||||
glDisable(GL_CULL_FACE);
|
glDisable(GL_CULL_FACE);
|
||||||
glCullFace(GL_BACK);
|
glCullFace(GL_BACK);
|
||||||
@@ -385,6 +370,19 @@ void dd::Renderer::DrawForward(RenderQueue &objects, RenderQueue &lights)
|
|||||||
|
|
||||||
m_spForward->Bind();
|
m_spForward->Bind();
|
||||||
DrawScene(objects, *m_spForward);
|
DrawScene(objects, *m_spForward);
|
||||||
|
|
||||||
|
//WaterPass
|
||||||
|
glDisable(GL_CULL_FACE);
|
||||||
|
glCullFace(GL_BACK);
|
||||||
|
glDepthMask(GL_TRUE);
|
||||||
|
glEnable(GL_DEPTH_TEST);
|
||||||
|
glEnable(GL_BLEND);
|
||||||
|
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||||
|
glBindFramebuffer(GL_FRAMEBUFFER, t_m_fbWater);
|
||||||
|
glClearColor(0, 0, 0, 0);
|
||||||
|
glClear(GL_COLOR_BUFFER_BIT);
|
||||||
|
t_m_spWater->Bind();
|
||||||
|
DrawWater(objects);
|
||||||
}
|
}
|
||||||
|
|
||||||
void dd::Renderer::DrawScene(RenderQueue &objects, ShaderProgram &program)
|
void dd::Renderer::DrawScene(RenderQueue &objects, ShaderProgram &program)
|
||||||
@@ -400,6 +398,7 @@ void dd::Renderer::DrawScene(RenderQueue &objects, ShaderProgram &program)
|
|||||||
if (modelJob) {
|
if (modelJob) {
|
||||||
glm::mat4 modelMatrix = modelJob->ModelMatrix;
|
glm::mat4 modelMatrix = modelJob->ModelMatrix;
|
||||||
MVP = PV * modelMatrix;
|
MVP = PV * modelMatrix;
|
||||||
|
glUniform4fv(glGetUniformLocation(shaderProgramHandle, "Color"), 1, glm::value_ptr(modelJob->Color));
|
||||||
glUniformMatrix4fv(glGetUniformLocation(shaderProgramHandle, "MVP"), 1, GL_FALSE, glm::value_ptr(MVP));
|
glUniformMatrix4fv(glGetUniformLocation(shaderProgramHandle, "MVP"), 1, GL_FALSE, glm::value_ptr(MVP));
|
||||||
glUniformMatrix4fv(glGetUniformLocation(shaderProgramHandle, "M"), 1, GL_FALSE, glm::value_ptr(modelMatrix));
|
glUniformMatrix4fv(glGetUniformLocation(shaderProgramHandle, "M"), 1, GL_FALSE, glm::value_ptr(modelMatrix));
|
||||||
glUniformMatrix4fv(glGetUniformLocation(shaderProgramHandle, "V"), 1, GL_FALSE, glm::value_ptr(viewMatrix));
|
glUniformMatrix4fv(glGetUniformLocation(shaderProgramHandle, "V"), 1, GL_FALSE, glm::value_ptr(viewMatrix));
|
||||||
@@ -442,6 +441,7 @@ void dd::Renderer::DrawScene(RenderQueue &objects, ShaderProgram &program)
|
|||||||
glUniformMatrix4fv(glGetUniformLocation(shaderProgramHandle, "MVP"), 1, GL_FALSE, glm::value_ptr(MVP));
|
glUniformMatrix4fv(glGetUniformLocation(shaderProgramHandle, "MVP"), 1, GL_FALSE, glm::value_ptr(MVP));
|
||||||
glUniformMatrix4fv(glGetUniformLocation(shaderProgramHandle, "M"), 1, GL_FALSE, glm::value_ptr(modelMatrix));
|
glUniformMatrix4fv(glGetUniformLocation(shaderProgramHandle, "M"), 1, GL_FALSE, glm::value_ptr(modelMatrix));
|
||||||
glUniformMatrix4fv(glGetUniformLocation(shaderProgramHandle, "V"), 1, GL_FALSE, glm::value_ptr(viewMatrix));
|
glUniformMatrix4fv(glGetUniformLocation(shaderProgramHandle, "V"), 1, GL_FALSE, glm::value_ptr(viewMatrix));
|
||||||
|
glUniform4fv(glGetUniformLocation(shaderProgramHandle, "Color"), 1, glm::value_ptr(modelJob->Color));
|
||||||
|
|
||||||
glActiveTexture(GL_TEXTURE0);
|
glActiveTexture(GL_TEXTURE0);
|
||||||
glBindTexture(GL_TEXTURE_2D, spriteJob->DiffuseTexture);
|
glBindTexture(GL_TEXTURE_2D, spriteJob->DiffuseTexture);
|
||||||
@@ -496,7 +496,7 @@ void dd::Renderer::DrawLightSpheres(RenderQueue &lights)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void dd::Renderer::DrawWater(RenderQueue &waterParticles)
|
void dd::Renderer::DrawWater(RenderQueue &rq)
|
||||||
{
|
{
|
||||||
GLuint shaderProgramHandle = *t_m_spWater;
|
GLuint shaderProgramHandle = *t_m_spWater;
|
||||||
|
|
||||||
@@ -504,7 +504,7 @@ void dd::Renderer::DrawWater(RenderQueue &waterParticles)
|
|||||||
glm::mat4 viewMatrix = m_Camera->ViewMatrix();
|
glm::mat4 viewMatrix = m_Camera->ViewMatrix();
|
||||||
glm::mat4 PV = projectionMatrix * viewMatrix;
|
glm::mat4 PV = projectionMatrix * viewMatrix;
|
||||||
glm::mat4 MVP;
|
glm::mat4 MVP;
|
||||||
for ( auto &job : waterParticles ) {
|
for ( auto &job : rq ) {
|
||||||
auto waterJob = std::dynamic_pointer_cast<WaterParticleJob>(job);
|
auto waterJob = std::dynamic_pointer_cast<WaterParticleJob>(job);
|
||||||
if (waterJob) {
|
if (waterJob) {
|
||||||
glm::mat4 modelMatrix = waterJob->ModelMatrix;
|
glm::mat4 modelMatrix = waterJob->ModelMatrix;
|
||||||
@@ -524,18 +524,23 @@ void dd::Renderer::DrawWater(RenderQueue &waterParticles)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//blur1
|
//blur1
|
||||||
shaderProgramHandle = *t_m_spWater2;
|
shaderProgramHandle = *t_m_spWater2;
|
||||||
glCullFace(GL_BACK);
|
glDisable(GL_CULL_FACE);
|
||||||
glDisable(GL_BLEND);
|
glDepthMask(GL_FALSE);
|
||||||
|
glEnable(GL_DEPTH_TEST);
|
||||||
|
glEnable(GL_BLEND);
|
||||||
|
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, t_m_fbWaterBlur);
|
glBindFramebuffer(GL_FRAMEBUFFER, t_m_fbWaterBlur);
|
||||||
glClearColor(0, 0, 0, 1);
|
glClearColor(0, 0, 0, 0);
|
||||||
glClear(GL_COLOR_BUFFER_BIT);
|
glClear(GL_COLOR_BUFFER_BIT);
|
||||||
t_m_spWater2->Bind();
|
t_m_spWater2->Bind();
|
||||||
|
|
||||||
glUniform2fv(glGetUniformLocation(shaderProgramHandle, "dir"), 1, glm::value_ptr(glm::vec2(1.0f, 0.0f)));
|
glUniform2fv(glGetUniformLocation(shaderProgramHandle, "dir"), 1, glm::value_ptr(glm::vec2(1.0f, 0.0f)));
|
||||||
glUniform1f(glGetUniformLocation(shaderProgramHandle, "res"), m_Resolution.Height);
|
glUniform1f(glGetUniformLocation(shaderProgramHandle, "res"), m_Resolution.Width);
|
||||||
glUniform1f(glGetUniformLocation(shaderProgramHandle, "radius"), 2.0f);
|
glUniform1f(glGetUniformLocation(shaderProgramHandle, "radius"), 3.0f);
|
||||||
|
|
||||||
glActiveTexture(GL_TEXTURE0);
|
glActiveTexture(GL_TEXTURE0);
|
||||||
glBindTexture(GL_TEXTURE_2D, t_m_Gwater);
|
glBindTexture(GL_TEXTURE_2D, t_m_Gwater);
|
||||||
@@ -545,16 +550,17 @@ void dd::Renderer::DrawWater(RenderQueue &waterParticles)
|
|||||||
|
|
||||||
//blur2
|
//blur2
|
||||||
shaderProgramHandle = *t_m_spWater2;
|
shaderProgramHandle = *t_m_spWater2;
|
||||||
glCullFace(GL_BACK);
|
glDisable(GL_CULL_FACE);
|
||||||
glDisable(GL_BLEND);
|
glDisable(GL_DEPTH_TEST);
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, t_m_fbWaterBlur2);
|
glDepthMask(GL_FALSE);
|
||||||
glClearColor(0, 0, 0, 1);
|
glEnable(GL_BLEND);
|
||||||
glClear(GL_COLOR_BUFFER_BIT);
|
glBlendFunc(GL_SRC_ALPHA, GL_ONE);
|
||||||
|
glBindFramebuffer(GL_FRAMEBUFFER, m_fbDeferred3);
|
||||||
t_m_spWater2->Bind();
|
t_m_spWater2->Bind();
|
||||||
|
|
||||||
glUniform2fv(glGetUniformLocation(shaderProgramHandle, "dir"), 1, glm::value_ptr(glm::vec2(0.0f, 1.0f)));
|
glUniform2fv(glGetUniformLocation(shaderProgramHandle, "dir"), 1, glm::value_ptr(glm::vec2(0.0f, 1.0f)));
|
||||||
glUniform1f(glGetUniformLocation(shaderProgramHandle, "res"), m_Resolution.Height);
|
glUniform1f(glGetUniformLocation(shaderProgramHandle, "res"), m_Resolution.Height);
|
||||||
glUniform1f(glGetUniformLocation(shaderProgramHandle, "radius"), 2.0f);
|
glUniform1f(glGetUniformLocation(shaderProgramHandle, "radius"), 3.0f);
|
||||||
|
|
||||||
glActiveTexture(GL_TEXTURE0);
|
glActiveTexture(GL_TEXTURE0);
|
||||||
glBindTexture(GL_TEXTURE_2D, t_m_BWater);
|
glBindTexture(GL_TEXTURE_2D, t_m_BWater);
|
||||||
@@ -659,6 +665,6 @@ void dd::Renderer::DebugKeys()
|
|||||||
m_CurrentScreenBuffer = m_tLighting;
|
m_CurrentScreenBuffer = m_tLighting;
|
||||||
}
|
}
|
||||||
if (glfwGetKey(m_Window, GLFW_KEY_F7)) {
|
if (glfwGetKey(m_Window, GLFW_KEY_F7)) {
|
||||||
m_CurrentScreenBuffer = t_m_BWater2;
|
m_CurrentScreenBuffer = t_m_BWater;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Regular → Executable
+2
@@ -24,6 +24,7 @@ layout (binding = 2) uniform sampler2D SpecularMap;
|
|||||||
|
|
||||||
uniform mat4 V;
|
uniform mat4 V;
|
||||||
uniform float MaterialShininess;
|
uniform float MaterialShininess;
|
||||||
|
uniform vec4 Color;
|
||||||
|
|
||||||
in VertexData
|
in VertexData
|
||||||
{
|
{
|
||||||
@@ -49,6 +50,7 @@ void main()
|
|||||||
{
|
{
|
||||||
// Diffuse Texture
|
// Diffuse Texture
|
||||||
GDiffuse = texture(DiffuseTexture, Input.TextureCoord) * Input.DiffuseColor;
|
GDiffuse = texture(DiffuseTexture, Input.TextureCoord) * Input.DiffuseColor;
|
||||||
|
GDiffuse = GDiffuse * Color;
|
||||||
|
|
||||||
// G-buffer Position
|
// G-buffer Position
|
||||||
GPosition = vec4(Input.Position.xyz, 1.0);
|
GPosition = vec4(Input.Position.xyz, 1.0);
|
||||||
|
|||||||
@@ -22,7 +22,6 @@ uniform vec3 La;
|
|||||||
|
|
||||||
layout (binding=0) uniform sampler2D DiffuseTexture;
|
layout (binding=0) uniform sampler2D DiffuseTexture;
|
||||||
layout (binding=1) uniform sampler2D LightingTexture;
|
layout (binding=1) uniform sampler2D LightingTexture;
|
||||||
layout (binding=2) uniform sampler2D WaterTexture;
|
|
||||||
|
|
||||||
in VertexData
|
in VertexData
|
||||||
{
|
{
|
||||||
@@ -36,12 +35,11 @@ void main()
|
|||||||
{
|
{
|
||||||
vec4 DiffuseTexel = texture(DiffuseTexture, Input.TextureCoord);
|
vec4 DiffuseTexel = texture(DiffuseTexture, Input.TextureCoord);
|
||||||
vec4 LightingTexel = texture(LightingTexture, Input.TextureCoord);
|
vec4 LightingTexel = texture(LightingTexture, Input.TextureCoord);
|
||||||
vec4 WaterTexel = texture(WaterTexture, Input.TextureCoord);
|
|
||||||
|
|
||||||
//frag_Diffuse = DiffuseTexel * (vec4(La, 0.0) * (vec4(LightingTexel.rgb, 0.0) + vec4(LightingTexel.a, LightingTexel.a, LightingTexel.a, 0.0)));
|
//frag_Diffuse = DiffuseTexel * (vec4(La, 0.0) * (vec4(LightingTexel.rgb, 0.0) + vec4(LightingTexel.a, LightingTexel.a, LightingTexel.a, 0.0)));
|
||||||
//frag_Diffuse = DiffuseTexel * (vec4(La, 0.0) + LightingTexel);
|
//frag_Diffuse = DiffuseTexel * (vec4(La, 0.0) + LightingTexel);
|
||||||
//frag_Diffuse = DiffuseTexel * (vec4(1.f, 1.f, 1.f, 0.0) + LightingTexel);
|
//frag_Diffuse = DiffuseTexel * (vec4(1.f, 1.f, 1.f, 0.0) + LightingTexel);
|
||||||
frag_Diffuse = DiffuseTexel + LightingTexel + WaterTexel;
|
frag_Diffuse = DiffuseTexel + LightingTexel;
|
||||||
//frag_Diffuse = DiffuseTexel;
|
//frag_Diffuse = DiffuseTexel;
|
||||||
//frag_Diffuse = vec4(LightingTexel.r, LightingTexel.g, LightingTexel.b, 1.0);
|
//frag_Diffuse = vec4(LightingTexel.r, LightingTexel.g, LightingTexel.b, 1.0);
|
||||||
}
|
}
|
||||||
@@ -65,6 +65,6 @@ void main()
|
|||||||
float avgColor = frag_Diffuse.r + frag_Diffuse.g + frag_Diffuse.b;
|
float avgColor = frag_Diffuse.r + frag_Diffuse.g + frag_Diffuse.b;
|
||||||
avgColor = avgColor/3;
|
avgColor = avgColor/3;
|
||||||
if ( avgColor*dir.y > Threshhold ){
|
if ( avgColor*dir.y > Threshhold ){
|
||||||
frag_Diffuse = vec4(0.0, 0.6, 1.0, 1.0);
|
frag_Diffuse = vec4(0.0, 0.3, 1.0, 1.0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user