]> code.bitgloo.com Git - clyne/gamedev2.git/commitdiff
Fixed flipped texture normals being displayed properly in shaders
authorAndy Belle-Isle <drumsetmonkey@gmail.com>
Mon, 2 Sep 2019 05:52:56 +0000 (01:52 -0400)
committerAndy Belle-Isle <drumsetmonkey@gmail.com>
Mon, 2 Sep 2019 05:52:56 +0000 (01:52 -0400)
Shaders/world.frag
src/render.cpp

index 85941f2106fae6c2829b71cca851242f285edee6..881127bd34600662ea38c6152088dd3146ce2195 100644 (file)
@@ -17,6 +17,7 @@ uniform vec3 LightPos[32];
 uniform vec4 LightColor[32];
 uniform int LightNum;
 uniform vec4 AmbientLight;
+uniform int Flipped;
 
 void main()
 {
@@ -33,6 +34,8 @@ void main()
 
     for (int i = 0; i < LightNum; i++) {
         vec3 LightDir = vec3(LightPos[i].xy - fragCoord.xy, LightPos[i].z);
+        if (Flipped == 1)
+            LightDir.x = -LightDir.x;
 
         float D = length(LightDir);
 
index 65b8441e437b3bbca8e5a8049cea545fe840f643..7ae2fd74e0513da8e71ca10586d1824b7f06cfce 100644 (file)
@@ -45,6 +45,7 @@ void RenderSystem::update([[maybe_unused]] entityx::EntityManager& entities,
     GLuint q = worldShader.getUniform("textu");
     GLuint n = worldShader.getUniform("normu");
     GLuint b = worldShader.getUniform("AmbientLight");
+    GLuint f = worldShader.getUniform("Flipped");
 
     /***********
     *  SETUP  *
@@ -119,7 +120,7 @@ void RenderSystem::update([[maybe_unused]] entityx::EntityManager& entities,
     *************/
 
     entities.each<Render, Position>(
-        [this, a, q, t, n](entityx::Entity, Render &r, Position &p) {
+        [this, a, q, t, n, f](entityx::Entity, Render &r, Position &p) {
 
         if (!r.visible)
             return;
@@ -144,6 +145,8 @@ void RenderSystem::update([[maybe_unused]] entityx::EntityManager& entities,
                 (float)p.x-w, (float)p.y+h, 00.0f, 0.0f, 0.0f,
         };
 
+        bool flipped = false;
+
         // TODO flip nicely (aka model transformations)
         if (r.flipX) {
             std::swap(tri_data[3], tri_data[8]);
@@ -151,8 +154,12 @@ void RenderSystem::update([[maybe_unused]] entityx::EntityManager& entities,
 
             std::swap(tri_data[23], tri_data[28]);
             tri_data[18] = tri_data[23];
+
+            flipped = true;
         }
 
+        glUniform1i(f, flipped ? 1 : 0);
+
         glActiveTexture(GL_TEXTURE0);
         glBindTexture(GL_TEXTURE_2D, r.texture.tex);
         glUniform1i(q, 0);
@@ -244,6 +251,7 @@ int RenderSystem::init(void)
     worldShader.addUniform("LightColor");
     worldShader.addUniform("LightNum");
     worldShader.addUniform("AmbientLight");
+    worldShader.addUniform("Flipped");
 
     glEnableVertexAttribArray(worldShader.getAttribute("vertex"));
     glUseProgram(worldShader.getProgram());