- 博客(18)
- 资源 (11)
- 收藏
- 关注

原创 OpenGL—双EGLSurface绘图
背景介绍:在android多屏互动开发中遇到需要将一部分绘图信息显示在手机上,另一部分信息显示在HDMI上,同时两个屏幕间可以有一些基本的动画互动,与Windows中多显的效果一样,在拖动过程中,一部分信息显示在显示器1中,另一部分信息显示在显示器2中。需要这功能在当前的Android系统中是不支持的,这时则需要采用双EGLSurface的方案。实现:由上图可以看到,首先分别创建出两个
2014-10-18 15:53:15
5079
1

原创 hwui简介
简介:hwui主要是android用于2d硬件绘图而加入的一个模块,在hwui之前,android主要是用skia来进行软件绘制,后由于绘制性能等问题,现在android的绘图几乎都是使用了hwui硬件加速绘图。hwui主要则是使用opengles来进行gpu硬件绘图,提升整个系统的绘制性能,主要有以下方式:直接渲染,显示列表渲染,延时渲染列表,分别代表的类为:OpenGLRenderer,D
2014-03-02 21:04:18
22923
7

原创 stb_truetype解析ttf字体获取顶点信息
简介:TTF(TrueTypeFont)是一种字库名称。TTF(TrueTypeFont)是Apple公司和Microsoft公司共同推出的字体文件格式,同时也是最常用的一种字体文件表示方式。TrueType采用几何学中二次B样条曲线及直线来描述字体的外形轮廓。所以我们可以很方便地把字体轮廓转换成曲线,可以对曲线进行填充,制成各种颜色和效果,它可以进一步变形,制作特殊效果字体。本文将通
2013-09-19 14:59:20
7316
原创 hwui文字绘制详解
字体绘制简介:hwui中绘制字体的主要是通过FontRenderer这个类来进行绘制,这个类中保存了当前最近使用的字体信息类Font的列表,在Font类中保存了当前绘制需要的文字信息CachedGlyphInfo类列表,同时FontRenderer这个类保存了当前使用的文字纹理缓存CacheTexture类的列表,这个类用于保存当前需要绘制的文字的纹理信息,也就是当需要绘图的时候,首先将会通过
2014-10-18 15:55:33
2387
原创 Android bug——google map切换黑屏问题
现象描述:在使用google map的时候,当从地图界面切换到导航界面的时候,极大概率出现切换过程中黑屏的现象,通过查看log,发现当前出现的错误码也为在hwui中的0x506分析:launcher花屏的问题也是出现0x506,但是这个0x506的问题已经解决了,这次这个google map的错误码问题应该和花屏的问题不是同一个问题。接着也是通过在hwui中的LayerRenderer
2014-05-18 20:02:33
4069
原创 Android bug——hwui中fb socket泄露问题
现象描述:在launcher的使用过程中,会发现系统越来越慢,内存越来越少,通过adb shell ps -t可以查看到当前launcher开启了几百上千个线程,这样就导致了系统越来越慢。分析:通过定位,发现在hwui中,当绘制带阴影的字体的时候,使用了renderScript,由于renderScript中绘制阴影时,会开启3-4个线程来处理阴影文字。当内存不足时,会调用GammaF
2014-05-17 14:03:40
1769
原创 Android bug——Launcher 0x506导致花屏问题
现象描述:在Android4.4中,概率极高会出现Launcher或者应用整个绘制成花屏、黑屏或者字体绘制成方块等问题,出现花屏问题的时候将会在hwui中打印0x506的错误。分析:通过log发现也只有hwui中出现0x506这个错误码,即hwui中当前绘图时使用的fbo是无效的。接着通过分析代码发现当前hwui中使用fbo的地方为LayerRenderer中,在LayerRender
2014-05-17 12:49:18
4748
原创 hwui——Layer的使用
hwui的layer中包括3种:1. 普通的layer,用于作为当前一种状态的保存,可以使用fbo或者glCopyTexture来作为一张纹理使用2. 创建一个HardwareLayer也就是实现以fbo的形式实现,通过view中使用buildLayer来创建,GLES20RenderLayer3. 创建的是一个textureLayer,这个layer的SurfaceTexture直接
2014-04-06 20:01:10
3449
原创 打包软件——Setup factory 7.0使用介绍
基础功能介绍:参考:http://blog.youkuaiyun.com/liujiahan629629/article/details/7462443其他功能1. 制作桌面快捷方式选择文件 -> 编辑文件属性 -> 打开对话框选择快捷方式 -> 可以选择设置到桌面、2. 增加复选框界面选择屏幕 -> 安装之前 -> 添加 -> 选择检查框,这样就能出现检查框的界面了,同时可以
2014-03-15 15:09:31
3689
原创 hwui绘制状态组织方式——Snapshot
简介:Snapshot可以称为快照,hwui就是通过Snapshot的方式来组织整个渲染状态的,Snapshot保存了当前渲染所需的视口,变换矩阵,裁剪区域,fbo信息等。同时还保存了当前Snapshot的上一个Snapshot,也就是通过栈的方式来组织Snapshot之间的关系的。Snapshot之间的关系: 如图所示,在OpenGLRenderer类创建的时候,将会创建
2014-03-02 23:16:54
2878
1
原创 LinearAllocator内存分配
简介:在Android4.4中,在hwui将以前的绘制命令由原来的枚举类型,全部以类的形式呈现(一是为了便于扩展,二是由于加入延时渲染列表,不得不用类来实现),抽象类为DisplayListOp,在该类中重载了new的方法,即用了new placement的方式,统一分配内存,而不是每个操作自己分配,即用了LinearAllocator来管理每个操作需要申请的内存,这样能够提升申请内存的性能,
2014-03-02 17:27:12
1811
3
原创 LRU缓存淘汰算法
原理:LRU(最近最少使用)算法根据数据的访问频率,将最近访问的放在队头,将最少访问的放在队尾,当缓存在一定范围内时,就将最少访问的数据删除,对于经常访问的数据就留在内存中,提高系统性能,正常是用在操作系统的cache命中中使用。实现:在Android的HWUI中,通过使用LruCaches来保存使用的资源,从而提高HWUI的渲染性能,又不至于浪费太多的内存。如
2014-03-02 16:45:19
1180
原创 Opengl Camera相关知识点
1、视图矩阵视图矩阵即用于将要渲染的物体从世界坐标转换到视觉坐标的过程。即视觉坐标 = 视图矩阵 * 世界坐标。例如指定物体的世界坐标为(0, 0, 0),设置摄像机的位置为(0, 0, 300),即转换后物体的实际坐标即以摄像机的位置(眼睛看到的)为起点(0, 0, 0),物体相对摄像机的位置即为视觉坐标(0, 0, -100)。视觉坐标除了在物体渲染时的坐标变换中用到,还有个就是在光照
2013-10-02 20:17:47
1977
原创 C++类的成员函数回调
静态函数或者全局函数回调在C++的类中,对于静态成员函数的回调很简单,直接输入静态函数的函数地址即可,当需要调用的时候,直接通过类名与函数名即可完成调用。类的非静态成员函数回调对于类的非静态成员函数,由于需要指定当前函数被哪个对象调用(this),所以对于类的非静态成员函数的回调,我们需要保持当前的this指针和需要回调的函数地址。1. 首先,由于需要保持任意的类,而且各个
2013-10-02 09:18:51
1357
原创 Opengl分格化(libtess)移植与使用
简介:Opengl只能直接显示简单的凸多边形,对于凹的多边形则只能通过分格化(tessellation)将其分格成多个小的凸多边形,以便于利用opengl的标准渲染函数对其进行渲染。对于正常使用的话,直接使用glut库中则含有了分格化的相关API。但是对于如果使用gles等其他方式,不能使用或者不想使用glut的时候,则无法直接使用glut库的(可能导致opengl上下文冲突等),所以需要重新
2013-09-19 14:36:24
5308
1
原创 OpenGL—坐标变换
OpenGL将3D物体渲染到2D平面,实质就是将一系列三维的顶点坐标变换到2D平面像素的一个过程,一般需要如下几种坐标变换方式:坐标:物体坐标:物体自己绘制时的坐标,比如绘制一个三角形:glBegin(GL_TRIANGLE_FAN); glVertex3f(1, 0, 0); glVertex3f(0, 1, 0); glVertex3f(0, 0, 1);glEnd
2013-07-31 20:33:40
2092
原创 OpenGL—渲染管线
简介:渲染就是将3D世界中的物体显示到2D平面中的一个过程。学习OpenGL渲染的机制就是学习如图所示的几个关键部分。在OpenGL ES 1.0 版本中,只支持固定管线,而在OpenGL ES 2.0后支持可编程管线,即在渲染的过程中不再是对开发人员透明的,可以通过一定的操作来实现更为复杂的功能。如图灰色部分(Vertex Shader和Fragment Shader)即为可编程
2013-07-31 20:32:07
1360
cairo_win编译代码
2012-09-03
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人