2012-10-19 18 views
5

我試圖開發使用OpenGL壁紙服務一個Android動態壁紙,我能創造動態壁紙在本example通過標記點F格拉但我想添加一些精靈動畫到我的壁紙。如何加載資源或資產GLWallpaper服務

我已經在另一個項目中創建了一個OpenGL ES精靈動畫。我只想在動態壁紙項目中重新創建動畫。

但在我的生活壁紙的項目,我在使用glwallpaper無法取得Context,並從資產或資源

任何建議或示例代碼或鏈接載入我的圖片加載資源的開發或資產文件服務將非常有幫助。

歡迎您提供所有建議和/或樣品代碼。

回答

1

我們可以使用上下文,如下圖所示..

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

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

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

相反的this我們可以使用getAssets()getResources()作爲參數傳遞給渲染器。
使用getAssets()時,您可以獲取保存在資產文件夾中的文件,並使用getResources()可以獲取放置在項目資源文件夾中的文件。

1

將上下文從引擎傳遞到渲染器。然後,下面是一些示例代碼來加載資產。即resourceID是你的R.drawable.xxx位圖。我在我製作的一個紋理地圖集類中有這個內容,所以這個方法中可能沒有完全包含一些內容。例如,我可能用來加載位圖的選項包括inscaled = false,但無論對你有用。我也修改了這個例子來刪除我的錯誤處理。

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