Water now rendered in forward rendering

This commit is contained in:
tleety
2015-09-24 23:21:46 +02:00
parent ef3591ba46
commit fa198cf953
8 changed files with 71 additions and 56 deletions
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 11 MiB

+25 -12
View File
@@ -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:
-4
View File
@@ -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();
} }
}; };
+1 -1
View File
@@ -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
View File
@@ -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;
} }
} }
+2
View File
@@ -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);
} }
} }