• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2009 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  * This is a small port of the "San Angeles Observation" demo
17  * program for OpenGL ES 1.x. For more details, see:
18  *
19  *    http://jet.ro/visuals/san-angeles-observation/
20  *
21  * This program demonstrates how to use a GLSurfaceView from Java
22  * along with native OpenGL calls to perform frame rendering.
23  *
24  * Touching the screen will start/stop the animation.
25  *
26  * Note that the demo runs much faster on the emulator than on
27  * real devices, this is mainly due to the following facts:
28  *
29  * - the demo sends bazillions of polygons to OpenGL without
30  *   even trying to do culling. Most of them are clearly out
31  *   of view.
32  *
33  * - on a real device, the GPU bus is the real bottleneck
34  *   that prevent the demo from getting acceptable performance.
35  *
36  * - the software OpenGL engine used in the emulator uses
37  *   the system bus instead, and its code rocks :-)
38  *
39  * Fixing the program to send less polygons to the GPU is left
40  * as an exercise to the reader. As always, patches welcomed :-)
41  */
42 package com.example.SanAngeles;
43 
44 import javax.microedition.khronos.egl.EGLConfig;
45 import javax.microedition.khronos.opengles.GL10;
46 
47 import android.app.Activity;
48 import android.content.Context;
49 import android.opengl.GLSurfaceView;
50 import android.os.Bundle;
51 import android.view.MotionEvent;
52 
53 public class DemoActivity extends Activity {
54     @Override
onCreate(Bundle savedInstanceState)55     protected void onCreate(Bundle savedInstanceState) {
56         super.onCreate(savedInstanceState);
57         mGLView = new DemoGLSurfaceView(this);
58         setContentView(mGLView);
59     }
60 
61     @Override
onPause()62     protected void onPause() {
63         super.onPause();
64         mGLView.onPause();
65     }
66 
67     @Override
onResume()68     protected void onResume() {
69         super.onResume();
70         mGLView.onResume();
71     }
72 
73     private GLSurfaceView mGLView;
74 
75     static {
76         System.loadLibrary("sanangeles");
77     }
78 }
79 
80 class DemoGLSurfaceView extends GLSurfaceView {
DemoGLSurfaceView(Context context)81     public DemoGLSurfaceView(Context context) {
82         super(context);
83         mRenderer = new DemoRenderer();
84         setRenderer(mRenderer);
85     }
86 
onTouchEvent(final MotionEvent event)87     public boolean onTouchEvent(final MotionEvent event) {
88         if (event.getAction() == MotionEvent.ACTION_DOWN) {
89             nativeTogglePauseResume();
90         }
91         return true;
92     }
93 
94    @Override
onPause()95     public void onPause() {
96         super.onPause();
97         nativePause();
98     }
99 
100    @Override
onResume()101     public void onResume() {
102         super.onResume();
103         nativeResume();
104     }
105 
106 
107     DemoRenderer mRenderer;
108 
nativePause()109     private static native void nativePause();
nativeResume()110     private static native void nativeResume();
nativeTogglePauseResume()111     private static native void nativeTogglePauseResume();
112 }
113 
114 class DemoRenderer implements GLSurfaceView.Renderer {
onSurfaceCreated(GL10 gl, EGLConfig config)115     public void onSurfaceCreated(GL10 gl, EGLConfig config) {
116         nativeInit();
117     }
118 
onSurfaceChanged(GL10 gl, int w, int h)119     public void onSurfaceChanged(GL10 gl, int w, int h) {
120         //gl.glViewport(0, 0, w, h);
121         nativeResize(w, h);
122     }
123 
onDrawFrame(GL10 gl)124     public void onDrawFrame(GL10 gl) {
125         nativeRender();
126     }
127 
nativeInit()128     private static native void nativeInit();
nativeResize(int w, int h)129     private static native void nativeResize(int w, int h);
nativeRender()130     private static native void nativeRender();
nativeDone()131     private static native void nativeDone();
132 }
133