首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不同设备上的模板问题

不同设备上的模板问题
EN

Stack Overflow用户
提问于 2015-07-12 04:03:37
回答 1查看 163关注 0票数 0

我正在尝试在我的android opengl应用程序中使用模具测试。

代码是很常见的。像这样的Smth:

代码语言:javascript
运行
复制
gl.glStencilFunc(GL10.GL_ALWAYS, 1, 0xff);
gl.glStencilOp(GL10.GL_KEEP, GL10.GL_REPLACE, GL10.GL_REPLACE);

//...drawing a thing to stencil buffer

gl.glStencilFunc(GL10.GL_EQUAL, 1, 0xff); 
gl.glStencilOp(GL10.GL_KEEP, GL10.GL_KEEP, GL10.GL_KEEP);

//...drawing using stencil buffer bits

但是为什么当我绘制到模板缓冲区时,它在屏幕的不同位置被绘制了几次。我不知道为什么。我只在钢网上画过一次,但不知何故...乘以...。在索尼的设备上。然后,我拿起我的中文标签,在那里运行应用程序。我得到了另一张图片-它只绘制了一次,并在正确的位置,但模具缓冲区正在被清除之间的onDrawFrame调用-尽管我没有这样做。它正在被自己清理。

有什么想法吗?可能是设备问题?

EN

回答 1

Stack Overflow用户

发布于 2015-07-12 05:34:02

,但是模板缓冲区在onDrawFrame调用之间被清除了--尽管我没有这样做。它正在被自己清理。

这是有效的行为。深度缓冲区和模板缓冲区的内容不一定会在帧之间保留。

GLSurfaceView在幕后使用EGL API,作为Android上的OpenGL窗口系统接口(类似于Windows上的WGL、Mac上的CGL、iOS上的EAGL )。在框架末尾的幕后调用的函数是eglSwapBuffers()。从它的man page

在调用eglSwapBuffers之后,

辅助缓冲区的内容始终是未定义的。

如果您需要模板缓冲区使其内容超出帧边界,则必须使用屏幕外渲染到FBO。

至于模板缓冲区在一些设备上根本不能工作,无法判断这是设备问题,还是代码中的问题。需要注意的一件事是,在创建视图/渲染器时需要请求模板缓冲区。

例如,如果您使用的是默认EGLConfigChooser,则在设置GLSurfaceView期间进行的调用可能如下所示:

代码语言:javascript
运行
复制
setEGLConfigChooser(8, 8, 8, 8, 16, 8);

请注意,这需要在setEGLContextClientVersion()之后,但在setRenderer()之前。最后一个参数是模板缓冲区的请求大小。当你请求深度缓冲区时,一些设备总是会给你一个模板缓冲区,另一些设备则不会,除非你显式地请求模板,如上所示。

为了可靠地跨设备获得所需的配置,您通常需要实现自己的EGLConfigChooser。默认行为在不同的设备上可能不一致,即使它是根据EGL规范实现的,其中一些也没有太大意义。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31361293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档