首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在GLWallpaper服务中加载资源或资产

如何在GLWallpaper服务中加载资源或资产
EN

Stack Overflow用户
提问于 2012-10-19 06:36:22
回答 2查看 646关注 0票数 5

我正在尝试用OpenGL 壁纸服务开发一个安卓实时壁纸,我能够像马克·F·格拉在示例中那样创建活壁纸,但我想在壁纸上添加一些精灵动画。

我已经在另一个项目中创建了一个OpenGL ES精灵动画。我只想在现场壁纸项目中重现我的动画。

但在我的活壁纸项目中,我无法获得Context ,无法从资产或资源加载图像。

在使用glwallpaper 服务时,有关加载资源或资产文件的任何建议、示例代码或链接都将非常有用。

欢迎所有建议和/或示例代码。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-24 05:50:54

我们可以使用如下所示的上下文。

代码语言:javascript
运行
复制
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
EN

Stack Overflow用户

发布于 2012-10-24 04:25:01

将上下文从引擎传递到呈现器。然后,这里有一些加载资产的示例代码。也就是说,resourceID是您的R.drawable.xxx位图。我把它放在我制作的纹理地图集类中,所以有些东西可能不完全包含在这个方法中。例如,我可能使用的加载位图的选项将包括inscaled = false,但任何对您有用的选项都可以。例如,我还修改了它以删除错误处理。

代码语言:javascript
运行
复制
/**
 * 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;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12968658

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档