Przeglądaj źródła

* Forgot to commit this quite crucial class ..

git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@9619 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
Sha..rd 13 lat temu
rodzic
commit
896c0d31a5

+ 44 - 0
engine/src/core/com/jme3/texture/Image.java

@@ -324,10 +324,54 @@ public class Image extends NativeObject implements Savable /*, Cloneable*/ {
     protected transient Object efficientData;
     protected transient Object efficientData;
     protected int multiSamples = 1;
     protected int multiSamples = 1;
 //    protected int mipOffset = 0;
 //    protected int mipOffset = 0;
+    
+    // attributes relating to GL object
+    protected boolean mipsWereGenerated = false;
+    protected boolean needGeneratedMips = false;
 
 
+    /**
+     * Internal use only. 
+     * The renderer marks which images have generated mipmaps in VRAM
+     * and which do not, so it can generate them as needed.
+     * 
+     * @param generated If mipmaps were generated or not.
+     */
+    public void setMipmapsGenerated(boolean generated) {
+        this.mipsWereGenerated = generated;
+    }
+    
+    /**
+     * Internal use only.
+     * Check if the renderer has generated mipmaps for this image in VRAM
+     * or not.
+     * 
+     * @return If mipmaps were generated already.
+     */
+    public boolean isMipmapsGenerated() {
+        return mipsWereGenerated;
+    }
+    
+    /**
+     * (Package private) Called by {@link Texture} when 
+     * {@link #isMipmapsGenerated() } is false in order to generate
+     * mipmaps for this image.
+     */
+    void setNeedGeneratedMipmaps() {
+        needGeneratedMips = true;
+    }
+    
+    /**
+     * @return True if the image needs to have mipmaps generated
+     * for it (as requested by the texture).
+     */
+    public boolean isGeneratedMipmapsRequired() {
+        return needGeneratedMips;
+    }
+    
     @Override
     @Override
     public void resetObject() {
     public void resetObject() {
         this.id = -1;
         this.id = -1;
+        this.mipsWereGenerated = false;
         setUpdateNeeded();
         setUpdateNeeded();
     }
     }
 
 

+ 12 - 5
engine/src/core/com/jme3/texture/Texture.java

@@ -339,6 +339,9 @@ public abstract class Texture implements CloneableSmartAsset, Savable, Cloneable
                     "minificationFilter can not be null.");
                     "minificationFilter can not be null.");
         }
         }
         this.minificationFilter = minificationFilter;
         this.minificationFilter = minificationFilter;
+        if (minificationFilter.usesMipMapLevels() && image != null && !image.isGeneratedMipmapsRequired()) {
+            image.setNeedGeneratedMipmaps();
+        }
     }
     }
 
 
     /**
     /**
@@ -393,6 +396,9 @@ public abstract class Texture implements CloneableSmartAsset, Savable, Cloneable
      */
      */
     public void setImage(Image image) {
     public void setImage(Image image) {
         this.image = image;
         this.image = image;
+        
+        // Test if mipmap generation required.
+        setMinFilter(getMinFilter());
     }
     }
 
 
     /**
     /**
@@ -474,22 +480,23 @@ public abstract class Texture implements CloneableSmartAsset, Savable, Cloneable
      *            the anisotropic filtering level for this texture.
      *            the anisotropic filtering level for this texture.
      */
      */
     public void setAnisotropicFilter(int level) {
     public void setAnisotropicFilter(int level) {
-        if (level < 1)
+        if (level < 1) {
             anisotropicFilter = 1;
             anisotropicFilter = 1;
-        else
+        } else {
             anisotropicFilter = level;
             anisotropicFilter = level;
+        }
     }
     }
 
 
     @Override
     @Override
-    public String toString(){
+    public String toString() {
         StringBuilder sb = new StringBuilder();
         StringBuilder sb = new StringBuilder();
         sb.append(getClass().getSimpleName());
         sb.append(getClass().getSimpleName());
         sb.append("[name=").append(name);
         sb.append("[name=").append(name);
-        if (image != null)
+        if (image != null) {
             sb.append(", image=").append(image.toString());
             sb.append(", image=").append(image.toString());
+        }
 
 
         sb.append("]");
         sb.append("]");
-
         return sb.toString();
         return sb.toString();
     }
     }