我正在尝试用OpenGL
壁纸服务开发一个安卓实时壁纸,我能够像马克·F·格拉在示例中那样创建活壁纸,但我想在壁纸上添加一些精灵动画。
我已经在另一个项目中创建了一个OpenGL ES
精灵动画。我只想在现场壁纸项目中重现我的动画。
但在我的活壁纸项目中,我无法获得Context
,无法从资产或资源加载图像。
在使用glwallpaper
服务时,有关加载资源或资产文件的任何建议、示例代码或链接都将非常有用。
欢迎所有建议和/或示例代码。
发布于 2012-10-24 05:50:54
我们可以使用如下所示的上下文。
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()
,您可以获得项目中“资源”文件夹中的文件。
发布于 2012-10-24 04:25:01
将上下文从引擎传递到呈现器。然后,这里有一些加载资产的示例代码。也就是说,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;
}
https://stackoverflow.com/questions/12968658
复制相似问题