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,您需要进行两项更改。在 ComponentSizeChooser 的构造函数中添加

EGL10.EGL_RENDERABLE_TYPE, 4, 

给超话。同样在 DefaultContextFactory 的 createContext 中,将 null 替换为

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

这应该让您启用 GL ES 2.0。

另外,在他的网页上,他有“setRenderMode(RENDERMODE_WHEN_DIRTY);” 我怀疑大多数人会希望这是“setRenderMode(RENDERMODE_CONTINUOUSLY);”

完整代码可在此处获得。

于 2012-07-07T22:19:35.037 回答