forget it, your code is fine, it call the surfacechanged right, passing good
values for width and height.
for obvious reasons, my sphere isn't restreched after a rotation (it does
approx 5% of the time only), but all initialization is done
in surfacechanged using passed width and height, it worked fine before, but
not anymore.
anyway the code on the blog look fine, i just had to declare the instanceId
var and cast a return value to Runnable to compile it.
i'm gonna publish a commentary with a link to your blog in the code, do you
want something special in it ?

2010/4/7 seb boyart <unix...@gmail.com>

> I use helixlauncher2 to rotate the desktop on n1.
>
> Le 7 avr. 2010 23:01, "Robert Green" <rbgrn....@gmail.com> a écrit :
>
>
> That's strange..
>
> First of all, how are you getting orientation changes on an N1?  I
> never found a way to get it to do that.
>
> I tested my latest code on www.rbgrn.net on both the N1 and Droid and
> both seem to be working well now.  It includes your wait-hack and my
> updates.
>
> On Apr 7, 3:57 pm, unixseb <unix...@gmail.com> wrote:
> > i'm currently using the code on your blog, i have an issue on N1, when
> > the orientation change, the surfacechanged function of the rendrerer
> > isn't called, so i can't reset the frustum to the correct window size.
> > i guess it's around the following code, i'm trying to fix it :
> >
> >                         if (needStart) {
> >                               tellRendererSurfaceCreated = true;
> >                                         changed = true;
> >                                 }
> >                                 if (changed) {
> >                                         gl = (GL10)
> mEglHelper.createSurface(mHolder);
> >                                         tellRendererSurfaceChanged =
> true;
> >                                 }
> >                                 if (tellRendererSurfaceCreated) {
> >                                         mRenderer.onSurfaceCreated(gl,
> mEglHelper.mEglConfig);
> >                                         tellRendererSurfaceCreated =
> false;
> >                                 }
> >                                 if (tellRendererSurfaceChanged) {
> >                                         mRenderer.onSurfaceChanged(gl, w,
> h);
> >                                         tellRendererSurfaceChanged =
> false;
> >                                 }
> >
> > On 7 avr, 22:32, unixseb <unix...@gmail.com> wrote:
> >
> >
> >
> > > i can't tell you if my code works for the droid (i dont own one) but
> > > it help fixing issues on the N1.
> > > anyway i still have issues, sometimes it looks like i have 2 opengl
> > > surfaces swapping from each other after a resume.
> > > i'm gonna implement your modifications and tell you the effect on the
> > > N1
> > > Thanks a lot for everything, my work would have never exists without
> > > yours ! (and sorry for my poor english ;) )
> >
> > > On 6 avr, 22:58, Robert Green <rbgrn....@gmail.com> wrote:
> >
> > > > That occasional lock-up started happening constantly to me.  I messed
> > > > around with a few things and found that the Droid really doesn't like
> > > > to have its Display and Context destroyed all the time.
> >
> > > > I modified the code so that it would reuse the display and context as
> > > > much as possible.  I looked through my GLES book and it doesn't say
> > > > explicitly that you should always destroy them when your surface
> > > > changes so I have to assume that it must be ok.  Even if it's not -
> > > > this works and it wasn't working before, so I'm using it.
> >
> > > > Here are the code modifications:
> >
> > > > In EglHelper:
> >
> > > >     public void start() {
> > > >         Log.d("EglHelper" + instanceId, "start()");
> > > >         if (mEgl == null) {
> > > >             Log.d("EglHelper" + instanceId, "getting new EGL");
> > > >             /*
> > > >              * Get an EGL instance
> > > >              */
> > > >             mEgl = (EGL10) EGLContext.getEGL();
> > > >         } else {
> > > >             Log.d("EglHelper" + instanceId, "reusing EGL");
> > > >         }
> >
> > > >         if (mEglDisplay == null) {
> > > >             Log.d("EglHelper" + instanceId, "getting new display");
> > > >             /*
> > > >              * Get to the default display.
> > > >              */
> > > >             mEglDisplay =
> > > > mEgl.eglGetDisplay(EGL10.EGL_DEFAULT_DISPLAY);
> > > >         } else {
> > > >             Log.d("EglHelper" + instanceId, "reusing display");
> > > >         }
> >
> > > >         if (mEglConfig == null) {
> > > >             Log.d("EglHelper" + instanceId, "getting new config");
> > > >             /*
> > > >              * We can now initialize EGL for that display
> > > >              */
> > > >             int[] version = new int[2];
> > > >             mEgl.eglInitialize(mEglDisplay, version);
> > > >             mEglConfig = mEGLConfigChooser.chooseConfig(mEgl,
> > > > mEglDisplay);
> > > >         } else {
> > > >             Log.d("EglHelper" + instanceId, "reusing config");
> > > >         }
> >
> > > >         if (mEglContext == null) {
> > > >             Log.d("EglHelper" + instanceId, "creating new context");
> > > >             /*
> > > >              * Create an OpenGL ES context. This must be done only
> > > > once, an OpenGL context is a somewhat heavy object.
> > > >              */
> > > >             mEglContext = mEGLContextFactory.createContext(mEgl,
> > > > mEglDisplay, mEglConfig);
> > > >             if (mEglContext == null || mEglContext ==
> > > > EGL10.EGL_NO_CONTEXT) {
> > > >                 throw new RuntimeException("createContext failed");
> > > >             }
> > > >         } else {
> > > >             Log.d("EglHelper" + instanceId, "reusing context");
> > > >         }
> >
> > > >         mEglSurface = null;
> > > >     }
> >
> > > > In GLThread:
> >
> > > >         private void stopEglLocked() {
> > > >             if (mHaveEgl) {
> > > >                 mHaveEgl = false;
> > > >                 mEglHelper.destroySurface();
> > > >                 sGLThreadManager.releaseEglSurface(this);
> > > >             }
> > > >         }
> >
> > > > Basically, you don't want a finish() in there.
> >
> > > > But we do need to finish somewhere so,
> >
> > > > At the end of guardedRun():
> >
> > > >             } finally {
> > > >                 /*
> > > >                  * clean-up everything...
> > > >                  */
> > > >                 synchronized (sGLThreadManager) {
> > > >                     // Log.d("GLThread" + getId(), "Finishing.");
> > > >                     stopEglLocked();
> > > >                     mEglHelper.finish();
> > > >                 }
> > > >             }
> > > >         }
> >
> > > > Then Finally in GLWallpaperService:
> >
> > > >         @Override
> > > >         public void onDestroy() {
> > > >             super.onDestroy();
> > > >             mGLThread.requestExitAndWait();
> > > >         }
> >
> > > > Of course you can remove any logging you don't want.
> >
> > > > The idea here is that we get to reuse the display and context on
> > > > orientation changes which seems to make the Droid happy.  I haven't
> > > > had a single crash since I switched to that, and I've probably
> > > > reoriented 100 times since then in testing.
> >
> > > > I'll update the post on my blog to contain all the current code.
> >
> > > > On Apr 6, 2:57 pm, Robert Green <rbgrn....@gmail.com> wrote:
> >
> > > > > By the way - things seemed good but I'm still having the occasional
> > > > > lock-up.  The last one caused the phone to lock up badly enough
> that I
> > > > > had to pull the battery :(
> >
> > > > > On Apr 6, 2:18 pm, Robert Green <rbgrn....@gmail.com> wrote:
> >
> > > > > > I'm in disbelief, but it works!  Why does that hack work?  Is it
> a
> > > > > > previous call to eglCreateWindowSurface which returns a bad value
> and
> > > > > > after that, cleaning up causes a bad state and the next call to
> create
> > > > > > window surface freezes?  I don't quite understand but I guess I
> never
> > > > > > checked the return value of that call (because it wasn't
> returning
> > > > > > when I was having problems, but maybe it was too late then :)).
> >
> > > > > > I tested and tested and tested again and this held up against all
> the
> > > > > > orientation changes I could possibly make.  Good work!  I'll
> update
> > > > > > the code I posted.
> >
> > > > > > BTW - I'm still seeing the occasional:
> > > > > > E/libEGL  ( 5769): eglChooseConfig:897 error 3005
> (EGL_BAD_CONFIG)
> > > > > > W/dalvikvm( 5769): threadid=13: thread exiting with uncaught
> exception
> > > > > > (group=0x4001b180)
> > > > > > E/AndroidRuntime( 5769): Uncaught handler: thread GLThread 7
> exiting
> > > > > > due to uncaught exception
> > > > > > E/AndroidRuntime( 5769): java.lang.IllegalArgumentException
> > > > > > E/AndroidRuntime( 5769):        at
> > > > > > com.google.android.gles_jni.EGLImpl.eglGetConfigAttrib(Native
> Method)
> > > > > > E/AndroidRuntime( 5769):        at android.opengl.EglHelper
> > > > > > $ComponentSizeChooser.findConfigAttrib(EglHelper.java:1007)
> > > > > > E/AndroidRuntime( 5769):        at android.opengl.EglHelper
> > > > > > $ComponentSizeChooser.chooseConfig(EglHelper.java:987)
> > > > > > E/AndroidRuntime( 5769):        at android.opengl.EglHelper
> > > > > > $BaseConfigChooser.chooseConfig(EglHelper.java:951)
> > > > > > E/AndroidRuntime( 5769):        at
> > > > > > android.opengl.EglHelper.start(EglHelper.java:127)
> > > > > > E/AndroidRuntime( 5769):        at android.opengl.EglHelper
> > > > > > $GLThread.guardedRun(EglHelper.java:421)
> > > > > > E/AndroidRuntime( 5769):        at android.opengl.EglHelper
> > > > > > $GLThread.run(EglHelper.java:358)
> >
> > > > > > I'm trying to track that one down but it's very hard to recreate.
>  It
> > > > > > likes to happen the first time you run a newly installed gl live
> > > > > > wallpaper but then it doesn't happen again for a while.
> >
> > > > > > Thanks guys for all your help!
> >
> > > > > > On Apr 6, 11:29 am, shaun <shashepp...@gmail.com> wrote:
> >
> > > > > > > Assuming I correctly identified the code that unixseb uses as
> the
> > > > > > > workaround/fix for orientation changes on Droid in Live
> Wallpaper with
> > > > > > > OpenGL, the following code is the same with the exception of
> > > > > > > recursion:
> >
> > > > > > >     public EGLSurface createWindowSurface(EGL10 egl, EGLDisplay
> > > > > > > display, EGLConfig config, Object nativeWindow) {
> > > > > > >         EGLSurface eglSurface = null;
> > > > > > >         while (eglSurface == null) {
> > > > > > >             try {
> > > > > > >                 eglSurface =
> egl.eglCreateWindowSurface(display,
> > > > > > > config, nativeWindow, null);
> > > > > > >             } catch (Throwable t) {
> > > > > > >             } finally {
> > > > > > >                 if (eglSurface == null) {
> > > > > > >                     try {
> > > > > > >                         Thread.sleep(10);
> > > > > > >                     } catch (InterruptedException t) {
> > > > > > >                     }
> > > > > > >                 }
> > > > > > >             }
> >
> > > > > > >         }
> > > > > > >         return eglSurface;
> > > > > > >     }
> >
> > > > > > > I'd like to know if unixseb's fix works for others.  I still
> cannot
> > > > > > > test.
> >
> > > > > > > On Apr 6, 11:00 am, Ralf Schneider <li...@gestaltgeber.com>
> wrote:
> >
> > > > > > > > I'm also interested in this topic. I got an 404 on the link:
> This seems to
> > > > > > > > work:
> >
> > > > > > > >http://code.google.com/p/earth-live-wallpaper/
> >
> > > > > > > > Thank you for sharing your code!
> >
> > > > > > > > 2010/4/6 unixseb <unix...@gmail.com>
> >
> > > > > > > > > have a look at the svn repository on
> >
> > ...
> >
> > read more »
>
> --
> 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<android-developers%2bunsubscr...@googlegroups.com>
> For more options, visit this group at
> http://groups.google.com/group/android-developers?hl=en
>
> To unsubscribe, reply using "remove me" as the subject.
>
>


-- 
/¯¯¯¯/|¯¯¯||¯¯¯¯¯¯¯||¯¯¯¯|\¯¯¯\
\____\|___||      ¯¯|¯ |       |/     /
|¯¯¯¯|\  ¯¯\|      '¯¯¯'||       |\     \
|____|/___/|_______||____|/___/

-- 
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

Reply via email to