自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

virwin的专栏

OpenGL技术研究

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

原创 OpenGL—双EGLSurface绘图

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

2014-10-18 15:53:15 4917 1

原创 OpenGL—射线拾取(ray pick)

简介:OpenGL中鼠标射线拾取,就是通过鼠标点击屏幕

2014-10-12 13:18:50 9172

原创 hwui简介

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

2014-03-02 21:04:18 22607 11

原创 stb_truetype解析ttf字体获取顶点信息

简介:TTF(TrueTypeFont)是一种字库名称。TTF(TrueTypeFont)是Apple公司和Microsoft公司共同推出的字体文件格式,同时也是最常用的一种字体文件表示方式。TrueType采用几何学中二次B样条曲线及直线来描述字体的外形轮廓。所以我们可以很方便地把字体轮廓转换成曲线,可以对曲线进行填充,制成各种颜色和效果,它可以进一步变形,制作特殊效果字体。本文将通

2013-09-19 14:59:20 6375 1

原创 hwui文字绘制详解

字体绘制简介:hwui中绘制字体的主要是通过FontRenderer这个类来进行绘制,这个类中保存了当前最近使用的字体信息类Font的列表,在Font类中保存了当前绘制需要的文字信息CachedGlyphInfo类列表,同时FontRenderer这个类保存了当前使用的文字纹理缓存CacheTexture类的列表,这个类用于保存当前需要绘制的文字的纹理信息,也就是当需要绘图的时候,首先将会通过

2014-10-18 15:55:33 2278

原创 Android bug——google map切换黑屏问题

现象描述:在使用google map的时候,当从地图界面切换到导航界面的时候,极大概率出现切换过程中黑屏的现象,通过查看log,发现当前出现的错误码也为在hwui中的0x506分析:launcher花屏的问题也是出现0x506,但是这个0x506的问题已经解决了,这次这个google map的错误码问题应该和花屏的问题不是同一个问题。接着也是通过在hwui中的LayerRenderer

2014-05-18 20:02:33 3897 5

原创 Android bug——hwui中fb socket泄露问题

现象描述:在launcher的使用过程中,会发现系统越来越慢,内存越来越少,通过adb shell ps -t可以查看到当前launcher开启了几百上千个线程,这样就导致了系统越来越慢。分析:通过定位,发现在hwui中,当绘制带阴影的字体的时候,使用了renderScript,由于renderScript中绘制阴影时,会开启3-4个线程来处理阴影文字。当内存不足时,会调用GammaF

2014-05-17 14:03:40 1714

原创 Android bug——Launcher 0x506导致花屏问题

现象描述:在Android4.4中,概率极高会出现Launcher或者应用整个绘制成花屏、黑屏或者字体绘制成方块等问题,出现花屏问题的时候将会在hwui中打印0x506的错误。分析:通过log发现也只有hwui中出现0x506这个错误码,即hwui中当前绘图时使用的fbo是无效的。接着通过分析代码发现当前hwui中使用fbo的地方为LayerRenderer中,在LayerRender

2014-05-17 12:49:18 4561 6

原创 hwui——Layer的使用

hwui的layer中包括3种:1. 普通的layer,用于作为当前一种状态的保存,可以使用fbo或者glCopyTexture来作为一张纹理使用2. 创建一个HardwareLayer也就是实现以fbo的形式实现,通过view中使用buildLayer来创建,GLES20RenderLayer3. 创建的是一个textureLayer,这个layer的SurfaceTexture直接

2014-04-06 20:01:10 3258 1

原创 打包软件——Setup factory 7.0使用介绍

基础功能介绍:参考:http://blog.csdn.net/liujiahan629629/article/details/7462443其他功能1. 制作桌面快捷方式选择文件 -> 编辑文件属性 -> 打开对话框选择快捷方式 -> 可以选择设置到桌面、2. 增加复选框界面选择屏幕 -> 安装之前 -> 添加 -> 选择检查框,这样就能出现检查框的界面了,同时可以

2014-03-15 15:09:31 3571

原创 hwui绘制状态组织方式——Snapshot

简介:Snapshot可以称为快照,hwui就是通过Snapshot的方式来组织整个渲染状态的,Snapshot保存了当前渲染所需的视口,变换矩阵,裁剪区域,fbo信息等。同时还保存了当前Snapshot的上一个Snapshot,也就是通过栈的方式来组织Snapshot之间的关系的。Snapshot之间的关系: 如图所示,在OpenGLRenderer类创建的时候,将会创建

2014-03-02 23:16:54 2745 1

原创 LinearAllocator内存分配

简介:在Android4.4中,在hwui将以前的绘制命令由原来的枚举类型,全部以类的形式呈现(一是为了便于扩展,二是由于加入延时渲染列表,不得不用类来实现),抽象类为DisplayListOp,在该类中重载了new的方法,即用了new placement的方式,统一分配内存,而不是每个操作自己分配,即用了LinearAllocator来管理每个操作需要申请的内存,这样能够提升申请内存的性能,

2014-03-02 17:27:12 1737 3

原创 LRU缓存淘汰算法

原理:LRU(最近最少使用)算法根据数据的访问频率,将最近访问的放在队头,将最少访问的放在队尾,当缓存在一定范围内时,就将最少访问的数据删除,对于经常访问的数据就留在内存中,提高系统性能,正常是用在操作系统的cache命中中使用。实现:在Android的HWUI中,通过使用LruCaches来保存使用的资源,从而提高HWUI的渲染性能,又不至于浪费太多的内存。如

2014-03-02 16:45:19 1135

原创 Opengl Camera相关知识点

1、视图矩阵视图矩阵即用于将要渲染的物体从世界坐标转换到视觉坐标的过程。即视觉坐标 = 视图矩阵 * 世界坐标。例如指定物体的世界坐标为(0, 0, 0),设置摄像机的位置为(0, 0, 300),即转换后物体的实际坐标即以摄像机的位置(眼睛看到的)为起点(0, 0, 0),物体相对摄像机的位置即为视觉坐标(0, 0, -100)。视觉坐标除了在物体渲染时的坐标变换中用到,还有个就是在光照

2013-10-02 20:17:47 1862

原创 C++类的成员函数回调

静态函数或者全局函数回调在C++的类中,对于静态成员函数的回调很简单,直接输入静态函数的函数地址即可,当需要调用的时候,直接通过类名与函数名即可完成调用。类的非静态成员函数回调对于类的非静态成员函数,由于需要指定当前函数被哪个对象调用(this),所以对于类的非静态成员函数的回调,我们需要保持当前的this指针和需要回调的函数地址。1. 首先,由于需要保持任意的类,而且各个

2013-10-02 09:18:51 1236

原创 Opengl分格化(libtess)移植与使用

简介:Opengl只能直接显示简单的凸多边形,对于凹的多边形则只能通过分格化(tessellation)将其分格成多个小的凸多边形,以便于利用opengl的标准渲染函数对其进行渲染。对于正常使用的话,直接使用glut库中则含有了分格化的相关API。但是对于如果使用gles等其他方式,不能使用或者不想使用glut的时候,则无法直接使用glut库的(可能导致opengl上下文冲突等),所以需要重新

2013-09-19 14:36:24 4982 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 1959

原创 OpenGL—渲染管线

简介:渲染就是将3D世界中的物体显示到2D平面中的一个过程。学习OpenGL渲染的机制就是学习如图所示的几个关键部分。在OpenGL ES 1.0 版本中,只支持固定管线,而在OpenGL ES 2.0后支持可编程管线,即在渲染的过程中不再是对开发人员透明的,可以通过一定的操作来实现更为复杂的功能。如图灰色部分(Vertex Shader和Fragment Shader)即为可编程

2013-07-31 20:32:07 1304

World.Machine.Professional.v2.2

World.Machine.Professional.v2.2 带注册码

2016-06-06

opengles 2.0教程

opengles2.0 教程,包括window平台、android平台,其中还包括shader语言教程等

2013-04-15

opengles 教程

opengles 教程

2013-03-11

skia源码下载

skia 2d绘图库,用于android,windows等跨平台。

2012-12-18

nehe OpenGL

nehe 的opengl教程,包含文档和代码,对opengl学习有较大帮助

2012-09-04

cairo_win编译代码

包含了cairo 在windows编译的源码,与zlib,libpng,pixman等。同时包含相对应的一些网站资料,包含cairo一直android系统的代码……

2012-09-03

cairo_android

cairo移植到android系统的代码。

2012-09-03

仿qq截图软件

实现系统托盘,快捷键和开机启动功能的仿qq截图小工具

2012-08-26

仿qq截图源码与文件

一个仿qq截图的源码(非本人编写,只是对其修改部分而已,用于分享),包含了可执行文件

2012-08-05

c&&c++ 函数库

c&&c++ 的系统函数库,对于开发过程中参考有帮助!

2012-08-02

webkit文档

webkit相关文档,用于学习webkit源码有较大帮助

2012-08-01

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除