Преглед изворни кода

Merge remote-tracking branch 'origin/master' into in-pass-shadows

Kirill Vainer пре 8 година
родитељ
комит
d50fb09efb

+ 10 - 8
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

+ 31 - 23
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();
 }

+ 1 - 3
jme3-effects/src/main/resources/Common/MatDefs/Post/ToneMap.j3md

@@ -15,9 +15,7 @@ MaterialDef Default GUI {
         }
 
         Defines {
-            RESOLVE_MS : NumSamples
+            NUM_SAMPLES : NumSamples
         }
-
     }
-
 }

+ 3 - 4
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;
 
 /**
  * <code>MidpointDisplacementHeightMap</code> 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;