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);

等..

activity は SurfaceRenderer コンストラクターの最初のパラメーターで、ctx は 2 番目のパラメーターです。

これに対する解決策はありますか?

編集: 解決策を実装しようとしていますが、まだ問題があります!

これは私のレンダラーコンストラクターです:

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

    shaderlib = new ShaderLib(activity, ctx);
}

これは、アクティビティをシェーダー作成オブジェクトに転送するために使用され、最終的にこれを実行します:

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

利用可能な getcontext 関数はありません。作成しようとすると、このコマンドで nullpointer になるだけです。解決策はありますか?

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);
...

mWallpaperGLWallpaperServicerenderer クラスの custom のインスタンスです。これは私の壁紙のコードです。渡されたコンテキストをローカルmContextメンバーに設定することで、リソースにアクセスする必要がある場所ならどこでもこのコンテキストを使用できます。

于 2012-11-15T12:14:35.030 に答える