2012-10-19 4 views
5

Ich versuche, ein Android Live Wallpaper mit OpenGL Tapete Service zu entwickeln, ich bin in der Lage Live-Wallpaper zu erstellen, wie in diesen example von Mark F Guerra Aber ich mag einige Sprite hinzufügen Animation zu meinem Hintergrundbild.Wie stehenden Mittel und Ressourcen in GLWallpaper Dienst laden

Ich habe bereits eine Spriteanimation OpenGL ES in einem anderen Projekt erstellt. Ich möchte nur meine Animation im Live Wallpaper Projekt neu erstellen.

Aber in meinem Live-Wallpaper project i bin nicht in der Lage Context zu bekommen und meine Bilder von Vermögenswerten oder Ressourcen laden

Alle Vorschläge oder Probe-Codes oder Link über Laden resourses oder Asset-Dateien während glwallpaper mit Service wird sehr hilfreich sein.

Alle Vorschläge und/oder Beispielcodes sind willkommen.

Antwort

1

Wir können den Kontext verwenden, wie unten dargestellt ..

in wallpaper service class: 
------------------- 
renderer = new GlRenderer(this); 

in renderer class: 
---------------- 
private Context context; 

public GlRenderer(Context context) { 
this.context = context; 

Statt this wir getAssets() oder getResources() als Parameter Renderer verwenden können.
Wenn Sie getAssets() verwenden, können Sie die im Ordner "Assets" gespeicherten Dateien abrufen, und indem Sie getResources() verwenden, können Sie die Dateien im Ressourcenordner Ihres Projekts ablegen.

1

Übergeben Sie den Kontext von Ihrer Engine an Ihren Renderer. Dann ist hier ein Beispielcode, um das Asset zu laden. d. h. resourceID ist Ihre R.drawable.xxx-Bitmap. Ich habe dies in einer Textur-Atlas-Klasse, die ich gemacht habe, so dass einige Dinge nicht vollständig in der Methode enthalten sein könnten. Zum Beispiel würde die Option, die ich zum Laden der Bitmap verwenden könnte, inscaled = false enthalten, aber was auch immer für Sie funktioniert. Ich habe das auch modifiziert, um zum Beispiel meine Fehlerbehandlung zu entfernen.

/** 
* Load the resource and push it to the gpu memory, setup default values 
* @param gl 
* @param context 
* @param resourceID 
* @return glTextureID 
* 
*/ 
public int loadFromContext(GL10 gl, Context context, int resourceID) { 
    mResourceID = resourceID; 
    Bitmap bmp = BitmapFactory.decodeResource(context.getResources(), resourceID, sBitmapOptions); 
    sourceWidth = bmp.getWidth(); 
    sourceHeight = bmp.getHeight(); 
    gl.glGenTextures(1, mGLTextures, 0); 
    mGLTextureID = mGLTextures[0]; 

    // bind and set min and mag scaling to bilinear 
    gl.glBindTexture(GL10.GL_TEXTURE_2D, mGLTextureID); 
    gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR); 
    gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR); 

    // repeat by default 
    gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S, GL10.GL_REPEAT); 
    gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, GL10.GL_REPEAT); 

    // upload bmp to video memory 
    GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bmp, 0); 

    // check error 
    int error = gl.glGetError(); 
    if (error != GL10.GL_NO_ERROR) { 
     // cleanup 
     bmp.recycle(); 
     bmp = null; 
     mLoaded = false; 
      // error handling here 
    } else { 

     // unbind. 
     gl.glBindTexture(GL10.GL_TEXTURE_2D, 0); 
     bmp.recycle(); 
     bmp = null; 
     mLoaded = true; 
     mDirty = true; 

     } 
     return mGLTextureID; 
}