Fixed a bug where you could not have more than one particle group
This commit is contained in:
Regular → Executable
+11
@@ -203,6 +203,16 @@ public:
|
|||||||
m_World->CommitEntity(background);
|
m_World->CommitEntity(background);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Water test
|
||||||
|
{
|
||||||
|
auto t_waterBody = m_World->CreateEntity();
|
||||||
|
auto transform = m_World->AddComponent<Components::Transform>(t_waterBody);
|
||||||
|
transform->Position = glm::vec3(0.f, -0.5f, -10.f);
|
||||||
|
transform->Scale = glm::vec3(1.f, 1.f, 1.f);
|
||||||
|
auto water = m_World->AddComponent<Components::WaterVolume>(t_waterBody);
|
||||||
|
auto body = m_World->AddComponent<Components::RectangleShape>(t_waterBody);
|
||||||
|
m_World->CommitEntity(t_waterBody);
|
||||||
|
}
|
||||||
//Water test
|
//Water test
|
||||||
{
|
{
|
||||||
auto t_waterBody = m_World->CreateEntity();
|
auto t_waterBody = m_World->CreateEntity();
|
||||||
@@ -213,6 +223,7 @@ public:
|
|||||||
auto body = m_World->AddComponent<Components::RectangleShape>(t_waterBody);
|
auto body = m_World->AddComponent<Components::RectangleShape>(t_waterBody);
|
||||||
m_World->CommitEntity(t_waterBody);
|
m_World->CommitEntity(t_waterBody);
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO: Why does the ball not collide with these bricks?
|
//TODO: Why does the ball not collide with these bricks?
|
||||||
//BottomBox
|
//BottomBox
|
||||||
{
|
{
|
||||||
|
|||||||
+19
-24
@@ -72,37 +72,32 @@ private:
|
|||||||
ShaderProgram* m_spDeferred3;
|
ShaderProgram* m_spDeferred3;
|
||||||
ShaderProgram* m_spForward;
|
ShaderProgram* m_spForward;
|
||||||
ShaderProgram* m_spScreen;
|
ShaderProgram* m_spScreen;
|
||||||
ShaderProgram* t_m_spWater;
|
ShaderProgram*m_spWater;
|
||||||
ShaderProgram* t_m_spWater2;
|
ShaderProgram*m_spWater2;
|
||||||
|
|
||||||
GLuint m_ScreenQuad = 0;
|
GLuint m_ScreenQuad = 0;
|
||||||
Model* m_UnitSphere = nullptr;
|
Model* m_UnitSphere = nullptr;
|
||||||
Model* m_UnitQuad = nullptr;
|
Model* m_UnitQuad = nullptr;
|
||||||
Texture* m_StandardNormal;
|
Texture* m_StandardNormal;
|
||||||
Texture* m_StandardSpecular;
|
Texture* m_StandardSpecular;
|
||||||
Texture* t_m_WhiteSphereTexture;
|
Texture* m_WhiteSphereTexture;
|
||||||
|
|
||||||
GLuint m_rbDepthBuffer = 0;
|
|
||||||
GLuint m_fbDeferred1 = 0;
|
|
||||||
GLuint m_GDiffuse = 0;
|
|
||||||
GLuint m_GPosition = 0;
|
|
||||||
GLuint m_GNormal = 0;
|
|
||||||
GLuint m_GSpecular = 0;
|
|
||||||
GLuint m_fbDeferred2 = 0;
|
|
||||||
GLuint m_tLighting = 0;
|
|
||||||
GLuint m_fbDeferred3 = 0;
|
|
||||||
GLuint m_tFinal = 0;
|
|
||||||
//Water GTexture
|
|
||||||
GLuint t_m_Gwater = 0;
|
|
||||||
//Water blur texture
|
|
||||||
GLuint t_m_BWater;
|
|
||||||
GLuint t_m_BWater2;
|
|
||||||
//WAterpass Framebuffer
|
|
||||||
GLuint t_m_fbWater;
|
|
||||||
//Waterpass Framebuffer
|
|
||||||
GLuint t_m_fbWaterBlur;
|
|
||||||
GLuint t_m_fbWaterBlur2;
|
|
||||||
|
|
||||||
|
GLuint m_rbDepthBuffer = 0; //DepthBuffer Texture
|
||||||
|
GLuint m_fbDeferred1 = 0; //Framebuffer for first pass
|
||||||
|
GLuint m_GDiffuse = 0; //Texture for diffuseColors
|
||||||
|
GLuint m_GPosition = 0; //Texture for positions
|
||||||
|
GLuint m_GNormal = 0; //Texture for normals
|
||||||
|
GLuint m_GSpecular = 0; //Texture for specular
|
||||||
|
GLuint m_fbDeferred2 = 0; //Framebuffer that handles the lighting pass
|
||||||
|
GLuint m_tLighting = 0; //Texture for the lighting pass
|
||||||
|
GLuint m_fbDeferred3 = 0; //Frambuffer for handling the last pass.
|
||||||
|
GLuint m_tFinal = 0; //Final Texture to be printed to screen
|
||||||
|
GLuint m_Gwater = 0; //Water Color Texture
|
||||||
|
GLuint m_BWater; //Water blur texture
|
||||||
|
GLuint m_BWater2; //Water blur texture
|
||||||
|
GLuint m_fbWater; //Waterpass Framebuffer
|
||||||
|
GLuint m_fbWaterBlur; //Waterpass Framebuffer
|
||||||
|
GLuint m_fbWaterBlur2; //Waterpass Framebuffer
|
||||||
|
|
||||||
GLuint m_CurrentScreenBuffer = 0;
|
GLuint m_CurrentScreenBuffer = 0;
|
||||||
void LoadShaders();
|
void LoadShaders();
|
||||||
|
|||||||
Regular → Executable
+2
-2
@@ -67,8 +67,8 @@ private:
|
|||||||
|
|
||||||
void CreateBody(EntityID entity);
|
void CreateBody(EntityID entity);
|
||||||
|
|
||||||
b2ParticleSystem *m_ParticleSystem;
|
b2ParticleSystem* m_ParticleSystem;
|
||||||
b2ParticleGroup* t_watergroup;
|
std::vector<b2ParticleGroup*> t_ParticleGroup;
|
||||||
|
|
||||||
std::unordered_map<EntityID, const b2ParticleHandle*> m_EntitiesToParticleHandle;
|
std::unordered_map<EntityID, const b2ParticleHandle*> m_EntitiesToParticleHandle;
|
||||||
std::unordered_map<const b2ParticleHandle*, EntityID> m_ParticleHandleToEntities;
|
std::unordered_map<const b2ParticleHandle*, EntityID> m_ParticleHandleToEntities;
|
||||||
|
|||||||
+36
-68
@@ -92,10 +92,10 @@ void dd::Renderer::LoadShaders()
|
|||||||
m_spDeferred2->Link();
|
m_spDeferred2->Link();
|
||||||
|
|
||||||
//Water Pass
|
//Water Pass
|
||||||
t_m_spWater = ResourceManager::Load<ShaderProgram>("Shaders/Deferred/water/");
|
m_spWater = ResourceManager::Load<ShaderProgram>("Shaders/Deferred/water/");
|
||||||
t_m_spWater->Link();
|
m_spWater->Link();
|
||||||
t_m_spWater2 = ResourceManager::Load<ShaderProgram>("Shaders/Deferred/water2/");
|
m_spWater2 = ResourceManager::Load<ShaderProgram>("Shaders/Deferred/water2/");
|
||||||
t_m_spWater2->Link();
|
m_spWater2->Link();
|
||||||
|
|
||||||
// Pass #3: Combining into final image
|
// Pass #3: Combining into final image
|
||||||
m_spDeferred3 = ResourceManager::Load<ShaderProgram>("Shaders/Deferred/3/");
|
m_spDeferred3 = ResourceManager::Load<ShaderProgram>("Shaders/Deferred/3/");
|
||||||
@@ -122,7 +122,7 @@ void dd::Renderer::CreateBuffers()
|
|||||||
m_UnitSphere = ResourceManager::Load<Model>("Models/Core/UnitSphere.obj");
|
m_UnitSphere = ResourceManager::Load<Model>("Models/Core/UnitSphere.obj");
|
||||||
m_StandardNormal = ResourceManager::Load<Texture>("Textures/Core/NeutralNormalMap.png");
|
m_StandardNormal = ResourceManager::Load<Texture>("Textures/Core/NeutralNormalMap.png");
|
||||||
m_StandardSpecular = ResourceManager::Load<Texture>("Textures/Core/NeutralSpecularMap.png");
|
m_StandardSpecular = ResourceManager::Load<Texture>("Textures/Core/NeutralSpecularMap.png");
|
||||||
t_m_WhiteSphereTexture = ResourceManager::Load<Texture>("Textures/Test/Water.png");
|
m_WhiteSphereTexture = ResourceManager::Load<Texture>("Textures/Test/Water.png");
|
||||||
|
|
||||||
glGenRenderbuffers(1, &m_rbDepthBuffer);
|
glGenRenderbuffers(1, &m_rbDepthBuffer);
|
||||||
glBindRenderbuffer(GL_RENDERBUFFER, m_rbDepthBuffer);
|
glBindRenderbuffer(GL_RENDERBUFFER, m_rbDepthBuffer);
|
||||||
@@ -157,8 +157,8 @@ void dd::Renderer::CreateBuffers()
|
|||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
|
||||||
glGenTextures(1, &t_m_Gwater);
|
glGenTextures(1, &m_Gwater);
|
||||||
glBindTexture(GL_TEXTURE_2D, t_m_Gwater);
|
glBindTexture(GL_TEXTURE_2D, m_Gwater);
|
||||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, m_Resolution.Width, m_Resolution.Height, 0, GL_RGBA, GL_FLOAT, NULL);
|
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, m_Resolution.Width, m_Resolution.Height, 0, GL_RGBA, GL_FLOAT, 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);
|
||||||
@@ -201,8 +201,8 @@ void dd::Renderer::CreateBuffers()
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Fill Water Texture
|
//Fill Water Texture
|
||||||
glGenTextures(1, &t_m_Gwater);
|
glGenTextures(1, &m_Gwater);
|
||||||
glBindTexture(GL_TEXTURE_2D, t_m_Gwater);
|
glBindTexture(GL_TEXTURE_2D, m_Gwater);
|
||||||
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);
|
||||||
@@ -210,9 +210,9 @@ void dd::Renderer::CreateBuffers()
|
|||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
|
||||||
|
|
||||||
//Fill water pass
|
//Fill water pass
|
||||||
glGenFramebuffers(1, &t_m_fbWater);
|
glGenFramebuffers(1, &m_fbWater);
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, t_m_fbWater);
|
glBindFramebuffer(GL_FRAMEBUFFER, m_fbWater);
|
||||||
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, t_m_Gwater, 0);
|
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, m_Gwater, 0);
|
||||||
GLenum waterPassDrawBuffers[] = { GL_COLOR_ATTACHMENT0 };
|
GLenum waterPassDrawBuffers[] = { GL_COLOR_ATTACHMENT0 };
|
||||||
glDrawBuffers(1, waterPassDrawBuffers);
|
glDrawBuffers(1, waterPassDrawBuffers);
|
||||||
if (GLenum fbStatus = glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) {
|
if (GLenum fbStatus = glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) {
|
||||||
@@ -221,8 +221,8 @@ void dd::Renderer::CreateBuffers()
|
|||||||
}
|
}
|
||||||
|
|
||||||
//water Blur texture
|
//water Blur texture
|
||||||
glGenTextures(1, &t_m_BWater);
|
glGenTextures(1, &m_BWater);
|
||||||
glBindTexture(GL_TEXTURE_2D, t_m_BWater);
|
glBindTexture(GL_TEXTURE_2D, m_BWater);
|
||||||
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);
|
||||||
@@ -230,9 +230,9 @@ void dd::Renderer::CreateBuffers()
|
|||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
||||||
|
|
||||||
//Fill waterBlur pass
|
//Fill waterBlur pass
|
||||||
glGenFramebuffers(1, &t_m_fbWaterBlur);
|
glGenFramebuffers(1, &m_fbWaterBlur);
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, t_m_fbWaterBlur);
|
glBindFramebuffer(GL_FRAMEBUFFER, m_fbWaterBlur);
|
||||||
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, t_m_BWater, 0);
|
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, m_BWater, 0);
|
||||||
GLenum waterBlurDrawBuffers[] = { GL_COLOR_ATTACHMENT0 };
|
GLenum waterBlurDrawBuffers[] = { GL_COLOR_ATTACHMENT0 };
|
||||||
glDrawBuffers(1, waterBlurDrawBuffers);
|
glDrawBuffers(1, waterBlurDrawBuffers);
|
||||||
if (GLenum fbStatus = glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) {
|
if (GLenum fbStatus = glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) {
|
||||||
@@ -241,8 +241,8 @@ void dd::Renderer::CreateBuffers()
|
|||||||
}
|
}
|
||||||
|
|
||||||
//water Blur texture2
|
//water Blur texture2
|
||||||
glGenTextures(1, &t_m_BWater2);
|
glGenTextures(1, &m_BWater2);
|
||||||
glBindTexture(GL_TEXTURE_2D, t_m_BWater2);
|
glBindTexture(GL_TEXTURE_2D, m_BWater2);
|
||||||
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, m_rbDepthBuffer);
|
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);
|
||||||
@@ -251,9 +251,9 @@ void dd::Renderer::CreateBuffers()
|
|||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
||||||
|
|
||||||
//Fill waterBlur pass2
|
//Fill waterBlur pass2
|
||||||
glGenFramebuffers(1, &t_m_fbWaterBlur2);
|
glGenFramebuffers(1, &m_fbWaterBlur2);
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, t_m_fbWaterBlur2);
|
glBindFramebuffer(GL_FRAMEBUFFER, m_fbWaterBlur2);
|
||||||
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, t_m_BWater2, 0);
|
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, m_BWater2, 0);
|
||||||
GLenum waterBlur2DrawBuffers[] = { GL_COLOR_ATTACHMENT0 };
|
GLenum waterBlur2DrawBuffers[] = { GL_COLOR_ATTACHMENT0 };
|
||||||
glDrawBuffers(1, waterBlur2DrawBuffers);
|
glDrawBuffers(1, waterBlur2DrawBuffers);
|
||||||
if (GLenum fbStatus = glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) {
|
if (GLenum fbStatus = glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) {
|
||||||
@@ -379,10 +379,10 @@ void dd::Renderer::DrawForward(RenderQueue &objects, RenderQueue &lights)
|
|||||||
glEnable(GL_DEPTH_TEST);
|
glEnable(GL_DEPTH_TEST);
|
||||||
glEnable(GL_BLEND);
|
glEnable(GL_BLEND);
|
||||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, t_m_fbWater);
|
glBindFramebuffer(GL_FRAMEBUFFER, m_fbWater);
|
||||||
glClearColor(0, 0, 0, 0);
|
glClearColor(0, 0, 0, 0);
|
||||||
glClear(GL_COLOR_BUFFER_BIT);
|
glClear(GL_COLOR_BUFFER_BIT);
|
||||||
t_m_spWater->Bind();
|
m_spWater->Bind();
|
||||||
DrawWater(objects);
|
DrawWater(objects);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -499,7 +499,7 @@ void dd::Renderer::DrawLightSpheres(RenderQueue &lights)
|
|||||||
|
|
||||||
void dd::Renderer::DrawWater(RenderQueue &rq)
|
void dd::Renderer::DrawWater(RenderQueue &rq)
|
||||||
{
|
{
|
||||||
GLuint shaderProgramHandle = *t_m_spWater;
|
GLuint shaderProgramHandle = *m_spWater;
|
||||||
|
|
||||||
glm::mat4 projectionMatrix = m_Camera->ProjectionMatrix();
|
glm::mat4 projectionMatrix = m_Camera->ProjectionMatrix();
|
||||||
glm::mat4 viewMatrix = m_Camera->ViewMatrix();
|
glm::mat4 viewMatrix = m_Camera->ViewMatrix();
|
||||||
@@ -517,7 +517,7 @@ void dd::Renderer::DrawWater(RenderQueue &rq)
|
|||||||
glm::value_ptr(viewMatrix));
|
glm::value_ptr(viewMatrix));
|
||||||
|
|
||||||
glActiveTexture(GL_TEXTURE0);
|
glActiveTexture(GL_TEXTURE0);
|
||||||
glBindTexture(GL_TEXTURE_2D, *t_m_WhiteSphereTexture);
|
glBindTexture(GL_TEXTURE_2D, *m_WhiteSphereTexture);
|
||||||
|
|
||||||
glBindVertexArray(m_UnitQuad->VAO);
|
glBindVertexArray(m_UnitQuad->VAO);
|
||||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_UnitQuad->ElementBuffer);
|
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_UnitQuad->ElementBuffer);
|
||||||
@@ -528,16 +528,17 @@ void dd::Renderer::DrawWater(RenderQueue &rq)
|
|||||||
|
|
||||||
|
|
||||||
//blur1
|
//blur1
|
||||||
shaderProgramHandle = *t_m_spWater2;
|
shaderProgramHandle = *m_spWater2;
|
||||||
glDisable(GL_CULL_FACE);
|
glDisable(GL_CULL_FACE);
|
||||||
glDepthMask(GL_FALSE);
|
glDepthMask(GL_FALSE);
|
||||||
glEnable(GL_DEPTH_TEST);
|
glEnable(GL_DEPTH_TEST);
|
||||||
glEnable(GL_BLEND);
|
glEnable(GL_BLEND);
|
||||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, t_m_fbWaterBlur);
|
glBindFramebuffer(GL_FRAMEBUFFER, m_fbWaterBlur);
|
||||||
glClearColor(0, 0, 0, 0);
|
glClearColor(0, 0, 0, 0);
|
||||||
glClear(GL_COLOR_BUFFER_BIT);
|
glClear(GL_COLOR_BUFFER_BIT);
|
||||||
t_m_spWater2->Bind();
|
m_spWater2->Bind();
|
||||||
|
//TODO: Add this in water particle component. Blurradius
|
||||||
float radius = 3.f;
|
float radius = 3.f;
|
||||||
|
|
||||||
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)));
|
||||||
@@ -545,64 +546,31 @@ void dd::Renderer::DrawWater(RenderQueue &rq)
|
|||||||
glUniform1f(glGetUniformLocation(shaderProgramHandle, "radius"), radius);
|
glUniform1f(glGetUniformLocation(shaderProgramHandle, "radius"), radius);
|
||||||
|
|
||||||
glActiveTexture(GL_TEXTURE0);
|
glActiveTexture(GL_TEXTURE0);
|
||||||
glBindTexture(GL_TEXTURE_2D, t_m_Gwater);
|
glBindTexture(GL_TEXTURE_2D, m_Gwater);
|
||||||
glBindVertexArray(m_ScreenQuad);
|
glBindVertexArray(m_ScreenQuad);
|
||||||
glDrawArrays(GL_TRIANGLES, 0, 6);
|
glDrawArrays(GL_TRIANGLES, 0, 6);
|
||||||
|
|
||||||
|
|
||||||
//blur2
|
//blur2
|
||||||
shaderProgramHandle = *t_m_spWater2;
|
shaderProgramHandle = *m_spWater2;
|
||||||
glDisable(GL_CULL_FACE);
|
glDisable(GL_CULL_FACE);
|
||||||
glDisable(GL_DEPTH_TEST);
|
glDisable(GL_DEPTH_TEST);
|
||||||
glDepthMask(GL_FALSE);
|
glDepthMask(GL_FALSE);
|
||||||
glEnable(GL_BLEND);
|
glEnable(GL_BLEND);
|
||||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE);
|
glBlendFunc(GL_SRC_ALPHA, GL_ONE);
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, m_fbDeferred3);
|
glBindFramebuffer(GL_FRAMEBUFFER, m_fbDeferred3);
|
||||||
t_m_spWater2->Bind();
|
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"), radius);
|
glUniform1f(glGetUniformLocation(shaderProgramHandle, "radius"), radius);
|
||||||
|
|
||||||
glActiveTexture(GL_TEXTURE0);
|
glActiveTexture(GL_TEXTURE0);
|
||||||
glBindTexture(GL_TEXTURE_2D, t_m_BWater);
|
glBindTexture(GL_TEXTURE_2D, m_BWater);
|
||||||
glBindVertexArray(m_ScreenQuad);
|
glBindVertexArray(m_ScreenQuad);
|
||||||
glDrawArrays(GL_TRIANGLES, 0, 6);
|
glDrawArrays(GL_TRIANGLES, 0, 6);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
GLuint dd::Renderer::CreateWaterParticleVAO(RenderQueue &particles)
|
|
||||||
{
|
|
||||||
float waterVerts[particles.Size()];
|
|
||||||
int i = 0;
|
|
||||||
|
|
||||||
for ( auto &job : particles ) {
|
|
||||||
auto waterJob = std::dynamic_pointer_cast<WaterParticleJob>(job);
|
|
||||||
if (!waterJob)
|
|
||||||
continue;
|
|
||||||
waterVerts[i ] = waterJob->Position.x;
|
|
||||||
waterVerts[i+1] = waterJob->Position.y;
|
|
||||||
waterVerts[i+2] = waterJob->Position.z;
|
|
||||||
i+3;
|
|
||||||
}
|
|
||||||
|
|
||||||
GLuint vbo[1], vao;
|
|
||||||
glGenBuffers(1, vbo);
|
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, vbo[0]);
|
|
||||||
glBufferData(GL_ARRAY_BUFFER, 3 * particles.Size() * sizeof(float), waterVerts, GL_STATIC_DRAW);
|
|
||||||
glGenVertexArrays(1, &vao);
|
|
||||||
glBindVertexArray(vao);
|
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, vbo[0]);
|
|
||||||
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
|
|
||||||
glEnableVertexAttribArray(0);
|
|
||||||
|
|
||||||
glBindVertexArray(0);
|
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
|
||||||
|
|
||||||
return vao;
|
|
||||||
}
|
|
||||||
|
|
||||||
GLuint dd::Renderer::CreateQuad()
|
GLuint dd::Renderer::CreateQuad()
|
||||||
{
|
{
|
||||||
float quadVertices[] =
|
float quadVertices[] =
|
||||||
@@ -667,10 +635,10 @@ 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_Gwater;
|
m_CurrentScreenBuffer = m_Gwater;
|
||||||
}
|
}
|
||||||
if (glfwGetKey(m_Window, GLFW_KEY_F8)) {
|
if (glfwGetKey(m_Window, GLFW_KEY_F8)) {
|
||||||
m_CurrentScreenBuffer = t_m_BWater;
|
m_CurrentScreenBuffer = m_BWater;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Regular → Executable
+1
-6
@@ -289,7 +289,6 @@ void dd::Systems::PhysicsSystem::CreateBody(EntityID entity)
|
|||||||
|
|
||||||
void dd::Systems::PhysicsSystem::CreateParticleGroup(EntityID e)
|
void dd::Systems::PhysicsSystem::CreateParticleGroup(EntityID e)
|
||||||
{
|
{
|
||||||
//TODO: Lägg alla pd i en lista
|
|
||||||
auto transform = m_World->GetComponent<Components::Transform>(e);
|
auto transform = m_World->GetComponent<Components::Transform>(e);
|
||||||
if (!transform) {
|
if (!transform) {
|
||||||
LOG_ERROR("No Transform component in CreateParticleGroup");
|
LOG_ERROR("No Transform component in CreateParticleGroup");
|
||||||
@@ -303,18 +302,15 @@ void dd::Systems::PhysicsSystem::CreateParticleGroup(EntityID e)
|
|||||||
pd.shape = &shape;
|
pd.shape = &shape;
|
||||||
pd.flags = b2_tensileParticle;
|
pd.flags = b2_tensileParticle;
|
||||||
pd.position.Set(transform->Position.x, transform->Position.y);
|
pd.position.Set(transform->Position.x, transform->Position.y);
|
||||||
//TODO: PUT IN LIST
|
t_ParticleGroup.push_back(m_ParticleSystem->CreateParticleGroup(pd));
|
||||||
t_watergroup = m_ParticleSystem->CreateParticleGroup(pd);
|
|
||||||
b2Vec2* t_ParticlePositions = m_ParticleSystem->GetPositionBuffer();
|
b2Vec2* t_ParticlePositions = m_ParticleSystem->GetPositionBuffer();
|
||||||
for(int i = 0; i < m_ParticleSystem->GetParticleCount(); i++){
|
for(int i = 0; i < m_ParticleSystem->GetParticleCount(); i++){
|
||||||
{
|
{
|
||||||
auto t_waterparticle = m_World->CreateEntity(e);
|
auto t_waterparticle = m_World->CreateEntity(e);
|
||||||
auto transformChild = m_World->AddComponent<Components::Transform>(t_waterparticle);
|
auto transformChild = m_World->AddComponent<Components::Transform>(t_waterparticle);
|
||||||
//auto sprite = m_World->AddComponent<Components::Sprite>(t_waterparticle);
|
|
||||||
|
|
||||||
transformChild->Position = glm::vec3(t_ParticlePositions[i].x - transform->Position.x, t_ParticlePositions[i].y - transform->Position.y, -9.5f);
|
transformChild->Position = glm::vec3(t_ParticlePositions[i].x - transform->Position.x, t_ParticlePositions[i].y - transform->Position.y, -9.5f);
|
||||||
transformChild->Scale = glm::vec3(m_ParticleSystem->GetRadius())/transform->Scale;
|
transformChild->Scale = glm::vec3(m_ParticleSystem->GetRadius())/transform->Scale;
|
||||||
//sprite->SpriteFile = "Textures/Ball.png";
|
|
||||||
m_World->CommitEntity(t_waterparticle);
|
m_World->CommitEntity(t_waterparticle);
|
||||||
|
|
||||||
m_EntitiesToParticleHandle.insert(std::make_pair(t_waterparticle, m_ParticleSystem->GetParticleHandleFromIndex(i)));
|
m_EntitiesToParticleHandle.insert(std::make_pair(t_waterparticle, m_ParticleSystem->GetParticleHandleFromIndex(i)));
|
||||||
@@ -322,7 +318,6 @@ void dd::Systems::PhysicsSystem::CreateParticleGroup(EntityID e)
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
LOG_INFO("ParticleCount: %i", m_ParticleSystem->GetParticleCount());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
dd::Systems::PhysicsSystem::~PhysicsSystem()
|
dd::Systems::PhysicsSystem::~PhysicsSystem()
|
||||||
|
|||||||
Reference in New Issue
Block a user