I can see that now and I thank you for the response.
Really, your directions were very clear and your GL service
is incredible. I hope to see it incorporated in the official 2.2 API.
You deserve it, and I thank you!

Nancy, thanks also. --Your directions are what I was able
to follow in order to fix my setup. Very talented.

I'm a hack at this stuff, and the information I gleaned from this
fix was just what I needed. --Great knowledge!
(Believe it or not, I'm actually trying to teach this stuff at the 8th
grade level)

http://www.neisd.net/ComRel/News/Krueger_Smartphone_10.htm
(That's my class)

I can fire off basic intents and work with the hardware on the phone
fairly competently, but OpenGL is new. Now I can do a couple things:

1.) Play with polygons

2.) Teach the students pictured in that article to play with polygons
based
on the template I now have. They'll love it!


Thanks again!
Josh Beck
Northeast ISD
http://www.linuxclassroom.com


On Feb 14, 3:25 pm, Robert Green <[email protected]> wrote:
> The problem that you were having is that you weren't creating the
> engine in the right spot and then in the engine, you need to be
> setting the renderer in the constructor.
>
> The big difference between this and GLSurfaceView is that all of your
> traditional "Activity" or "View" code goes into your Engine, not into
> the Service.  All the service really needs to do is create engines.
> Engines do everything else.  Follow the structure I posted and you
> should be golden.
>
> On Feb 14, 3:18 pm, Robert Green <[email protected]> wrote:
>
>
>
> > I guess I really should have posted an example, huh?  Here's the
> > structure that works:
>
> > public class MyWallpaperService extends GLWallpaperService {
> >   public MyWallpaperService() {
> >     super();
> >   }
>
> >   public Engine onCreateEngine() {
> >     MyEngine engine = new MyEngine();
> >     return engine;
> >   }
>
> >   // prefs and sensor interface is optional, just showing that this is
> > where you do all of that - everything that would normally be in an
> > activity is in here.
> >   class MyEngine extends GLEngine implements
> > SharedPreferences.OnSharedPreferenceChangeListener,
> > SensorEventListener {
> >     MyRenderer renderer;
> >     public MyEngine() {
> >       super();
> >       // handle prefs, other initialization
> >       renderer = new MyRenderer();
> >       setRenderer(renderer);
> >       setRenderMode(RENDERMODE_WHEN_DIRTY);
> >   }
>
> >   public void onDestroy() {
> >     super.onDestroy();
> >     if (renderer != null) {
> >       renderer.release(); // assuming yours has this method - it
> > should!
> >     }
> >     renderer = null;
>
> > }
>
> > On Feb 14, 11:52 am, Lance Nanek <[email protected]> wrote:
>
> > > >public GLSurfaceView mGLSurfaceView;
> > > ...
> > > >mGLSurfaceView = new GLSurfaceView(this);
> > > ...
> > > >mGLSurfaceView = new GLSurfaceView(MyLiveWallpaper.this);
>
> > > Remove the lines above. Any use of GLSurfaceView in this is wrong.
>
> > > >public Engine onCreateEngine() {
> > > >return new GLEngine();
> > > >}
>
> > > You are supposed to return an instance of your subclass of GLEngine
> > > here, "new CubeEngine()" in your case.
>
> > > >public class OpenGLRenderer implements GLSurfaceView.Renderer {
>
> > > You should be implementing GLWallpaperService.Renderer, not
> > > GLSurfaceView.Renderer.
>
> > > >private final Runnable mDrawCube = new Runnable() {
> > > >public void run() {
> > > >drawFrame();
> > > >// CHECK OUT drawFrame() --Am I doing things correctly there?
> > > >}
> > > >};
>
> > > Remove all of the above.
>
> > > >mGLSurfaceView.setRenderer(new OpenGLRenderer());
> > > >mGLSurfaceView.setRenderMode(RENDERMODE_CONTINUOUSLY);
>
> > > These should be called on GLEngine, which you are subclassing. They
> > > should look like this:
> > > setRenderer(new OpenGLRenderer());
> > > setRenderMode(RENDERMODE_CONTINUOUSLY);
>
> > > >void drawFrame() {
> > > >final SurfaceHolder holder = getSurfaceHolder();
>
> > > >Canvas c = null;
> > > >try {
> > > >c = holder.lockCanvas();
> > > >if (c != null) {
> > > >// draw something
> > > >}
> > > >} finally {
> > > >if (c != null)
> > > >holder.unlockCanvasAndPost(c);
> > > >}
>
> > > >// Reschedule the next redraw
> > > >mHandler.removeCallbacks(mDrawCube);
> > > >if (mVisible) {
> > > >mHandler.postDelayed(mDrawCube, 1000 / 25);
> > > >}
> > > >}
>
> > > Remove all of the above.
>
> > > On Feb 14, 10:47 am, joshbeck <[email protected]> wrote:
>
> > > > I'm going to post my entire source code as it stands right now in the
> > > > hope that someone with more experience than I can
> > > > get me pointed in the right direction. I've been trying lots of
> > > > different things. Feel free to use caps lock when expressing
> > > > discontent
> > > > with my code :')
>
> > > > /*
> > > >  * Copyright (C) 2009 The Android Open Source Project
> > > >  *
> > > >  * Licensed under the Apache License, Version 2.0 (the "License");
> > > >  * you may not use this file except in compliance with the License.
> > > >  * You may obtain a copy of the License at
> > > >  *
> > > >  *      http://www.apache.org/licenses/LICENSE-2.0
> > > >  *
> > > >  * Unless required by applicable law or agreed to in writing, software
> > > >  * distributed under the License is distributed on an "AS IS" BASIS,
> > > >  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> > > > implied.
> > > >  * See the License for the specific language governing permissions and
> > > >  * limitations under the License.
> > > >  */
>
> > > > package com.MyLiveWallpaper;
>
> > > > imports are all square. --Not included:
>
> > > > public class MyLiveWallpaper extends GLWallpaperService implements
> > > > SensorEventListener  {
>
> > > >     private final Handler mHandler = new Handler();
> > > >     SensorManager sm = null;
>
> > > >     private static final String TAG = "Compass";
>
> > > >     private final Paint mPaint = new Paint();
> > > >     private float mTouchX = -1;
> > > >     private float mTouchY = -1;
>
> > > >     public GLSurfaceView mGLSurfaceView;
>
> > > >     private float mOffset;
>
> > > >     @Override
> > > >     public void onCreate() {
> > > >         super.onCreate();
> > > >         sm = (SensorManager) getSystemService(SENSOR_SERVICE);
> > > >         sm.registerListener(this,
> > > > sm.getDefaultSensor(Sensor.TYPE_ORIENTATION) ,
> > > > SensorManager.SENSOR_DELAY_GAME);
> > > >       mGLSurfaceView = new GLSurfaceView(this);
> > > >          //Do I need this here?
>
> > > >     }
>
> > > >     @Override
> > > >     public void onDestroy() {
> > > >         super.onDestroy();
> > > >     }
>
> > > >     @Override
> > > >     public Engine onCreateEngine() {
> > > >         return new GLEngine();
> > > >     }
> > > >  // THE CLASS BELOW THIS WORKS IN AN ACTIVITY
> > > >     public class OpenGLRenderer implements GLSurfaceView.Renderer {
> > > >         private Square square;
> > > >         private float angle = 45f;
> > > >         public OpenGLRenderer() {
> > > >                 // Initialize our square.
> > > >                 square = new Square();
> > > >         }
> > > >         /*
> > > >          * (non-Javadoc)
> > > >          *
> > > >          * @see
> > > >          *
> > > > android.opengl.GLSurfaceView.Renderer#onSurfaceCreated(javax.microedition
> > > >          * .khronos.opengles.GL10,
> > > > javax.microedition.khronos.egl.EGLConfig)
> > > >          */
> > > >         public void onSurfaceCreated(GL10 gl, EGLConfig config) {
>
> > > >                 gl.glClearColor(0.0f, 0.0f, 0.0f, 0.5f);
>
> > > >                 gl.glShadeModel(GL10.GL_SMOOTH);
>
> > > >                 gl.glClearDepthf(1.0f);
>
> > > >                 gl.glEnable(GL10.GL_DEPTH_TEST);
>
> > > >                 gl.glDepthFunc(GL10.GL_LEQUAL);
>
> > > >                 gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, 
> > > > GL10.GL_NICEST);
>
> > > >         }
>
> > > >         /*
> > > >          * (non-Javadoc)
> > > >          *
> > > >          * @see
> > > >          *
> > > > android.opengl.GLSurfaceView.Renderer#onDrawFrame(javax.microedition.
> > > >          * khronos.opengles.GL10)
> > > >          */
> > > >         public void onDrawFrame(GL10 gl) {
>
> > > >                 gl.glClear(GL10.GL_COLOR_BUFFER_BIT | 
> > > > GL10.GL_DEPTH_BUFFER_BIT);
>
> > > >                 gl.glLoadIdentity();
>
> > > >                 // Translates 4 units into the screen.
> > > >                 gl.glTranslatef(0, 0, -4);
> > > >                 //
>
> > > >                 gl.glPushMatrix();
> > > >                 gl.glRotatef(angle, 0.0f, 0.0f, 1.0f);
>
> > > >                 gl.glColor4f(0.5f, 0.5f, 1.0f, 1.0f);
>
> > > >                 square.draw(gl);
> > > >                 gl.glPopMatrix();
>
> > > >                 angle++;
> > > >         }
>
> > > >         /*
> > > >          * (non-Javadoc)
> > > >          *
> > > >          * @see
> > > >          *
> > > > android.opengl.GLSurfaceView.Renderer#onSurfaceChanged(javax.microedition
> > > >          * .khronos.opengles.GL10, int, int)
> > > >          */
> > > >         public void onSurfaceChanged(GL10 gl, int width, int height) {
>
> > > >                 gl.glViewport(0, 0, width, height);
>
> > > >                 gl.glMatrixMode(GL10.GL_PROJECTION);
>
> > > >                 gl.glLoadIdentity();
>
> > > >                 GLU.gluPerspective(gl, 45.0f, (float) width / (float) 
> > > > height,
> > > > 0.1f,
> > > >                                 100.0f);
>
> > > >                 gl.glMatrixMode(GL10.GL_MODELVIEW);
>
> > > >                 gl.glLoadIdentity();
> > > >         }
> > > >     }
>
> > > >     class CubeEngine extends GLEngine {
> > > >          private SurfaceHolder mSurfaceHolder;
>
> > > >         private long mStartTime;
> > > >         private float mCenterX;
> > > >         private float mCenterY;
>
> > > >         private final Runnable mDrawCube = new Runnable() {
> > > >             public void run() {
> > > >                 drawFrame();
> > > > //CHECK OUT drawFrame() --Am I doing things correctly there?
>
> > > >             }
> > > >         };
> > > >         private boolean mVisible;
>
> > > >         CubeEngine() {
>
> > > >                  mGLSurfaceView = new 
> > > > GLSurfaceView(MyLiveWallpaper.this);
> > > >                     //The Line Above this is probably horribly
> > > > incorrect.
> > > >                  mGLSurfaceView.setRenderer(new OpenGLRenderer());
>
> > > > mGLSurfaceView.setRenderMode(RENDERMODE_CONTINUOUSLY);
> > > >             //I'm not sure this is the correct place
> > > >            //Should this go in OnCreate()?
>
> > > >         }
>
> > > >         @Override
> > > >         public void onCreate(SurfaceHolder surfaceHolder) {
> > > >             super.onCreate(surfaceHolder);
> > > >             this.mSurfaceHolder =...
>
> 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 [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to