1/*
2 * Copyright (C) 2010 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.replica.replicaisland;
18
19import javax.microedition.khronos.opengles.GL10;
20import javax.microedition.khronos.opengles.GL11;
21import javax.microedition.khronos.opengles.GL11Ext;
22
23/**
24 * An object wrapper for a pointer to the OpenGL context.  Note that the context is only valid
25 * in certain threads at certain times (namely, in the Rendering thread during draw time), and at
26 * other times getGL() will return null.
27 */
28public class OpenGLSystem extends BaseObject {
29
30    private static GL10 sGL;
31    private static int sLastBoundTexture;
32    private static int sLastSetCropSignature;
33
34    public OpenGLSystem() {
35        super();
36        sGL = null;
37    }
38
39    public OpenGLSystem(GL10 gl) {
40        sGL = gl;
41    }
42
43    public static final void setGL(GL10 gl) {
44        sGL = gl;
45        sLastBoundTexture = 0;
46        sLastSetCropSignature = 0;
47    }
48
49    public static final GL10 getGL() {
50        return sGL;
51    }
52
53    public static final void bindTexture(int target, int texture) {
54        if (sLastBoundTexture != texture) {
55            sGL.glBindTexture(target, texture);
56            sLastBoundTexture = texture;
57            sLastSetCropSignature = 0;
58        }
59    }
60
61    public static final void setTextureCrop(int[] crop) {
62        int cropSignature = 0;
63        cropSignature = (crop[0] + crop[1]) << 16;
64        cropSignature |= crop[2] + crop[3];
65
66        if (cropSignature != sLastSetCropSignature) {
67            ((GL11) sGL).glTexParameteriv(GL10.GL_TEXTURE_2D, GL11Ext.GL_TEXTURE_CROP_RECT_OES,
68                    crop, 0);
69            sLastSetCropSignature = cropSignature;
70        }
71    }
72
73    @Override
74    public void reset() {
75
76    }
77
78}
79