其他分享
首页 > 其他分享> > android – GLSurfaceView – 如何制作半透明背景

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