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渲染,并通过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 – GLSurfaceView – 如何制作半透明背景全部内容,希望文章能够帮你解决android – GLSurfaceView – 如何制作半透明背景所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1097579.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-28
下一篇2022-05-28

发表评论

登录后才能评论

评论列表(0条)

    保存