Hi Ivan, thanks for sharing this. It can be usefull to get something rendered with as least code as possible. But for a performance critical application (which almost all opengl games/apps are) you must keep the multithreaded approach, or else you'll spend a lot of time refactoring your code. Take a look at the following link/video. It contains a lot of valueable informations and explains why the OpenGL api examples are multithreaded and why you should stick to the multithreaded approach. http://code.google.com/intl/de-DE/events/io/sessions/WritingRealTimeGamesAndroid.html
On 9 Okt., 11:39, Ivan Volosyuk <ivan.volos...@gmail.com> wrote: > I was using for sometime now OpenGL initialization code from Api demos > and it was quite hard to exchange events between View and Renderer. > So, I read pieces of documentation from GLES, EGL from jsr239 and > finally made the single threaded GL initialization code which is much > simpler than in ApiDemos. Here it is: > > import javax.microedition.khronos.egl.EGL10; > import javax.microedition.khronos.egl.EGLConfig; > import javax.microedition.khronos.egl.EGLContext; > import javax.microedition.khronos.egl.EGLDisplay; > import javax.microedition.khronos.egl.EGLSurface; > import javax.microedition.khronos.opengles.GL10; > > import android.app.Activity; > import android.os.Bundle; > import android.os.Handler; > import android.view.SurfaceHolder; > import android.view.SurfaceView; > import android.view.SurfaceHolder.Callback; > > public class MainActivitity extends Activity { > @Override > protected void onCreate(Bundle saved) { > super.onResume(); > final EGL10 egl = (EGL10) EGLContext.getEGL(); > final EGLDisplay eglDisplay = > egl.eglGetDisplay(EGL10.EGL_DEFAULT_DISPLAY); > int[] version = new int[2]; > egl.eglInitialize(eglDisplay, version); > > int[] configSpec = { > // EGL10.EGL_DEPTH_SIZE, 8, > EGL10.EGL_NONE > }; > > final EGLConfig[] config = new EGLConfig[1]; > int num_configs[] = new int[1]; > egl.eglChooseConfig(eglDisplay, configSpec, config, 1, num_configs); > final EGLContext eglContext = > egl.eglCreateContext(eglDisplay, config[0], EGL10.EGL_NO_CONTEXT, > null); > > // Setting up layouts and views > SurfaceView view = new SurfaceView(this); > setContentView(view); > > SurfaceHolder holder = view.getHolder(); > holder.setType(SurfaceHolder.SURFACE_TYPE_GPU); > final GL10 gl = (GL10) eglContext.getGL(); > final Handler handler = new Handler(); > > holder.addCallback(new Callback() { > private EGLSurface surface; > private Runnable painter; > > @Override > public void surfaceChanged(SurfaceHolder holder, int format, int > width, > int height) { > // initialize GL projection and other stuff > // gl.glMatrixMode(GL10.GL_PROJECTION); > // gl.glFrustumf(left, right, bottom, top, zNear, zFar); > // ... > painter = new Runnable() { > @Override > public void run() { > drawFrame(gl); > egl.eglSwapBuffers(eglDisplay, surface); > handler.post(this); > } > }; > handler.post(painter); > } > @Override > public void surfaceCreated(SurfaceHolder holder) { > surface = > egl.eglCreateWindowSurface(eglDisplay, config[0], holder, null); > egl.eglMakeCurrent(eglDisplay, surface, surface, eglContext); > } > @Override > public void surfaceDestroyed(SurfaceHolder holder) { > handler.removeCallbacks(painter); > } > }); > } > > private void drawFrame(GL10 gl) { > // Frame drawing... > long t = System.currentTimeMillis() % 10000; > gl.glClearColor(t / (float) 10000, t / (float) 10000 ,1 , 1); > gl.glClear(GL10.GL_COLOR_BUFFER_BIT); > } > > } --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en -~----------~----~----~----~------~----~------~--~---