2

GLSurfaceView.Renderer を実装し、Open GL ES 2.0 を使用するクラスがあり、標準アプリケーションとして完全に動作します。

ただし、これを拡張してライブ壁紙にしたいと思います。当然、WallPaperservice を拡張するサービス クラスと、WallpaperService.Engine を拡張するエンジン クラスがあります。

コードの通常のバージョンでは、私はただ行うことができます

mGLSView = new GLSurfaceView(this); // in the engine this becomes 'new GLSurfaceView(getBaseContext());'
mGLSView.setEGLContextClientVersion(2);
mGLSView.setRenderer(new myRenderer());
setContentView(mGLSView);

ただし、「エンジン」では setContentView を呼び出すことはできません。おそらく、何らかの形でサーフェスをGLSurfaceViewに渡す必要がありますが、その方法が本当にわかりません。私が見つけたすべての例またはチュートリアルは OpenGL 1 を使用しています。私はこれにまったく慣れていないため、それらを 2.0 に適応させる方法を完全に理解することはできません。

OpenGL ES 2.0 を使用したライブ壁紙の簡単な例を知っている人はいますか? または、どこで読むべきかについての良い指針はありますか?

ありがとう、

4

1 に答える 1

2

はい、わかった!http://www.rbgrn.net/content/354-glsurfaceview-adapted-3d-live-wallpapersのソースを使用する場合(そして、Robert Greenに感謝します!! )

いくつかの構文エラーを修正しなければならなかった理由が何であれ、これはEclipseの新しいバージョンか、オリジナルが作成されてからのものであると思われます。

ただし、OpenGL ES 2.0を有効にするには、2つの変更を加える必要があります。ComponentSizeChooserのコンストラクターで、

EGL10.EGL_RENDERABLE_TYPE, 4, 

スーパーコールへ。また、DefaultContextFactoryのcreateContextで、nullをに置き換えます

new int[] { 0x3098, 2, EGL10.EGL_NONE }

これで、GLES2.0が有効になっているはずです。

また、さらに、彼のWebページには、「setRenderMode(RENDERMODE_WHEN_DIRTY);」があります。ほとんどの場合、これを「setRenderMode(RENDERMODE_CONTINUOUSLY);」にしたいと思うでしょう。

完全なコードはこちらから入手できます。

于 2012-07-07T22:19:35.037 に答える