android – GLSurfaceView – 如何制作半透明背景
作者:互联网
我尝试使用GLSurfaceView渲染,并通过docs我设置格式:
getHolder().setFormat(PixelFormat.TRANSLUCENT);
我使用GLSurfaceView.Renderer,它绘制onDrawFrame:
GLES20.glClearColor(0, 0, 1, .5f);
GLES20.glClear(GLES20.GL_DEPTH_BUFFER_BIT | GLES20.GL_COLOR_BUFFER_BIT);
但是,GLSurfaceView中的GL渲染不是半透明的,而是完全蓝色的.如果我省略glClear调用,那么它是全黑的.
如何使GL渲染具有透明背景,以便与后面绘制的视图混合?
编辑:这是我的GLSurfaceView:
class GLView extends GLSurfaceView{
MyRenderer r;
public GLView(Context ctx){
super(ctx);
setEGLContextClientVersion(2);
getHolder().setFormat(PixelFormat.TRANSLUCENT);
setEGLConfigChooser(8, 8, 8, 8, 16, 0);
r = new MyRenderer(getContext());
setRenderer(r);
}
}
解决方法:
好的,经过一些研究我可以自己回答这个问题.
我终于使用SurfaceView.setZOrderOnTop(true)将其绘制成透明度.但后来我失去了在GLSurfaceView上放置其他视图的可能性.
我结束了两个可能的结果:
左侧是所有其他视图下方的标准GL曲面,无法使用透明度绘制,因为GL曲面在应用程序窗口表面之前绘制,而GLSurfaceView仅在其位置绘制punches hole以便透视GL曲面.
右边是用setZOrderOnTop(true)绘制的透明GL表面,因此其表面绘制在应用程序窗口的顶部.现在它是透明的,但是在视图层次结构中放置在其上的其他视图之上绘制.
因此,应用程序似乎有一个窗口,其视图层次结构具有表面,而SurfaceView具有自己的GL表面,可能位于应用程序窗口的顶部或下方.遗憾的是,透明GL视图无法在视图层次结构中正确排序,并且其上包含其他视图.
标签:android,background,opengl-es-2-0,transparent 来源: https://codeday.me/bug/20191006/1861089.html