2012-10-19 6 views
5

Sto cercando di sviluppare un Android live wallpaper usando OpenGL servizio di carta da parati, sono in grado di creare live wallpaper come in questo example da Mark F Guerra Ma voglio aggiungere qualche sprite animazione per il mio sfondo.Come caricare risorse o beni in servizio GLWallpaper

Ho già creato un'animazione sprite OpenGL ES in un altro progetto. Voglio solo ricreare la mia animazione nel progetto live wallpaper.

Ma nel mio progetto live wallpaper io sono non in grado di ottenere Context e caricare le mie immagini da attività o risorse

Eventuali suggerimenti o codici di esempio o linkare circa resourses di carico o file di risorse durante l'utilizzo di glwallpaper servizio sarà molto utile.

Tutti i suggerimenti e/o codici di esempio sono i benvenuti.

risposta

1

Possiamo utilizzare il contesto come mostrato di seguito ..

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

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

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

Invece di this possiamo utilizzare getAssets() o getResources() come parametro renderer.
Se si utilizza getAssets() è possibile ottenere i file salvati nella cartella delle risorse e utilizzando getResources() è possibile ottenere i file posizionati nella cartella delle risorse nel progetto.

1

Passa il contesto dal tuo motore al tuo renderer. Quindi, ecco alcuni esempi di codice per caricare la risorsa. ID risorsa è la bitmap R.Drawable.xxx. Ho questo all'interno di una classe di texture atlante che ho creato, quindi alcune cose potrebbero non essere completamente contenute nel metodo. Ad esempio, le opzioni che potrei usare per caricare la bitmap includeranno inscaled = false, ma qualunque cosa funzioni per te. Ho anche modificato questo per rimuovere la mia gestione degli errori, per esempio.

/** 
* 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; 
} 
Problemi correlati