14ad1c1729d0ba95b5e96081759a96072e611df1fOwen Linpackage com.android.camera.ui;
24ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin
34ad1c1729d0ba95b5e96081759a96072e611df1fOwen Linimport javax.microedition.khronos.opengles.GL11;
44ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin
54ad1c1729d0ba95b5e96081759a96072e611df1fOwen Linabstract class BasicTexture implements Texture {
64ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin
74ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin    protected static final int UNSPECIFIED = -1;
84ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin
94ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin    public static final int STATE_UNLOADED = 0;
104ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin    public static final int STATE_LOADED = 1;
114ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin    public static final int STATE_ERROR = -1;
124ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin
134ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin    protected GL11 mGL;
144ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin
154ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin    protected int mId;
164ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin    protected int mState;
174ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin
184ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin    protected int mWidth = UNSPECIFIED;
194ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin    protected int mHeight = UNSPECIFIED;
204ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin
214ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin    protected int mTextureWidth;
224ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin    protected int mTextureHeight;
234ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin
244ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin    protected BasicTexture(GL11 gl, int id, int state) {
254ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin        mGL = gl;
264ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin        mId = id;
274ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin        mState = state;
284ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin    }
294ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin
304ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin    protected BasicTexture() {
314ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin        this(null, 0, STATE_UNLOADED);
324ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin    }
334ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin
344ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin    protected void setSize(int width, int height) {
354ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin        mWidth = width;
364ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin        mHeight = height;
374ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin    }
384ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin
394ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin    /**
404ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin     * Sets the size of the texture. Due to the limit of OpenGL, the texture
414ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin     * size must be of power of 2, the size of the content may not be the size
424ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin     * of the texture.
434ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin     */
444ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin    protected void setTextureSize(int width, int height) {
454ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin        mTextureWidth = width;
464ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin        mTextureHeight = height;
474ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin    }
484ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin
494ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin    public int getId() {
504ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin        return mId;
514ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin    }
524ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin
534ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin    public int getWidth() {
544ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin        return mWidth;
554ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin    }
564ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin
574ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin    public int getHeight() {
584ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin        return mHeight;
594ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin    }
604ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin
614ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin    public void deleteFromGL() {
624ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin        if (mState == STATE_LOADED) {
634ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin            mGL.glDeleteTextures(1, new int[]{mId}, 0);
644ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin        }
654ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin        mState = STATE_UNLOADED;
664ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin    }
674ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin
684ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin    public void draw(GLRootView root, int x, int y) {
694ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin        root.drawTexture(this, x, y, mWidth, mHeight);
704ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin    }
714ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin
724ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin    public void draw(GLRootView root, int x, int y, int w, int h) {
734ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin        root.drawTexture(this, x, y, w, h);
744ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin    }
754ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin
764ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin    abstract protected boolean bind(GLRootView root, GL11 gl);
774ad1c1729d0ba95b5e96081759a96072e611df1fOwen Lin}
78