1919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich/*
2919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich * Copyright (C) 2009 The Android Open Source Project
3919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich *
4919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich * Licensed under the Apache License, Version 2.0 (the "License");
5919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich * you may not use this file except in compliance with the License.
6919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich * You may obtain a copy of the License at
7919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich *
8919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich *      http://www.apache.org/licenses/LICENSE-2.0
9919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich *
10919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich * Unless required by applicable law or agreed to in writing, software
11919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich * distributed under the License is distributed on an "AS IS" BASIS,
12919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich * See the License for the specific language governing permissions and
14919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich * limitations under the License.
15919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich */
16919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich
17919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevichpackage com.android.gljni;
18919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich/*
19919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich * Copyright (C) 2008 The Android Open Source Project
20919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich *
21919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich * Licensed under the Apache License, Version 2.0 (the "License");
22919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich * you may not use this file except in compliance with the License.
23919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich * You may obtain a copy of the License at
24919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich *
25919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich *      http://www.apache.org/licenses/LICENSE-2.0
26919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich *
27919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich * Unless required by applicable law or agreed to in writing, software
28919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich * distributed under the License is distributed on an "AS IS" BASIS,
29919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
30919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich * See the License for the specific language governing permissions and
31919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich * limitations under the License.
32919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich */
33919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich
34919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich
35919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevichimport android.content.Context;
36919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevichimport android.opengl.GLSurfaceView;
37919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevichimport android.util.AttributeSet;
38919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevichimport android.util.Log;
39919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevichimport android.view.KeyEvent;
40919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevichimport android.view.MotionEvent;
41919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich
42919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevichimport javax.microedition.khronos.egl.EGL10;
43919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevichimport javax.microedition.khronos.egl.EGLConfig;
44919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevichimport javax.microedition.khronos.opengles.GL10;
45919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich/**
46919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich * An implementation of SurfaceView that uses the dedicated surface for
47919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich * displaying an OpenGL animation.  This allows the animation to run in a
48919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich * separate thread, without requiring that it be driven by the update mechanism
49919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich * of the view hierarchy.
50919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich *
51919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich * The application-specific rendering code is delegated to a GLView.Renderer
52919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich * instance.
53919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich */
54919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevichclass GLJNIView extends GLSurfaceView {
55919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich    GLJNIView(Context context) {
56919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich        super(context);
57919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich        init();
58919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich    }
59919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich
60919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich    public GLJNIView(Context context, AttributeSet attrs) {
61919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich        super(context, attrs);
62919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich        init();
63919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich    }
64919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich
65919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich    private void init() {
66919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich        setRenderer(new Renderer());
67919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich    }
68919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich
69919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich    private class Renderer implements GLSurfaceView.Renderer {
70919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich        private static final String TAG = "Renderer";
71919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich        public void onDrawFrame(GL10 gl) {
72919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich            GLJNILib.step();
73919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich        }
74919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich
75919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich        public void onSurfaceChanged(GL10 gl, int width, int height) {
76919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich            GLJNILib.init(width, height);
77919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich        }
78919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich
79919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich        public void onSurfaceCreated(GL10 gl, EGLConfig config) {
80919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich            // Do nothing.
81919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich        }
82919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich    }
83e5810d1f98557cbcf0f533215b1d76724b182e79Jack Palevich
84e5810d1f98557cbcf0f533215b1d76724b182e79Jack Palevich    @Override
85e5810d1f98557cbcf0f533215b1d76724b182e79Jack Palevich    public boolean onKeyDown(int keyCode, KeyEvent event) {
86e5810d1f98557cbcf0f533215b1d76724b182e79Jack Palevich        GLJNILib.changeBackground();
87e5810d1f98557cbcf0f533215b1d76724b182e79Jack Palevich        return true;
88e5810d1f98557cbcf0f533215b1d76724b182e79Jack Palevich    }
89919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich}
90919583553781f1e1885fa17f76d54008ebeca3c1Jack Palevich
91