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
engine/src
core-data/Common/MatDefs/Post
desktop-fx/com/jme3/post/filters
@ -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