content: package com.gamatechno.vrlib.plugins.hotspot;
  
  import android.content.Context;
  import android.net.Uri;
  import android.util.SparseArray;
  
  import com.gamatechno.vrlib.MD360Director;
  import com.gamatechno.vrlib.MDVRLibrary;
  import com.gamatechno.vrlib.model.MDHotspotBuilder;
  import com.gamatechno.vrlib.texture.MD360BitmapTexture;
  import com.gamatechno.vrlib.texture.MD360Texture;
  
  /**
   * Created by hzqiujiadi on 2017/4/12.
   * hzqiujiadi ashqalcn@gmail.com
   */
  
  public class MDSimpleHotspot extends MDAbsHotspot {
  
      private static final String TAG = "MDSimplePlugin";
  
      private SparseArray<Uri> uriList;
  
      private int mPendingTextureKey = 0;
  
      private int mCurrentTextureKey = 0;
  
      // plugin
      private MDVRLibrary.IImageLoadProvider provider;
  
      private MD360Texture texture;
  
      public MDSimpleHotspot(MDHotspotBuilder builder) {
          super(builder.builderDelegate);
          this.provider = builder.imageLoadProvider;
          this.uriList = builder.uriList;
      }
  
      @Override
      protected void initInGL(Context context) {
          super.initInGL(context);
  
          texture = new MD360BitmapTexture(new MDVRLibrary.IBitmapProvider() {
              @Override
              public void onProvideBitmap(MD360BitmapTexture.Callback callback) {
                  Uri uri = uriList.get(mCurrentTextureKey);
                  if (uri != null){
                      provider.onProvideBitmap(uri, callback);
                  }
              }
          });
          texture.create();
      }
  
      @Override
      public void renderer(int index, int width, int height, MD360Director director) {
          if (texture == null){
              return;
          }
  
          if (mPendingTextureKey != mCurrentTextureKey){
              mCurrentTextureKey = mPendingTextureKey;
              texture.notifyChanged();
          }
  
          texture.texture(program);
  
          if (texture.isReady()){
              super.renderer(index, width, height, director);
          }
      }
  
      public void useTexture(int key) {
          mPendingTextureKey = key;
      }
  }
  