Эх сурвалжийг харах

added color mixer for texture color overlays

Kajetan Johannes Hammerle 5 жил өмнө
parent
commit
88175fd437

+ 22 - 0
src/me/hammerle/snuviengine/api/Shader.java

@@ -39,6 +39,9 @@ public final class Shader
     private static int unifUseTexture = -1;
     private static int unifUseColor = -1;
     private static int unifUseLight = -1;
+    private static int unifUseMixColor = -1;
+    private static int unifMixColorLoc = -1;
+    private static float[] unifMixColor = new float[] {0.0f, 0.0f, 0.0f, 0.0f};
     
     protected static void init()
     {
@@ -75,6 +78,11 @@ public final class Shader
         unifUseLight = glGetUniformLocation(program, "useLight");
         setLightEnabled(false);
         
+        unifUseMixColor = glGetUniformLocation(program, "useMixColor");
+        setMixColorEnabled(false);
+        unifMixColorLoc = glGetUniformLocation(program, "mixColor");
+        setMixColor(0.0f, 0.0f, 0.0f, 0.0f);
+        
         setViewPort(width, height);
         initDone = true;
     }
@@ -247,6 +255,20 @@ public final class Shader
         glUniform1i(unifUseColor, use ? 1 : 0);
     }
     
+    public static void setMixColorEnabled(boolean use)
+    {
+        glUniform1i(unifUseMixColor, use ? 1 : 0);
+    }
+    
+    public static void setMixColor(float r, float g, float b, float a)
+    {
+        unifMixColor[0] = r;
+        unifMixColor[1] = g;
+        unifMixColor[2] = b;
+        unifMixColor[3] = a;
+        glUniform4fv(unifMixColorLoc, unifMixColor);
+    }
+    
     public static void setLightEnabled(boolean use)
     {
         glUniform1i(unifUseLight, use ? 1 : 0);

+ 10 - 1
src/me/hammerle/snuviengine/shader/fragment.fs

@@ -22,6 +22,8 @@ uniform Light lights[32];
 uniform bool useTexture;
 uniform bool useColor;
 uniform bool useLight;
+uniform bool useMixColor;
+uniform vec4 mixColor;
 
 in vec2 tc;
 in vec2 loc;
@@ -49,7 +51,14 @@ void main(void)
         }
         if(useColor)
         {
-            color = vColor;
+            if(useMixColor)
+            {
+                color = (color + mixColor) * 0.5;
+            }
+            else
+            {
+                color = vColor;
+            }
         }
     }
     else

+ 2 - 0
src/me/hammerle/snuviengine/shader/vertex.vs

@@ -22,6 +22,8 @@ uniform Light lights[32];
 uniform bool useTexture;
 uniform bool useColor;
 uniform bool useLight;
+uniform bool useMixColor;
+uniform vec4 mixColor;
 
 out vec2 tc;
 out vec2 loc;