Toybrick

Android—OpenGL学习笔记

sfs

新手上路

积分
35
楼主
发表于 2019-8-9 14:54:14    查看: 7274|回复: 0 | [复制链接]    打印 | 只看该作者

**定义:**
OpenGL和OpenGLES是开放图形库,是一个跨平台的图形API,用于指定3D图形处理硬件中的软硬件编程接口。OpenGL一般用于图形工作站,PC端使用;OpenGLES是免费的跨平台且功能完善的2D/3D图形库接口API,是OpenGL的一个子集。

**概念理解:**
1.Bitmap.config有3个枚举类型色彩模式(ARGB_4444已经被弃用,A-alpha表示透明度 R G B表示色光三原色红 绿 蓝 4444表示 A R G B各占4位精度 总和2字节)ALPHA_8 只存储位图的透明度  RGB_565 只存储位图的颜色 ARGB_8888 存储位图的颜色和透明度,但是占用内存也会大
2.灰度是表明图像明暗的数值,即黑白图像中点的颜色深度,范围一般从0到255,白色为255 ,黑色为0,故黑白图片也称灰度图像。灰度值指的是单个像素点的亮度。灰度值越大表示越亮。灰度就是没有色彩,RGB色彩分量全部相等。
3.像素是图像不可分割的单位,每个图像都由像素组成,有自己的色彩和透明度.
4.纹理:即纹路。每个物体表面上不同的样子,指物体表面.是一种颜色和透明度的排列方式,一般都是单色调,若采用原图片的颜色和透明度排列方式来渲染,就变成了我们看到的图片.

**surfaceview:**
SurfaceView extends View ,用于在屏幕上显示相机的预览画面;其中有两个成员变量,一个是Surface对象,另一个是SuraceHolder对象;使用双缓存机制(两张canvas:frontCanvas和backCanvas),播放视频更流畅!通过SurfaceView控制surface的绘制位置,surfaceView提供一个可见区域,把surface显示在屏幕上.
1.Surface由屏幕显示内容合成器(screen compositor)所管理的原生缓冲器的句柄,通过Surface(因为Surface是句柄)就可以获得原生缓冲器(保存当前窗口的像素数据)以及其中的内容.Surface中有一个Canvas成员,专门用于绘制的。通过该句柄,得到其中的canvas,原生缓冲区以及其他内容.
2.SurfaceHolder是一个接口,其作用就像一个关于Surface的监听器。提供访问和控制SurfaceView背后的Surface 相关的方法(创建,改变和销毁)
SurfaceHolder.Callback  SurfaceHolder是一个接口,它通过回到方法的方式,让我们可以感知到Surface的创建(surfaceCreated)、销毁(surfaceDestroyed)或者改变(surfaceChanged)。其实这一点是通过其内部的静态子接口SurfaceHolder.Callback来实现的。
3.SurfaceTexture:从Image Stream中捕获帧数据,用作OpenGLES的纹理,其中Image Stream来自相机预览或视频解码(纹理),用SurfaceTexture接收来自camera的图像流,然后从SurfaceTexture中取得图像帧的拷贝进行处理,处理完毕后再送给另一个SurfaceView用于显示即可。

**重要载体GLSurfaceView**
GLSurfaceView是一个View,在xml中<android.opengl.GLSurfaceView  ...>
GLSurfaceView extends SurfaceView implements Callback2

GLSurfaceView继承SurfaceView,并实现了SurfaceHolder.Callback2(Callback2 extends Callback)接口。既然继承于SurfaceView,就拥有SurfaceView的特性。如能在View的基础上创建独立的Surface,拥有SurfaceHolder来管理Surface,并且可以在子线程中进行View的渲染操作。通过SurfaceHolder得到Canvas,然后在单独的线程中利用Canvas绘制内容,然后更新到Surface。

GLSurfaceView的渲染工作主要由GLSurfaceView.Renderer负责渲染
OpenGl ES关于渲染方式有以下两种:RENDERMODE_CONTINUOUSLY和RENDERMODE_WHEN_DIRTY。
默认渲染方式为RENDERMODE_CONTINUOUSLY,当设置为RENDERMODE_CONTINUOUSLY时渲染器会不停地渲染场景,当设置为RENDERMODE_WHEN_DIRTY时只有在创建和调用requestRender()时才会刷新。

**例子:查看RKNN-SSD-Demo**  https://blog.csdn.net/sunyFS/article/details/98520938

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

产品中心 购买渠道 开源社区 Wiki教程 资料下载 关于Toybrick


快速回复 返回顶部 返回列表