Browse Source

Added GammaCorrectionFilter contributed by phate666

git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@8256 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
rem..om 14 years ago
parent
commit
1ca81c3355

+ 23 - 0
engine/src/core-data/Common/MatDefs/Post/GammaCorrection.frag

@@ -0,0 +1,23 @@
+uniform sampler2D m_Texture;
+varying vec2 texCoord;
+
+uniform float m_gamma;
+
+vec3 gamma(vec3 L,float gamma)
+{
+	return pow(L, vec3(1.0 / gamma));
+}
+
+void main() {
+    vec4 texVal = texture2D(m_Texture, texCoord);
+ 
+ 	if(m_gamma > 0.0)
+ 	{
+    	texVal.rgb = gamma(texVal.rgb , m_gamma);
+ 	}
+ 	#ifdef COMPUTE_LUMA
+ 		texVal.a = dot(texVal.rgb, vec3(0.299, 0.587, 0.114));
+ 	#endif
+ 	
+    gl_FragColor = texVal;
+}

+ 39 - 0
engine/src/core-data/Common/MatDefs/Post/GammaCorrection.j3md

@@ -0,0 +1,39 @@
+MaterialDef GammaCorrection {
+ 
+    MaterialParameters {
+        Int NumSamples
+        Texture2D Texture
+        Float gamma
+        Boolean computeLuma
+    }
+ 
+    Technique {
+        VertexShader GLSL150:   Common/MatDefs/Post/Post15.vert
+        FragmentShader GLSL150: Common/MatDefs/Post/GammaCorrection15.frag
+ 
+        WorldParameters {
+            WorldViewProjectionMatrix
+        }
+        
+        Defines {
+            COMPUTE_LUMA : computeLuma
+        }
+    }
+ 
+    Technique {
+        VertexShader GLSL100:   Common/MatDefs/Post/Post.vert
+        FragmentShader GLSL100: Common/MatDefs/Post/GammaCorrection.frag
+ 
+        WorldParameters {
+            WorldViewProjectionMatrix
+        }
+        
+         Defines {
+            COMPUTE_LUMA : computeLuma
+        }
+    }
+ 
+    Technique FixedFunc {
+    }
+ 
+}

+ 26 - 0
engine/src/core-data/Common/MatDefs/Post/GammaCorrection15.frag

@@ -0,0 +1,26 @@
+#import "Common/ShaderLib/MultiSample.glsllib"
+ 
+uniform COLORTEXTURE m_Texture;
+in vec2 texCoord;
+ 
+uniform float m_gamma;
+
+vec3 gamma(vec3 L,float gamma)
+{
+	return pow(L, vec3(1.0 / gamma));
+}
+ 
+void main() {
+    vec4 texVal = texture2D(m_Texture, texCoord);
+ 
+ 	if(m_gamma > 0.0)
+ 	{
+    	texVal.rgb = gamma(texVal.rgb , m_gamma);
+ 	}
+ 	
+ 	#ifdef COMPUTE_LUMA
+ 		texVal.a = dot(texVal.rgb, vec3(0.299, 0.587, 0.114));
+ 	#endif
+ 
+    gl_FragColor = texVal;
+}

+ 78 - 0
engine/src/desktop-fx/com/jme3/post/filters/GammaCorrectionFilter.java

@@ -0,0 +1,78 @@
+package com.jme3.post.filters;
+
+import com.jme3.asset.AssetManager;
+import com.jme3.material.Material;
+import com.jme3.post.Filter;
+import com.jme3.renderer.RenderManager;
+import com.jme3.renderer.ViewPort;
+
+/**
+ * 
+ * @author Phate666
+ * @version 1.0 initial version
+ * @version 1.1 added luma
+ */
+public class GammaCorrectionFilter extends Filter
+{
+	private float gamma = 2.0f;
+	private boolean computeLuma = false;
+
+	public GammaCorrectionFilter()
+	{
+		super("GammaCorrectionFilter");
+	}
+
+	public GammaCorrectionFilter(float gamma)
+	{
+		this();
+		this.setGamma(gamma);
+	}
+
+	@Override
+	protected Material getMaterial()
+	{
+		return material;
+	}
+
+	@Override
+	protected void initFilter(AssetManager manager,
+			RenderManager renderManager, ViewPort vp, int w, int h)
+	{
+		material = new Material(manager,
+				"Common/MatDefs/Post/GammaCorrection.j3md");
+		material.setFloat("gamma", gamma);
+		material.setBoolean("computeLuma", computeLuma);
+	}
+
+	public float getGamma()
+	{
+		return gamma;
+	}
+
+	/**
+	 * set to 0.0 to disable gamma correction
+	 * @param gamma
+	 */
+	public void setGamma(float gamma)
+	{
+		if (material != null)
+		{
+			material.setFloat("gamma", gamma);
+		}
+		this.gamma = gamma;
+	}
+
+	public boolean isComputeLuma()
+	{
+		return computeLuma;
+	}
+
+	public void setComputeLuma(boolean computeLuma)
+	{
+		if (material != null)
+		{
+			material.setBoolean("computeLuma", computeLuma);
+		}
+		this.computeLuma = computeLuma;
+	}
+}