Do not cache FilterPostProcessor j3f assets [patch]

Currently FilterPostProcessor *.j3f files are loaded using AssetKey and so use the simple cache. This doesn’t seem right since FPP has a lot of internal state and once you use it it’s not really reusable somewhere else. So this patch adds loadFilter to AssetManager and it uses a FilterKey that does no caching.



[patch]Index: engine/src/core/com/jme3/asset/AssetManager.java

===================================================================

— engine/src/core/com/jme3/asset/AssetManager.java (revision 9679)

+++ engine/src/core/com/jme3/asset/AssetManager.java (working copy)

@@ -38,6 +38,7 @@

import com.jme3.audio.AudioKey;

import com.jme3.font.BitmapFont;

import com.jme3.material.Material;

+import com.jme3.post.FilterPostProcessor;

import com.jme3.scene.Spatial;

import com.jme3.scene.plugins.OBJLoader;

import com.jme3.shader.Shader;

@@ -346,4 +347,22 @@

  • @see AssetManager#loadAsset(com.jme3.asset.AssetKey)

    */

    public BitmapFont loadFont(String name);

    +
  • /**
  • * Loads a filter *.j3f file with a FilterKey.<br />
    
  • * @param key Asset key of the filter file to load<br />
    
  • * @return The filter that was loaded<br />
    
  • *<br />
    
  • * @see AssetManager#loadAsset(com.jme3.asset.AssetKey)<br />
    
  • */<br />
    
  • public FilterPostProcessor loadFilter(FilterKey key);

    +
  • /**
  • * Loads a filter *.j3f file with a FilterKey.<br />
    
  • * @param name Asset name of the filter file to load<br />
    
  • * @return The filter that was loaded<br />
    
  • *<br />
    
  • * @see AssetManager#loadAsset(com.jme3.asset.AssetKey)<br />
    
  • */<br />
    
  • public FilterPostProcessor loadFilter(String name);

    }

    Index: engine/src/core/com/jme3/asset/FilterKey.java

    ===================================================================

    — engine/src/core/com/jme3/asset/FilterKey.java (revision 0)

    +++ engine/src/core/com/jme3/asset/FilterKey.java (working copy)

    @@ -0,0 +1,57 @@

    +/*
    • Copyright © 2012 jMonkeyEngine
    • All rights reserved.
  • *
    • Redistribution and use in source and binary forms, with or without
    • modification, are permitted provided that the following conditions are
    • met:
  • *
      • Redistributions of source code must retain the above copyright
    • notice, this list of conditions and the following disclaimer.
  • *
      • Redistributions in binary form must reproduce the above copyright
    • notice, this list of conditions and the following disclaimer in the
    • documentation and/or other materials provided with the distribution.
  • *
      • Neither the name of ‘jMonkeyEngine’ nor the names of its contributors
    • may be used to endorse or promote products derived from this software
    • without specific prior written permission.
  • *
    • THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    • "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
    • TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    • PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
    • CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
    • EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
    • PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
    • PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
    • LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
    • NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    • SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  • */

    +package com.jme3.asset;

    +

    +import com.jme3.asset.cache.AssetCache;

    +import com.jme3.post.FilterPostProcessor;

    +

    +/**
    • Used to load FilterPostProcessors which are not cached.
  • *
    • @author Andrew Wason
  • */

    +public class FilterKey extends AssetKey<FilterPostProcessor> {

    +
  • public FilterKey(String name) {
  •    super(name);<br />
    
  • }

    +
  • public FilterKey() {
  •    super();<br />
    
  • }

    +
  • @Override
  • public Class<? extends AssetCache> getCacheType(){
  •    // Do not cache filter processors<br />
    
  •    return null;<br />
    
  • }

    +}

    Index: engine/src/core/com/jme3/asset/DesktopAssetManager.java

    ===================================================================

    — engine/src/core/com/jme3/asset/DesktopAssetManager.java (revision 9679)

    +++ engine/src/core/com/jme3/asset/DesktopAssetManager.java (working copy)

    @@ -38,6 +38,7 @@

    import com.jme3.audio.AudioKey;

    import com.jme3.font.BitmapFont;

    import com.jme3.material.Material;

    +import com.jme3.post.FilterPostProcessor;

    import com.jme3.scene.Spatial;

    import com.jme3.shader.Shader;

    import com.jme3.shader.ShaderKey;

    @@ -372,6 +373,14 @@

    return loadModel(new ModelKey(name));

    }


  • public FilterPostProcessor loadFilter(FilterKey key){
  •    return (FilterPostProcessor) loadAsset(key);<br />
    
  • }

    +
  • public FilterPostProcessor loadFilter(String name){
  •    return loadFilter(new FilterKey(name));<br />
    
  • }

    +

    /**
  • Load a vertex/fragment shader combo.

    *

    [/patch]
4 Likes

Sounds valid, thanks!