code: package org.sunflow.core.shader;
  
  import org.sunflow.SunflowAPI;
  import org.sunflow.core.ParameterList;
  import org.sunflow.core.ShadingState;
  import org.sunflow.core.Texture;
  import org.sunflow.core.TextureCache;
  import org.sunflow.image.Color;
  
  public class TexturedAmbientOcclusionShader extends AmbientOcclusionShader {
      private Texture tex;
  
      public TexturedAmbientOcclusionShader() {
          tex = null;
      }
  
      @Override
      public boolean update(ParameterList pl, SunflowAPI api) {
          String filename = pl.getString("texture", null);
          if (filename != null)
              tex = TextureCache.getTexture(api.resolveTextureFilename(filename), false);
          return tex != null && super.update(pl, api);
      }
  
      @Override
      public Color getBrightColor(ShadingState state) {
          return tex.getPixel(state.getUV().x, state.getUV().y);
      }
  }