>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 = surfaceHolder;
>
>             // By default we don't get touch events, so enable them.
>             setTouchEventsEnabled(true);
>         }
>         @Override
>         public void onSurfaceChanged(SurfaceHolder holder, int format,
> int width, int height) {
>             super.onSurfaceChanged(holder, format, width, height);
>
>         }
>
>         @Override
>         public void onSurfaceCreated(SurfaceHolder holder) {
>             super.onSurfaceCreated(holder);
>
>         }
>
>         @Override
>         public void onSurfaceDestroyed(SurfaceHolder holder) {
>             super.onSurfaceDestroyed(holder);
>
>         }
>
>         @Override
>         public void onOffsetsChanged(float xOffset, float yOffset,
>                 float xStep, float yStep, int xPixels, int yPixels) {
>
>         }
>
>         /*
>          * Store the position of the touch event so we can use it for
> drawing later
>          */
>
>         @Override
>         public void onTouchEvent(MotionEvent event) {
>
>                 if (event.getAction() == MotionEvent.ACTION_MOVE) {
>                 mTouchX = event.getX();
>                 mTouchY = event.getY();
>             } else {
>                 mTouchX = -1;
>                 mTouchY = -1;
>             }
>
>                 super.onTouchEvent(event);
>         }
>
>         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);
>             }
>         }
>
>         }
>
>         @Override
>         public void onAccuracyChanged(Sensor sensor, int accuracy) {
>
>         }
>
>         @Override
>         public void onSensorChanged(SensorEvent event) {
>                 // TODO Auto-generated method stub
>                 Sensor mySensor = event.sensor;
>
>                 mValues[0] = event.values[0];
>                 mValues[1] = event.values[1];
>                 mValues[2] = event.values[2];
>
>         }
>
>                 }
>
>         Thanks for any analysis!
>
> I'm extending the code found 
> here:http://www.rbgrn.net/content/354-glsurfaceview-adapted-3d-live-wallpa...
>
> On Feb 14, 4:19 am, joshbeck <[email protected]> wrote:
>
> > I was afraid you might say that:
> > I've gone through and incorporated GLWallpaperService per his
> > instructions, but specifically I'm getting hung up here:
> > --QUOTE--
> > In your GLEngine subclass, instantiate your Renderer, configure it and
> > set it using setRenderer(Renderer) and setRenderMode(int).
> > --/QUOTE--
> > (http://www.rbgrn.net/content/354-glsurfaceview-adapted-3d-live-
> > wallpapers)
>
> > Logcat is throwing a null pointer exception at line 79 in
> > GLWallpaperService.java which reads as follows:
> >     ---LOGCAT ERROR--
> > @Override
> > public void onSurfaceCreated(SurfaceHolder holder) {
> > Log.d(TAG, "onSurfaceCreated()");
> > mGLThread.surfaceCreated(holder);     <--Right Here Line 79
> > super.onSurfaceCreated(holder);}
>
> >    ---END LOGCAT ERROR---
>
> > The following class works perfectly within an Activity for me:
> >                --BEGIN CLASS--
> >  public class OpenGLRenderer implements Renderer {
> >            //Should it be GLSurfaceView.Renderer? <--
>
> >         private Square square;
> >         private float angle = 45f;
> >         public OpenGLRenderer() {
>
> >                 square = new Square();
> >                 //I have a square class that defines verts and
> > such.
> >  }
>
> >         public void onSurfaceCreated(GL10 gl, EGLConfig config) {
> >                 --Clear the screen and prep it--
> >                 }
>
> >         public void onDrawFrame(GL10 gl) {
> >                 --This function draws and rotates my object--
> >         }
> > public void onSurfaceChanged(GL10 gl, int width, int height) {
>
> >                 --The code I have here also checks out in an Activity--
> >         }
> >     }
>
> >                      ---END CLASS---
>
> > -My Initial class extends GLWallpaperService --onCreate() as
> > follows:--
>
> >   public void onCreate() {
> >  GLSurfaceView mGLSurfaceView = new GLSurfaceView(this);
> >      //I have a feeling this is misplaced.
>
> > }
>
> > --My subclass extends GLEngine--
>
> > class CubeEngine extends GLEngine {
> >         private final Runnable mDrawCube = new Runnable() {
> >             public void run() {
> >                 //Does Nothing ATM
> >             }
> >         };
> >         private boolean mVisible;
>
> >         CubeEngine() {
> >             //Blank Constructor
> >         }
>
> >         @Override
> >         public void onCreate(SurfaceHolder surfaceHolder) {
> >             super.onCreate(surfaceHolder);
>
> >            mGLSurfaceView.setRenderer(new OpenGLRenderer());
> >                 //This setRenderer is what I need help with.
>
> >             // By default we don't get touch events, so enable them.
> >             setTouchEventsEnabled(true);
> >         }
>
> ...
>
> 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