git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@8256 75d07b2b-3a1a-0410-a2c5-0572b91ccdca3.0
parent
1584f767f1
commit
1ca81c3355
@ -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; |
||||||
|
} |
@ -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 { |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -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; |
||||||
|
} |
@ -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; |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue