1104c45677660586026a7e74ef8c47d396403d50eMichael Jurka/*
2104c45677660586026a7e74ef8c47d396403d50eMichael Jurka * Copyright (C) 2010 The Android Open Source Project
3104c45677660586026a7e74ef8c47d396403d50eMichael Jurka *
4104c45677660586026a7e74ef8c47d396403d50eMichael Jurka * Licensed under the Apache License, Version 2.0 (the "License");
5104c45677660586026a7e74ef8c47d396403d50eMichael Jurka * you may not use this file except in compliance with the License.
6104c45677660586026a7e74ef8c47d396403d50eMichael Jurka * You may obtain a copy of the License at
7104c45677660586026a7e74ef8c47d396403d50eMichael Jurka *
8104c45677660586026a7e74ef8c47d396403d50eMichael Jurka *      http://www.apache.org/licenses/LICENSE-2.0
9104c45677660586026a7e74ef8c47d396403d50eMichael Jurka *
10104c45677660586026a7e74ef8c47d396403d50eMichael Jurka * Unless required by applicable law or agreed to in writing, software
11104c45677660586026a7e74ef8c47d396403d50eMichael Jurka * distributed under the License is distributed on an "AS IS" BASIS,
12104c45677660586026a7e74ef8c47d396403d50eMichael Jurka * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13104c45677660586026a7e74ef8c47d396403d50eMichael Jurka * See the License for the specific language governing permissions and
14104c45677660586026a7e74ef8c47d396403d50eMichael Jurka * limitations under the License.
15104c45677660586026a7e74ef8c47d396403d50eMichael Jurka */
16104c45677660586026a7e74ef8c47d396403d50eMichael Jurka
17104c45677660586026a7e74ef8c47d396403d50eMichael Jurkapackage com.android.gallery3d.glrenderer;
18104c45677660586026a7e74ef8c47d396403d50eMichael Jurka
19104c45677660586026a7e74ef8c47d396403d50eMichael Jurkaimport android.util.Log;
20104c45677660586026a7e74ef8c47d396403d50eMichael Jurka
21104c45677660586026a7e74ef8c47d396403d50eMichael Jurkaimport javax.microedition.khronos.opengles.GL11;
22104c45677660586026a7e74ef8c47d396403d50eMichael Jurka
23104c45677660586026a7e74ef8c47d396403d50eMichael Jurkapublic class RawTexture extends BasicTexture {
24104c45677660586026a7e74ef8c47d396403d50eMichael Jurka    private static final String TAG = "RawTexture";
25104c45677660586026a7e74ef8c47d396403d50eMichael Jurka
26104c45677660586026a7e74ef8c47d396403d50eMichael Jurka    private final boolean mOpaque;
27104c45677660586026a7e74ef8c47d396403d50eMichael Jurka    private boolean mIsFlipped;
28104c45677660586026a7e74ef8c47d396403d50eMichael Jurka
29104c45677660586026a7e74ef8c47d396403d50eMichael Jurka    public RawTexture(int width, int height, boolean opaque) {
30104c45677660586026a7e74ef8c47d396403d50eMichael Jurka        mOpaque = opaque;
31104c45677660586026a7e74ef8c47d396403d50eMichael Jurka        setSize(width, height);
32104c45677660586026a7e74ef8c47d396403d50eMichael Jurka    }
33104c45677660586026a7e74ef8c47d396403d50eMichael Jurka
34104c45677660586026a7e74ef8c47d396403d50eMichael Jurka    @Override
35104c45677660586026a7e74ef8c47d396403d50eMichael Jurka    public boolean isOpaque() {
36104c45677660586026a7e74ef8c47d396403d50eMichael Jurka        return mOpaque;
37104c45677660586026a7e74ef8c47d396403d50eMichael Jurka    }
38104c45677660586026a7e74ef8c47d396403d50eMichael Jurka
39104c45677660586026a7e74ef8c47d396403d50eMichael Jurka    @Override
40104c45677660586026a7e74ef8c47d396403d50eMichael Jurka    public boolean isFlippedVertically() {
41104c45677660586026a7e74ef8c47d396403d50eMichael Jurka        return mIsFlipped;
42104c45677660586026a7e74ef8c47d396403d50eMichael Jurka    }
43104c45677660586026a7e74ef8c47d396403d50eMichael Jurka
44104c45677660586026a7e74ef8c47d396403d50eMichael Jurka    public void setIsFlippedVertically(boolean isFlipped) {
45104c45677660586026a7e74ef8c47d396403d50eMichael Jurka        mIsFlipped = isFlipped;
46104c45677660586026a7e74ef8c47d396403d50eMichael Jurka    }
47104c45677660586026a7e74ef8c47d396403d50eMichael Jurka
48104c45677660586026a7e74ef8c47d396403d50eMichael Jurka    protected void prepare(GLCanvas canvas) {
49104c45677660586026a7e74ef8c47d396403d50eMichael Jurka        GLId glId = canvas.getGLId();
50104c45677660586026a7e74ef8c47d396403d50eMichael Jurka        mId = glId.generateTexture();
51104c45677660586026a7e74ef8c47d396403d50eMichael Jurka        canvas.initializeTextureSize(this, GL11.GL_RGBA, GL11.GL_UNSIGNED_BYTE);
52104c45677660586026a7e74ef8c47d396403d50eMichael Jurka        canvas.setTextureParameters(this);
53104c45677660586026a7e74ef8c47d396403d50eMichael Jurka        mState = STATE_LOADED;
54104c45677660586026a7e74ef8c47d396403d50eMichael Jurka        setAssociatedCanvas(canvas);
55104c45677660586026a7e74ef8c47d396403d50eMichael Jurka    }
56104c45677660586026a7e74ef8c47d396403d50eMichael Jurka
57104c45677660586026a7e74ef8c47d396403d50eMichael Jurka    @Override
58104c45677660586026a7e74ef8c47d396403d50eMichael Jurka    protected boolean onBind(GLCanvas canvas) {
59104c45677660586026a7e74ef8c47d396403d50eMichael Jurka        if (isLoaded()) return true;
60104c45677660586026a7e74ef8c47d396403d50eMichael Jurka        Log.w(TAG, "lost the content due to context change");
61104c45677660586026a7e74ef8c47d396403d50eMichael Jurka        return false;
62104c45677660586026a7e74ef8c47d396403d50eMichael Jurka    }
63104c45677660586026a7e74ef8c47d396403d50eMichael Jurka
64104c45677660586026a7e74ef8c47d396403d50eMichael Jurka    @Override
65104c45677660586026a7e74ef8c47d396403d50eMichael Jurka     public void yield() {
66104c45677660586026a7e74ef8c47d396403d50eMichael Jurka         // we cannot free the texture because we have no backup.
67104c45677660586026a7e74ef8c47d396403d50eMichael Jurka     }
68104c45677660586026a7e74ef8c47d396403d50eMichael Jurka
69104c45677660586026a7e74ef8c47d396403d50eMichael Jurka    @Override
70104c45677660586026a7e74ef8c47d396403d50eMichael Jurka    protected int getTarget() {
71104c45677660586026a7e74ef8c47d396403d50eMichael Jurka        return GL11.GL_TEXTURE_2D;
72104c45677660586026a7e74ef8c47d396403d50eMichael Jurka    }
73104c45677660586026a7e74ef8c47d396403d50eMichael Jurka}
74