我有一个实现GLSurfaceView.Renderer并使用Open GL ES 2.0的类,并且可以作为标准应用程序使用。
然而,我想扩展它,以便它的动态壁纸。 Naturyally我有一个服务类,它放弃了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的动态壁纸的简单示例?还是一个关于在哪里读取的好指针?
谢谢,
答案 0 :(得分: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中,用
替换nullnew int[] { 0x3098, 2, EGL10.EGL_NONE }
这应该让你启用GL ES 2.0。
另外,在他的网页上,他有'setRenderMode(RENDERMODE_WHEN_DIRTY);'我怀疑大多数人都希望这是'setRenderMode(RENDERMODE_CONTINUOUSLY);'
完整代码可用Here。