相机预览使用帧缓存对象(FBO)

在原先的相机应用中对相机预览处理是通过 OPENGL 直接读取 OES Texture 数据进行滤镜和显示,这样做的缺点是效率低, 由于 OES Texture 是外部纹理,直接读取的话会增加了GPU取数据的时间,若进行一些运算密集的算法例如高斯滤波,每次都会到外部纹理取数据,这样则会造成明显的卡...

2017-10-12 09:55:31

阅读数 510

评论数 2

opengles 纹理对象&纹理单元

在使用纹理的时候,有个疑问就是这些方法为什么就可以创建纹理并使用它们,这里来探讨下; 下面来看看一般使用二维纹理的步骤:// 生成纹理 int[] textureHandle = new int[1]; GLES20.glGenTextures(1, textureHandle, 0);int ...

2017-08-17 09:51:11

阅读数 1034

评论数 0

Camera app 分析(四)预览与滤镜

Camera 预览有多种方式,如: 第一种方案 :SurfaceView + SurfaceHolder; 第二种方案 :GlSurfaceView + SurfaceTexture; 第三种方案 :TextureView + SurfaceTexture; 这3种显示的方法对比可以参考以...

2017-08-09 09:46:26

阅读数 305

评论数 0

android 渲染机制简介

android 的渲染机制由以下部分组成: app (应用层绘制到缓存区) SurfaceFlinger (把缓存区数据渲染到屏幕) SharedClient (匿名共享内存)其中 SurfaceFlinger 服务运行在Android系统的System进程中,它负责管理Android系统的...

2017-07-20 21:36:50

阅读数 229

评论数 0

自定义 view 一 (measure)

想要画出自定义的 view 必须先计算出它的宽高,宽高确定后才能进行后续的步骤,measure 分为 viewgroup 和 view 的 measure, viewgroup 其实也是继承于 view, 相比于 view ,它多了测量子 view 的步骤;首先我们需要知道 MeasureSpec...

2017-07-20 11:19:20

阅读数 138

评论数 0

多进程导致 Application 多次执行的问题研究

在项目中我们有时会用到多进程,需要在 AndroidManifest 里进行声明 : <activity android:name=".RemoteActivity" android:process="...

2017-07-13 16:55:49

阅读数 194

评论数 0

okHttp3 线程池

先来做一个简单的网络请求Request request = new Request.Builder() .url("http://www.baidu.com") .build(); client.ne...

2017-07-01 13:58:01

阅读数 4208

评论数 0

java 线程间的状态转换

线程间的状态转换: 新建(new):新创建了一个线程对象。 可运行(runnable):线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取cpu 的使用权 。 运行(running):可运行状态(runnable...

2017-06-30 21:50:50

阅读数 104

评论数 0

java 动态代理

之前写过静态代理 代理模式 ,现在来说说动态代理,传统的静态代理模式需要为每一个需要代理的类写一个代理类,如果需要代理的类有几百个就需要写几百个代理类,为了更优雅地实现代理模式,JDK提供了动态代理方式,可以简单理解为JVM可以在运行时帮我们动态生成一系列的代理类,这样我们就不需要手写每一个静态的...

2017-06-29 21:58:23

阅读数 99

评论数 0

理解AtomicBoolean

在多线程并发的环境下,我们假如有一个初始化的操作,如果处理不当会造成初始化多次,如:private static class WorkerThread implements Runnable { private static boolean initialized = false; pub...

2017-06-25 22:47:38

阅读数 139

评论数 0

Java中Volatile关键字详解

Java中Volatile关键字详解 阅读目录 一、基本概念 二、Volatile原理 一、基本概念 先补充一下概念:Java 内存模型中的可见性、原子性和有序性。可见性:  可见性是一种复杂的属性,因为可见性中的错误总是会违背我们的直觉。通常,我们无法确保执行读操作的线程能适时地看到其...

2017-06-25 11:57:45

阅读数 250

评论数 0

多线程情况下单例的写法

静态内部类public class Singleton { private Singleton() {} private static class SingletonInstance { private static final Singleton INSTANCE =...

2017-06-25 11:53:17

阅读数 150

评论数 0

Camera app 分析(三)拍照流程

拍照过程: 首先来看下拍照按键的点击按钮事件:ShutterButton.java protected void drawableStateChanged() { super.drawableStateChanged(); final boolean pre...

2017-06-23 14:56:16

阅读数 188

评论数 0

Camera app 分析(二)打开相机和预览过程

预览相机必须要开启相机,来看下这个开启的流程;PhotoModule.java // 在 PhotoModule 初始化的时候开启打开相机线程 public void init(CameraActivity activity, View parent) { if (m...

2017-06-23 09:57:41

阅读数 579

评论数 0

Camera app 分析(一)

由于参与了 Camera 项目的开发工作,所以需要对原项目代码需要有个详细的了解,在这里先从app的入口做一个整体的分析,让日后的新需求的添加和bug修复有一个比较好的基础。在这里以高通修改的Camera app (SnapdragonCamera ) 做为研究的对象 。研究一款应用应该从这款应用...

2017-06-16 18:20:37

阅读数 478

评论数 0

opengles着色语言中的限定符

在顶点着色器和片元着色器中我们都要使用的着色器语言,我们先来看下常用的限定符:attribute :仅仅可以在顶点着色器中被访问。attribute 是在随着每一个顶点不同而会发生变动的输入值,例如顶点的位置和纹理坐标等。数据中有多少个顶点,管线就调用多少次顶点着色器,每次将顶点的各个属性数据传递...

2017-06-13 23:48:31

阅读数 104

评论数 0

opengles的渲染管线

了解渲染管线的流程对我们学习opengles是有帮助的,下面一起来看看GPU到底是怎么渲染图像的吧; 为了提高渲染的效率,省去绘制每一帧图像时顶点数据的IO麻烦,我们可以把基本数据不变的顶点在初始化阶段将顶点数据经过基本处理后送入顶点缓冲对象。 在顶点着色器是一个可编程的处理单元,功能为执行顶点的...

2017-06-10 23:57:49

阅读数 217

评论数 0

opengles(五) 纹理映射

为了获取更加真实、酷炫的3d物体,就需要用到纹理映射,就相当在前面我们画的形状前再贴一张皮肤上去,下面来看下怎么实现。首先我们需要知道一张纹理图也是有自己的坐标, 二维纹理的坐标分为 S 轴和 T 轴,左上角坐标为(0, 0)点,最大为1个单位长度,所以长度的取值范围为 0 到 1,在这里说明下,...

2017-06-08 10:53:00

阅读数 167

评论数 0

Android触摸事件传递机制

自定义view时经常会碰见触摸事件传递方面的问题,所以需要清楚里面的机制才能处理好相关的问题。Android里一次完整的事件传递主要有三个阶段,分别是分发(dispatch)、拦截(intercept)和消费;其中activity里有:dispatchTouchEvent 和 onTouchEve...

2017-06-04 14:13:18

阅读数 138

评论数 0

opengles(四)让图像动起来

之前画的三角型是无法与用户交互的,为了使交互过程变得更好玩,我们需要监听触摸事件,让图像跟随我们的触摸一起动起来。首先,我们需要重写触摸事件 onTouchEvent ,并且我们想在触摸发生变化时才进行渲染,所以设置渲染模式为 RENDERMODE_WHEN_DIRTY ,在 onTouchEve...

2017-05-29 11:10:21

阅读数 358

评论数 0

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