当我们需要把同一个场景渲染到不同的Surface上时,此时系统GLSurfaceView 就不能满足需求了,所以我们需要自己创建EGL环境来实现渲染操作。...我们通过分析GLSurfaceView来实现自己的代码 ?...首先需要配置EGL环境(EGLHelper):Android配置EGL环境 EGL环境配置成功后,定义GLSurfaceView主要为以下步骤: 1、继成SurfaceView,并实现其CallBack...回调 2、自定义GLThread线程类,主要用于OpenGL的绘制操作 3、添加设置Surface和EglContext的方法 4、提供和系统GLSurfaceView相同的调用方法 EglSurfaceView.java...void onSurfaceChanged(int width, int height); void onDrawFrame(); } } 使用和正常的GLSurfaceView
本期内容: View 与 Surface 的渲染机制 SurfaceView/GLSurfaceView 与 Surface 的关系 GLSurfaceView 与 Renderer SurfaceTexture...与 Renderer 前面说了 SurfaceView ,而 GLSurfaceView 才是我们今天的重点,在上篇 《OpenGL ES for Android 世界》文章中,我们已经对 GLSurfaceView...有了初步的介绍,你可能还记得我们利用 GLSurfaceView 在屏幕上绘制了一个三角形。...通过 GLSurfaceView 前缀我们大致可以猜到,它一定是和 OpenGL 相关的,正如你猜测的那样,GLSurfaceView 确实是封装了 GL 的相关内容,严格来说是使用 EGL 搭建了 GL...通过 GL Texture 我们就可以拿到视频帧,然后直接渲染到 GLSurfaceView 中。
GLSurfaceView GLSurfaceView继承自SurfaceView,对SurfaceView又做了一次封装,方便我们在安卓中使用OpenGL。...GLSurfaceView提供了以下特性: 提供并且管理一个独立的Surface; 提供并且管理一个EGL display,它能让opengl把内容渲染到上述的Surface上; 支持用户自定义渲染器(...的效率是SurfaceView的30倍以上,SurfaceView使用画布进行绘制,GLSurfaceView利用GPU加速提高了绘制效率; View的绘制onDraw(Canvas canvas)使用...Skia渲染引擎渲染,而GLSurfaceView的渲染器Renderer的onDrawFrame(GL10 gl)使用opengl绘制引擎进行渲染。...一般兼容性比较好的播放器,会同时支持SurfaceView和GLSurfaceView两种模式供用户根据实际场景选择,以大牛直播SDK(Github)的Android平台RTSP和RTMP播放端为例:
GLSurfaceView 的使用涉及到 OpenGL ES 的一些核心概念,包括 EGL、GLSurfaceView、GLSurfaceView.Renderer 等。...GLSurfaceView 的基本使用步骤如下: 创建 GLSurfaceView: 在布局文件中添加 GLSurfaceView 控件或在代码中创建它的实例。...绘制 3D 图像的示例代码: 以下是一个使用 GLSurfaceView 绘制简单 3D 图像(例如彩色三角形)的示例: class MyGLRenderer : GLSurfaceView.Renderer...{ super.onCreate(savedInstanceState) glSurfaceView = GLSurfaceView(this).apply {...glSurfaceView.onPause() } } 在这个示例中,我们创建了一个 MyGLRenderer 类来实现 GLSurfaceView.Renderer 接口,并在 onDrawFrame
本文首先对GLSurfaceView相关知识进行讲解,然后介绍Android系统如何获取摄像头数据并利用GLSurfaceView渲染到屏幕上,在此基础上以一个黑白滤镜为例介绍拿到摄像头数据后如何对数据进行再处理...,并利用GLSurfaceView展示给用户。...其实使用GLSurfaceView非常简单,只要实现GLSurfaceView.Renderer接口就好了,然后通过GLSurfaceView.setRenderer(GLSurfaceView.Render...renderer)方法把实现的接口传到GLSurfaceView即可。...GLSurfaceView有接口GLSurfaceView.setRenderMode(int renderMode)可以设置是连续渲染还是按需渲染。
我们需要了解两个基本类别的Android框架:GlSurfaceView和GlSurfaceView.Renderer GlSurfaceView是什么? GLSurfaceView的作用是什么?...GLSurfaceView如何使用? GlSurfaceView从名字就可以看出,它是一个SurfaceView,看源码可知,GlSurfaceView继承自SurfaceView。...glSurfaceView = new GLSurfaceView(this); glSurfaceView.setRenderer(new GLSurfaceView.Renderer...GLSurfaceView.Renderer的作用?GLSurfaceView.Renderer的用法? 该接口定义了用于绘制在图形所需的方法GLSurfaceView。...介绍完了GlSurfaceView和GlSurfaceView.renderer之后,接下来说下如何使用GlSurfaceView; 1. 创建一个GlSurfaceView 2.
其实除了TextureView和SurfaceView渲染视频之外,GLSurfaceView也是渲染视频的一种View,GLSurfaceView和OpenGL结合,可以实现给播放中的视频添加水印的目的...1.GLSurfaceView介绍 GLSurfaceView从Android 1.5(API level 3)开始加入,继承自SurfaceView,实现了SurfaceHolder.Callback2...GLSurfaceView提供了下列特性: 1.提供并且管理一个独立的Surface。 2.提供并且管理一个EGL display,它能让opengl把内容渲染到上述的Surface上。...6.GPU加速:GLSurfaceView的效率是SurfaceView的30倍以上,SurfaceView使用画布进行绘制,GLSurfaceView利用GPU加速提高了绘制效率 7.View的绘制onDraw...2.GLSurfaceView渲染视频 首先定义一个CustomGLSurfaceView 继承GLSurfaceView 定义一个CustomRenderer实现Renderer接口 public
直接开始 ---- 创建GLSurfaceView 今天的目标是做一个OpenGL ES学习的开端。就是画一个简单的三角形。暂时不考虑坐标系的矩阵变换和纹理等。只需要用顶点着色器简单的来进行描述。...这一节需要使用和认识的关键类是 GLSurfaceView和GLSurfaceView.Render 一句话来描述就是,我们会在GLSurfaceView.Render上进行描绘,在GLSurfaceView...接着创建一个GLSurfaceView。...同时设置我们自己的Render //创建一个GLSurfaceView glSurfaceView = new GLSurfaceView(this);...glSurfaceView.setEGLContextClientVersion(2); //设置自己的Render.Render 内进行图形的绘制 glSurfaceView.setRenderer
那么对于OpenGL的三维绘图来说,也同样需要具备这三种要素,分别是GLSurfaceView、GLSurfaceView.Renderer和GL10,其中GLSurfaceView继承自表面视图SurfaceView...具体到App编码上面,还得将GLSurfaceView、GLSurfaceView.Renderer和GL10这三个类有机结合起来,即通过函数调用关联它们三个小伙伴。...首先从布局文件获得GLSurfaceView的控件对象,然后调用该对象的setRenderer方法设置三维渲染器,这个三维渲染器实现了GLSurfaceView.Renderer定义的三个视图函数,分别是...如此一来,绘图三要素的GLSurfaceView、GLSurfaceView.Renderer和GL10就互相关联了起来。...-- 注意这里要使用控件的全路径android.opengl.GLSurfaceView --> <android.opengl.GLSurfaceView android:id
初始化OpenGL使用的类是GLSurfaceView,它可以处理OpenGL初始化过程中比较基本的操作,如配置显示设备,在后台线程中渲染,渲染是在显示设备中一个称为surface的特定区域完成的。...在使用GLSurfaceView的时候,我们要处理好Activity生命周期事件,在Activity暂停的时候要释放资源,在Activity恢复的时候要重新恢复资源。 ...: GLSurfaceView var rendererSet=false override fun onCreate(savedInstanceState: Bundle?)...{ super.onCreate(savedInstanceState) glSurfaceView= GLSurfaceView(this) //检查设备是否支持...glSurfaceView.setRenderer(MyRenderer()) rendererSet=true } else{
在使用 3D 的图形 API 方面,主要的步骤通常如下所示: 1.扩展实现 android.view.GLSurfaceView 类。...2.扩展实现 android.opengl.GLSurfaceView 中的 Renderer(渲染器)。...3.实现 GLSurfaceView::Renderer 中的 onDrawFrame()等函数。...,因此 GLSurfaceView 本身可以作为 android. view.View 来使用。...实现的GLSurfaceView::Renderer,通过 GLSurfaceView 的 setRenderer()方法将其设置到 GLSurfaceView 中。
SurfaceHolder给相机,通常在使用SurfaceView作为预览控件时使用; 通过Camera#setPreviewTexture方法设置SurfaceTexture给相机,通常在使用TextureView或GLSurfaceView...onSurfaceTextureAvailable回调中拿到准备好的SurfaceTexture设置给Camera即可 camera.setPreviewTexture(surfaceTexture); 方式三、使用GLSurfaceView...使用GLSurfaceVIew作为预览UI控件时,将相机预览数据转化为纹理数据,然后利用OpenGL绘制到屏幕,核心流程: @Override public void onSurfaceCreated...cameraRender = new CameraRender(context); st.setOnFrameAvailableListener(this); glSurfaceView.setRenderMode...(GLSurfaceView.RENDERMODE_WHEN_DIRTY); } @Override public void onDrawFrame(GL10 gl) { st.updateTexImage
10.3 渲染器的实现 在 Android 中,也可以不扩展 GLSurfaceView 类,只是实现 GLSurfaceView::Renderer 接口。...实现渲染器可以在 GLSurfaceView 中直接使用。...CubeRenderer.java 的内容: class CubeRenderer implements GLSurfaceView.Renderer { public CubeRenderer...中两个活动的内容: <activity android:name=".graphics.GLSurfaceViewActivity" android:label="Graphics/OpenGL ES/<em>GLSurfaceView</em>...,而只是实现 <em>GLSurfaceView</em> 中::Renderer 即可
而要想创建View容器,最直接的方式莫过于从GLSurfaceView和GLSurfaceView.Renderer分别派生一个类,实际的绘图动作都是在GLSurfaceView.Renderer里面发生的...3,构键GLSurfaceView对象 GLSurfaceView中其实不需要做太多工作,实际的绘制任务都在GLSurfaceView.Renderer中了。...这里我们可以直接使用GLSurfaceView。...使用GLSurfaceView.RENDERMODE_WHEN_DIRTY: setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY); 4, 构建一个Renderer...如我们要在GLSurfaceView上画了一个灰色的背景。
{ glSurfaceView.queueEvent { surfaceTexture?....updateTexImage() glSurfaceView.requestRender() } } override fun onCreate(...(mRenderer) glSurfaceView.renderMode = GLSurfaceView.RENDERMODE_WHEN_DIRTY if (ContextCompat.checkSelfPermission...() } override fun onPause() { super.onPause() glSurfaceView.onPause() } }...{ glSurfaceView.queueEvent { surfaceTexture?.
在Android上运行OpenGL ES程序需要用到GLSurfaceView控件,GLSurfaceView继承自SurfaceView并实现了GLThread,通过OpenGL ES进行绘制。...02 初始化GLSurfaceView 在布局文件中添加GLSurfaceView, <?xml version="1.0" encoding="utf-8"?...//设置渲染模式 glSurfaceView.renderMode = GLSurfaceView.RENDERMODE_CONTINUOUSLY } override...onSurfaceChanged:当Surface发生变化的时候回调,比如竖屏转横屏导致GLSurfaceView大小发生变化,通常情况下在此方法中设置绘制窗口及和GLSurfaceView大小有关系的参数...onDrawFrame:执行OpenGL ES渲染工作,由系统以一定的频率来调用重绘View,当设置GLSurfaceView的渲染模式为GLSurfaceView.RENDERMODE_CONTINUOUSLY
在了解OpenGl的使用之前,我们需要了解两个基本类别的Android框架:GlSurfaceView和GlSurfaceView.Renderer 3. GlSurfaceView是什么?...GLSurfaceView的作用是什么? GLSurfaceView如何使用?...glSurfaceView = new GLSurfaceView(this); glSurfaceView.setRenderer(new GLSurfaceView.Renderer()...GlSurfaceView.Renderer是什么?GLSurfaceView.Renderer的作用?GLSurfaceView.Renderer的用法?...介绍完了GlSurfaceView和GlSurfaceView.renderer之后,接下来说下如何使用GlSurfaceView; 1. 创建一个GlSurfaceView 2.
Android上OpenGL ES基本的类 (1) GLSurfaceView OpenGL ES在Android开发上,是以GLSurfaceView为载体进行展示的(或者可以自己用SurfaceView...实现一个,这里简单起见,直接用GLSurfaceView)。...基本使用: GLSurfaceView glView = new GLSurfaceView (context); // 注意,记得给它设置版本,这里用OpenGL ES 2.0,那就设置version...glVIew.setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY); 关于GLSurfaceView的生命周期方法onResume和onPause分别在Activity...(2) GLSurfaceView.Renderer 上面讲到,这个是GLSurfaceView的“灵魂”。基本上的各种特效和图形都是在这里写出来的。
领取专属 10元无门槛券
手把手带您无忧上云