Added GammaCorrectionFilter contributed by phate666
git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@8256 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
This commit is contained in:
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…
x
Reference in New Issue
Block a user