diff --git a/jme3-effects/src/main/java/com/jme3/post/filters/GammaCorrectionFilter.java b/jme3-effects/src/main/java/com/jme3/post/filters/GammaCorrectionFilter.java index a761fe6d5..c8262fd84 100644 --- a/jme3-effects/src/main/java/com/jme3/post/filters/GammaCorrectionFilter.java +++ b/jme3-effects/src/main/java/com/jme3/post/filters/GammaCorrectionFilter.java @@ -38,72 +38,52 @@ 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 class GammaCorrectionFilter extends Filter { - public GammaCorrectionFilter(float gamma) - { - this(); - this.setGamma(gamma); - } + private float gamma = 2.2f; - @Override - protected Material getMaterial() - { - return material; - } + public GammaCorrectionFilter() { + super("GammaCorrectionFilter"); + } - @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 GammaCorrectionFilter(float gamma) { + this(); + this.setGamma(gamma); + } - public float getGamma() - { - return gamma; - } + @Override + protected Material getMaterial() { + return material; + } - /** - * 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; - } + @Override + protected void initFilter(AssetManager manager, + RenderManager renderManager, ViewPort vp, int w, int h) { + material = new Material(manager, "Materials/Filter/GammaCorrection.j3md"); + material.setFloat("InvGamma", 1.0f/gamma); + } - public boolean isComputeLuma() - { - return computeLuma; - } + public float getGamma() { + return gamma; + } - public void setComputeLuma(boolean computeLuma) - { - if (material != null) - { - material.setBoolean("computeLuma", computeLuma); - } - this.computeLuma = computeLuma; - } + /** + * set to 0.0 to disable gamma correction + * + * @param gamma + */ + public final void setGamma(float gamma) { + if(gamma<=0){ + throw new IllegalArgumentException("Gamma value can't be below or equal 0."); + } + if (material != null) { + material.setFloat("InvGamma",1.0f/ gamma); + } + this.gamma = gamma; + } } diff --git a/jme3-effects/src/main/resources/Common/MatDefs/Post/GammaCorrection.frag b/jme3-effects/src/main/resources/Common/MatDefs/Post/GammaCorrection.frag index 90b2adedc..1056de83c 100644 --- a/jme3-effects/src/main/resources/Common/MatDefs/Post/GammaCorrection.frag +++ b/jme3-effects/src/main/resources/Common/MatDefs/Post/GammaCorrection.frag @@ -1,23 +1,16 @@ uniform sampler2D m_Texture; varying vec2 texCoord; -uniform float m_gamma; +uniform float m_InvGamma; -vec3 gamma(vec3 L,float gamma) -{ - return pow(L, vec3(1.0 / gamma)); +vec3 gamma(vec3 L,float invGamma){ + return pow(L, vec3(invGamma)); } 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 + + texVal.rgb = gamma(texVal.rgb , m_InvGamma); gl_FragColor = texVal; } \ No newline at end of file diff --git a/jme3-effects/src/main/resources/Common/MatDefs/Post/GammaCorrection.j3md b/jme3-effects/src/main/resources/Common/MatDefs/Post/GammaCorrection.j3md index 973679efd..c2791906d 100644 --- a/jme3-effects/src/main/resources/Common/MatDefs/Post/GammaCorrection.j3md +++ b/jme3-effects/src/main/resources/Common/MatDefs/Post/GammaCorrection.j3md @@ -3,31 +3,29 @@ MaterialDef GammaCorrection { MaterialParameters { Int NumSamples Texture2D Texture - Float gamma - Boolean computeLuma + Float InvGamma } Technique { VertexShader GLSL150: Common/MatDefs/Post/Post15.vert - FragmentShader GLSL150: Common/MatDefs/Post/GammaCorrection15.frag + FragmentShader GLSL150: Materials/Filter/GammaCorrection15.frag WorldParameters { } - Defines { - COMPUTE_LUMA : computeLuma + Defines { + RESOLVE_MS : NumSamples } } Technique { VertexShader GLSL100: Common/MatDefs/Post/Post.vert - FragmentShader GLSL100: Common/MatDefs/Post/GammaCorrection.frag + FragmentShader GLSL100: Materials/Filter/GammaCorrection.frag WorldParameters { } - Defines { - COMPUTE_LUMA : computeLuma + Defines { } } } \ No newline at end of file diff --git a/jme3-effects/src/main/resources/Common/MatDefs/Post/GammaCorrection15.frag b/jme3-effects/src/main/resources/Common/MatDefs/Post/GammaCorrection15.frag index b7861908a..41c0e7652 100644 --- a/jme3-effects/src/main/resources/Common/MatDefs/Post/GammaCorrection15.frag +++ b/jme3-effects/src/main/resources/Common/MatDefs/Post/GammaCorrection15.frag @@ -3,24 +3,18 @@ uniform COLORTEXTURE m_Texture; in vec2 texCoord; -uniform float m_gamma; +uniform float m_InvGamma; -vec3 gamma(vec3 L,float gamma) -{ - return pow(L, vec3(1.0 / gamma)); +vec3 gamma(vec3 L,float invGamma){ + return pow(L, vec3(invGamma)); } + +out vec4 fragColor; 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 + vec4 texVal = getColor(m_Texture, texCoord); + + texVal.rgb = gamma(texVal.rgb , m_InvGamma); - gl_FragColor = texVal; + fragColor = texVal; } \ No newline at end of file