1

我目前坚持使用opengl ES2制作实时背景。

在我的渲染器中,我想从资源文件夹中访问纹理和着色器,但我找不到这样做的方法。

我目前对此的尝试只会导致崩溃。

return new SurfaceRenderer((Activity) this.getApplicationContext(), WallpaperService.this);

它是我在苦苦挣扎的 SurfaceRenderer 构造函数中的第一个参数!

稍后这些变量将用于访问如下文件:

final int resVertex = activity.getResources().getIdentifier(input+"_vertexshader","raw", activity.getPackageName());

    int resID = activity.getResources().getIdentifier(path,"raw", activity.getPackageName());
    InputStream inputStream = activity.getResources().openRawResource(resID);

ETC..

其中activity是SurfaceRenderer构造函数中的第一个参数,而ctx是第二个!

有什么解决办法吗?

编辑:尝试实施解决方案,但我仍然遇到问题!

这是我的渲染器构造函数:

public SurfaceRenderer(GLWallpaperService activity, Context ctx) {
    this.activity = activity;
     cc = activity;

    shaderlib = new ShaderLib(activity, ctx);
}

用于将活动转发到我的着色器创建对象,最终运行:

inputStream = activity.getContext().getAssets().open(filename);

没有可用的 getcontext 函数,当我尝试创建一个时,我只得到一个空指针,在这个命令上,有什么解决方案吗?

4

2 回答 2

2

您可以将资源放在 Assets 文件夹中并使用 AssetManager 访问它。

于 2012-11-14T23:17:47.803 回答
1

GLWallpaperService可以用作上下文。创建渲染器时,您可以将GLWallpaperService实现传递给渲染器实例并使用它来访问/assets文件夹。

渲染器类的示例代码:

public BaseRenderer(Context context, IWallpaper wallpaper) {
    mContext = context;
    mWallpaper = wallpaper;
}

...
is = mWallpaper.getContext().getAssets().open(filename); 
...
is = mContext.getAssets().open(filename);
...

mWallpaperGLWallpaperService是渲染器类中自定义的一个实例。这是我的壁纸中的代码。通过将传递的上下文设置为本地mContext成员,您可以在需要访问资源的任何地方使用此上下文。

于 2012-11-15T12:14:35.030 回答