diff --git a/jme3-core/src/main/java/com/jme3/renderer/opengl/GLRenderer.java b/jme3-core/src/main/java/com/jme3/renderer/opengl/GLRenderer.java index 0d591eff2..e90affb3d 100644 --- a/jme3-core/src/main/java/com/jme3/renderer/opengl/GLRenderer.java +++ b/jme3-core/src/main/java/com/jme3/renderer/opengl/GLRenderer.java @@ -2203,14 +2203,16 @@ public final class GLRenderer implements Renderer { // For OpenGL3 and up. // We'll generate mipmaps via glGenerateMipmapEXT (see below) } - } else if (img.hasMipmaps()) { - // Image already has mipmaps, set the max level based on the - // number of mipmaps we have. - gl.glTexParameteri(target, GL.GL_TEXTURE_MAX_LEVEL, img.getMipMapSizes().length - 1); - } else { - // Image does not have mipmaps and they are not required. - // Specify that that the texture has no mipmaps. - gl.glTexParameteri(target, GL.GL_TEXTURE_MAX_LEVEL, 0); + } else if (caps.contains(Caps.OpenGL20)) { + if (img.hasMipmaps()) { + // Image already has mipmaps, set the max level based on the + // number of mipmaps we have. + gl.glTexParameteri(target, GL2.GL_TEXTURE_MAX_LEVEL, img.getMipMapSizes().length - 1); + } else { + // Image does not have mipmaps and they are not required. + // Specify that that the texture has no mipmaps. + gl.glTexParameteri(target, GL2.GL_TEXTURE_MAX_LEVEL, 0); + } } } else { // Check if graphics card doesn't support multisample textures diff --git a/jme3-effects/src/main/resources/Common/MatDefs/Post/ToneMap.frag b/jme3-effects/src/main/resources/Common/MatDefs/Post/ToneMap.frag index a5a439ada..673be8c02 100644 --- a/jme3-effects/src/main/resources/Common/MatDefs/Post/ToneMap.frag +++ b/jme3-effects/src/main/resources/Common/MatDefs/Post/ToneMap.frag @@ -1,12 +1,7 @@ +#extension GL_ARB_texture_multisample : enable #import "Common/ShaderLib/GLSLCompat.glsllib" -#import "Common/ShaderLib/MultiSample.glsllib" -uniform COLORTEXTURE m_Texture; -uniform vec3 m_WhitePoint; - -varying vec2 texCoord; - -vec3 FilmicCurve(in vec3 x){ +vec3 FilmicCurve(in vec3 x) { const float A = 0.22; const float B = 0.30; const float C = 0.10; @@ -19,27 +14,40 @@ vec3 FilmicCurve(in vec3 x){ // whitePoint should be 11.2 -vec3 ToneMap_Filmic(vec3 color, vec3 whitePoint){ +vec3 ToneMap_Filmic(vec3 color, vec3 whitePoint) { return FilmicCurve(color) / FilmicCurve(whitePoint); } -vec4 tonemap(int i) { - - vec4 texVal = fetchTextureSample(m_Texture, texCoord, i); - vec3 toneMapped = ToneMap_Filmic(texVal.rgb, m_WhitePoint); - - return vec4(toneMapped, texVal.a); +uniform vec3 m_WhitePoint; +varying vec2 texCoord; + +#ifdef NUM_SAMPLES + +uniform sampler2DMS m_Texture; + +vec4 ToneMap_TextureFilmic() { + ivec2 iTexC = ivec2(texCoord * vec2(textureSize(m_Texture))); + vec4 color = vec4(0.0); + for (int i = 0; i < NUM_SAMPLES; i++) { + vec4 hdrColor = texelFetch(m_Texture, iTexC, i); + vec3 ldrColor = FilmicCurve(hdrColor.rgb); + color += vec4(ldrColor, hdrColor.a); + } + color.rgb /= FilmicCurve(m_WhitePoint); + return color / float(NUM_SAMPLES); } +#else + +uniform sampler2D m_Texture; + +vec4 ToneMap_TextureFilmic() { + vec4 texVal = texture2D(m_Texture, texCoord); + return vec4(ToneMap_Filmic(texVal.rgb, m_WhitePoint), texVal.a); +} + +#endif void main() { - #ifdef RESOLVE_MS - vec4 color = vec4(0.0); - for (int i = 0; i < m_NumSamples; i++){ - color += tonemap(i); - } - gl_FragColor = color / m_NumSamples; - #else - gl_FragColor = tonemap(0); - #endif + gl_FragColor = ToneMap_TextureFilmic(); } diff --git a/jme3-effects/src/main/resources/Common/MatDefs/Post/ToneMap.j3md b/jme3-effects/src/main/resources/Common/MatDefs/Post/ToneMap.j3md index a77cc36a9..7c1eb6673 100644 --- a/jme3-effects/src/main/resources/Common/MatDefs/Post/ToneMap.j3md +++ b/jme3-effects/src/main/resources/Common/MatDefs/Post/ToneMap.j3md @@ -15,9 +15,7 @@ MaterialDef Default GUI { } Defines { - RESOLVE_MS : NumSamples + NUM_SAMPLES : NumSamples } - } - } \ No newline at end of file diff --git a/jme3-terrain/src/main/java/com/jme3/terrain/heightmap/MidpointDisplacementHeightMap.java b/jme3-terrain/src/main/java/com/jme3/terrain/heightmap/MidpointDisplacementHeightMap.java index 9998d64a2..34b20a398 100644 --- a/jme3-terrain/src/main/java/com/jme3/terrain/heightmap/MidpointDisplacementHeightMap.java +++ b/jme3-terrain/src/main/java/com/jme3/terrain/heightmap/MidpointDisplacementHeightMap.java @@ -35,7 +35,6 @@ import com.jme3.math.FastMath; import java.util.Random; import java.util.logging.Level; import java.util.logging.Logger; -import javax.management.JMException; /** * MidpointDisplacementHeightMap generates an heightmap based on @@ -72,11 +71,11 @@ public class MidpointDisplacementHeightMap extends AbstractHeightMap { * typically a good choice * @param seed * A seed to feed the random number generator. - * @throw JMException if size is not a power of two plus one. + * @throw IllegalArgumentException if size is not a power of two plus one. */ - public MidpointDisplacementHeightMap(int size, float range, float persistence, long seed) throws Exception { + public MidpointDisplacementHeightMap(int size, float range, float persistence, long seed) { if (size < 0 || !FastMath.isPowerOfTwo(size - 1)) { - throw new JMException("The size is negative or not of the form 2^N +1" + throw new IllegalArgumentException("The size is negative or not of the form 2^N +1" + " (a power of two plus one)"); } this.size = size;