自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 OpenGL ES 3.0 片段着色器介绍和使用

一、简介 备注:内容来自于《OpenGL ES 3.0编程指南》一书。 片段着色器和顶点着色器一样都是运行在 GPU 上的程序,片段着色器将顶点着色器输出的片段作为输入,并负责输出每个片段的颜色。 片段着色器的输入输出图示: 二、内建变量 内建变量是指着色器语言中已经定义好的,并有特殊意...

2019-08-26 18:50:08 363 1

原创 浅谈 SurfaceView、TextureView、GLSurfaceView、SurfaceTexture

一、SurfaceView SurfaceView 是一个可以在子线程中更新 UI 的 View,且不会影响到主线程。它为自己创建了一个窗口(window),就好像在视图层次(View Hierarchy)上穿了个“洞”,让绘图层(Surface)直接显示出来。但是,和常规视图(view)不同,它...

2019-08-22 20:34:38 941 0

原创 NDK 开发之耗时统计工具类(也适用于 C/C++ 工程)

一、需求分析 在开发阶段中,经常会需要打印出某些方式或步骤的耗时情况,大致需求如下: 能打印出某个步骤的耗时; 有开关可以控制打开和关闭耗时统计; 使用方便。 二、准备工作 之前介绍过一个 log 输出的工具类,可以沿用,链接为:https://blog.csdn.net/af...

2019-08-21 17:37:42 921 1

原创 Android 实时滤镜 Demo(GPUImage + Camera2 实现)

一、应用截图 二、前言 GPUImage 是一个开源的图像渲染的库,使用它可以轻松实现很多滤镜效果,也可以很轻松的定义和实现自己特有的滤镜效果。 地址:https://github.com/cats-oss/android-gpuimage 三、依赖工程 要想使用 GPUImage,使用 And...

2019-08-12 18:50:17 2073 7

原创 OpenGL ES 之 2D 纹理介绍和使用

一、纹理概念 纹理可以简单理解为物体表面的图案,OpenGL ES 3.0 中纹理有:2D纹理、2D纹理数组、3D纹理和立方图纹理。一个纹理的单独数据元素称为“纹素”(texture pixel 纹理像素的缩写)。 1. 纹理的坐标系 2. 2D纹理 2D纹理是最基本和常用的纹理,可...

2019-07-29 15:08:55 581 0

原创 OpenGL 纹理过滤和 mip 贴图

一、概念 1. 纹理过滤 当纹理贴到具体像素上时,像素需要到纹理图像中进行采样,这个过程称为纹理过滤。 纹理过滤通常有两种情况:放大(GL_TEXTURE_MAG_FILTER)和缩小(GL_TEXTURE_MIN_FILTER)。 2. mip 贴图 mip 贴图只适用于纹理过滤缩小的场景,其原...

2019-07-19 17:08:55 283 0

原创 OpenGL ES 3.0 纹理格式介绍及有效的内部格式、格式、类型组合

一、简介 本文主要列举 OpenGL ES 3.0 中纹理格式有哪些,以及有效的内部格式、格式、类型组合。内容来自于 《OpenGL ES 3.0 编程指南 原书第2版》。 纹理格式主要应用于加载图像数据的相关接口,其中用于加载2D和立方图纹理的基本函数是 glTexImage2D,在 3.0...

2019-07-16 17:42:24 1046 0

原创 NDK/JNI 开发之 Java 类和 C 结构体互转示例

一、简介 JNI 开发中,常常会存在对应的 Java 类和 C 结构体需要互相转换。通过本实例学习和了解这个过程。 预备知识: JNI数据类型和类型描述符介绍:https://blog.csdn.net/afei__/article/details/80899758 JNI 方法及使用...

2019-07-12 16:46:29 1557 0

原创 Android Camera2 预览数据格式 YUV_420_888 合集之 I420 转 Bitmap

一、简介 说简单点,就是如何将 YUV I420 格式转换为 RGBA8888 格式。 在 Camera2 API 中,相机预览不能直接使用 NV21 格式获取了,否则会报错一个 “NV21 format is not supported” 的异常。官方推荐我们使用 YUV_420_888 格式,...

2019-07-05 17:59:08 3317 1

原创 ReentrantLock的介绍使用及“生产者消费者”模式实现

一、简介 ReentrantLock 即可重入锁的意思,是 java 控制线程同步的一种方式。和 synchronized 一样都是独占锁,只允许拿到锁的线程访问临界区。 synchronized 优点是使用简单,不需要用户手动操作,加锁解锁的过程都是隐式的。 ReentrantLock 则...

2019-07-02 16:58:52 251 0

原创 Android 使用音量键/耳机按键控制拍照

一、简介 一般手机都有 “音量上键”、“音量下键”,耳机线上通常也有 “上、中、下键”。有时我们会需要用到这些键来执行一些特殊的任务,例如 拍照,那么该怎么做呢? 步骤就是: 监听按键的事件 并执行指定的任务 最方便的方式是在 Activity 的 onKeyDown(int keyCode,...

2019-06-19 15:32:10 1107 1

原创 Android Camera2 获取预览帧的回调数据(带demo)

一、前言 众所周知,在旧Camera接口中,我们通过 setPreviewCallback 或 setPreviewCallbackWithBuffer 接口来获取相机预览的帧数据。然而,在 Camera2 中,这些接口以及不复存在了,那么 Camera2 该如何获取预览帧数据呢? 在 Cam...

2019-06-15 16:22:53 5052 9

原创 OpenGL ES 顶点着色器内建变量和矩阵变换

一、简介 顶点着色器用于基于顶点的操作,例如通过矩阵变换位置、计算照明方程式以生成逐顶点的颜色以及生成或者变换纹理坐标。 常见概念: 属性:用顶点数组提供的顶点数据(关键字:attribute/in) 输出:在图元光栅化阶段为每个生成的片段计算顶点着色器的输出,并作为片段着色器的输入(关键字:v...

2019-04-25 17:20:11 526 0

原创 OpenGL ES 绘制图元:glDrawArrays 和 glDrawElements 介绍

一、简介 在 OpenGL ES 2.0 中,使用 glDrawArrays 和 glDrawElements 两个接口绘制图元。 在 OpenGL ES 3.0 中,又新增了 glDrawRangeElements、glDrawElementsInstanced 和 glDrawArraysIn...

2019-04-11 09:50:38 876 0

原创 OpenGL ES 给着色器(Shader)中传递数据

一、前言 在 OpenGL 开发中,肯定会接触到顶点着色器(vertex shader)和片段着色器(fragment shader),着色器语言的语法这里不做过多介绍,下面是一些着色器的示例: OpenGL ES 2.0 顶点着色器示例: uniform mat4 u_Matrix; //...

2019-04-08 19:16:55 856 0

原创 OpenGL ES 3.0 shader 着色语言基础语法

前言 在 OpenGL 开发中,不得不提到着色语言,着色语言用于编写顶点着色器和片段着色器。接下来就简单介绍一下着色语言的一些基础语法。 备注:内容来自于《OpenGL ES 3.0编程指南》一书。 一、版本规范 在 OpenGL ES 3.0 中,顶点着色器和片段着色器的第一行总是声明着...

2019-03-31 00:38:34 507 0

原创 OpenGL ES 3.0 对比 OpenGL ES 2.0 的异同点和新功能

一、相同点 相比于 OpenGL ES 1.x 系列的固定功能管线,OpenGL ES 2.0 和 OpenGL ES 3.0 都是可编程图形管线。开发者可以自己编写图形管线中的 顶点着色器 和 片段着色器 两个阶段的代码。 二、不同点 OpenGL ES 3.0 是向后兼容 OpenGL ...

2019-03-28 00:55:32 4057 1

原创 你可能不知道的几个 git 实用指令

前言 很常见的不说了,介绍几个你们可能不知道但是却实用的命令吧,数量不多。 一、克隆工程 我们都知道克隆某个工程的代码使用 “git clone url”,这样默认拉取的是 master 分支的代码。如果你只想拉取某个分支的代码,可以使用该命令: git clone url -b <...

2019-02-28 23:29:22 445 1

原创 Android Studio 配置一键生成 JNI 头文件工具

一、前言 我们知道进行 NDK 开发中,native 方法大多是需要进行静态注册的,如果手动一个个写,不仅容易出错,而且繁琐和浪费时间。那么有什么好用的工具可以使用呢? 这个其实是有的,就在我们的JDK中就有一个 javah.exe 工具帮助我们生成 JNI 的头文件,我们只需要将其配置到 And...

2019-02-28 00:03:17 2076 4

原创 Android Gradle 使用指南(收藏向)

前言 目前 Android 的开发大都使用 Android Studio 了,而 Android Studio 所使用的 Gradle 也是大有文章,其中有许多可以定制和使用的技巧。 Gradle 的语法是使用的 Groovy 语言,这里不做详细介绍了。 下面是我总结的一些常用的选项以及释义...

2019-02-27 00:18:55 839 0

原创 自定义Camera系列之:GLSurfaceView + Camera2

一、前言 假如你要使用 OpenGL ES 来渲染相机的话,使用 GLSurfaceView 将是一个很常用的选择。 这里介绍 GLSurfaceView + Camera2 的组合。 如果你对 Camera2 的相关类和接口还不熟悉,可以先看看下面这些介绍: CameraManager详解 C...

2019-02-14 00:16:19 1519 1

原创 自定义Camera系列之:TextureView + Camera2

一、前言 之前已经介绍过过时的旧 Camera 的使用了,毕竟在从 Android 5.0 后推荐使用 Camera2 了,所以现在开始介绍 Camera2 相关使用。该篇介绍 TextureView ,这也是谷歌示例中使用的组合。 如果你对 Camera2 的相关类和接口还不熟悉,可以先看看...

2019-01-31 00:12:52 2227 6

原创 自定义Camera系列之:SurfaceView + Camera2

一、前言 之前已经介绍过过时的旧 Camera 的使用了,毕竟在从 Android 5.0 后推荐使用 Camera2 了,所以现在开始介绍 Camera2 相关使用。老规矩还是从 SurfaceView 说起。 如果你对 Camera2 的相关类和接口还不熟悉,可以先看看下面这些介绍: ...

2019-01-27 23:43:36 2071 2

原创 自定义Camera系列之:GLSurfaceView + Camera

一、前言 假如你要使用 OpenGL ES 来渲染相机的话,使用 GLSurfaceView 将是一个很常用的选择。 这里介绍 GLSurfaceView + Camera 的组合。虽然从 Android 5.0 后推荐使用 Camera2 了,不过某些旧工程或者需要适配低版本的场景还是用得着...

2019-01-23 00:08:12 1347 7

原创 Android Camera2 之 CaptureRequest 和 CaptureResult

CaptureRequest 介绍 一、简介 CaptureRequest 表示一个捕捉的请求。我们可以为不同的场景(预览、拍照)创建不同的捕捉请求,并可以配置不同的捕捉属性,如:预览分辨率,预览目标,对焦模式、曝光模式等等。 官方文档链接:https://developer.android...

2019-01-12 00:32:01 6684 8

原创 Android Camera2 之 CameraCaptureSession 详解

一、简介 CameraCaptureSession 是一个事务,用来向相机设备发送获取图像的请求。 主要为 setRepeatingRequest() 和 capture() 方法。setRepeatingRequest() 是重复请求获取图像数据,常用于预览或连拍,capture() 是获取...

2019-01-08 23:57:57 6921 4

原创 Android Camera2 之 CameraCharacteristics 详解

一、简介 CameraCharacteristics 是专门用来描述相机设备属性的一个类,继承自 CameraMetadata 类。给对给定的相机,它里面所包含的属性都是 固定的 。 包括:曝光补偿(Exposure compensation)、自动曝光/自动对焦/自动白平衡模式(AE / A...

2019-01-07 00:08:40 7808 1

原创 Android Camera2 之 CameraDevice 详解

一、简介 CameraDevice 是一个连接的相机设备代表,你可以把它看作为相机设备在 java 代码中的表现。类比于旧 API 中的 Camera 类。 官方文档链接:https://developer.android.google.cn/reference/android/hardware/...

2018-12-29 17:59:59 3692 3

原创 Android Camera2 之 CameraManager 详解

一、简介 CameraManager 是系统服务之一,专门用于 检测 和 打开相机,以及 获取相机设备特性。 官方文档其实说的蛮清楚的了,英文好的同学也可以直接看官方文档把:https://developer.android.google.cn/reference/android/hardwa...

2018-12-29 17:30:06 6486 0

原创 自定义Camera系列之:TextureView + Camera

一、前言 上一篇介绍了 自定义Camera系列之:SurfaceView + Camera,接着我们介绍使用 TextureView + Camera 的组合。 为什么选择 TextureView ? 由于 SurfaceView 是拥有一个独立的 Surface,不在 View hiera...

2018-12-26 22:11:13 2598 1

原创 自定义Camera系列之:SurfaceView + Camera

一、前言 之前一直想把 Camera 系列的写一下,拖了很久,现在慢慢填坑吧。 首先介绍 SurfaceView + Camera 的组合。虽然从 Android 5.0 后推荐使用 Camera2 了,不过某些旧工程或者需要适配低版本的场景还是用得着旧的 Camer API 的。 为什么选...

2018-12-25 23:34:16 3583 2

原创 Android 性能优化总结

一、简介 性能调优是开发中少不了的一个过程,同时也是一名优秀的程序员需要掌握的基本技能。下面我们来看一下在 Android 中可以从哪些方面来进行性能优化吧。 二、内存优化 内存是很重要的一个模块了,所以我也将其放在了第一位来说明。那么如何来优化我们应用的内存呢? 当应用内存不足时,将发生内存溢出...

2018-12-18 23:36:00 1089 0

原创 LeetCode : 567. 字符串的排列(Permutation in String)解答

567. 字符串的排列 给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的排列。 换句话说,第一个字符串的排列之一是第二个字符串的子串。 示例1: 输入: s1 = “ab” s2 = “eidbaooo” 输出: True 解释: s2 包含 s1 的排列...

2018-12-17 22:51:37 1823 0

原创 智能指针之 shared_ptr 的使用

一、智能指针 1. 什么是智能指针 简单地说,C++智能指针是包含重载运算符的类,其行为像常规指针,但智能指针能够及时、妥善地销毁动态分配的数据,并实现了明确的对象生命周期,因此更有价值。 2. 常规指针存在的问题 C++在内存分配、释放和管理方面向程序猿提供了全面的灵活性。但是这种灵活性...

2018-12-17 17:50:17 596 0

原创 Android NDK 面试题汇总

一、谈谈你对 JNI 和 NDK 的理解 JNI: JNI 是 Java Native Interface 的缩写,即 Java 的本地接口。 目的是使得 Java 与本地其他语言(如 C/C++)进行交互。 JNI 是属于 Java 的,与 Android 无直接关系。 NDK: N...

2018-12-08 00:29:20 5086 3

原创 EGL 介绍和使用

一、简介 EGL 是渲染 API(如 OpenGL ES)和原生窗口系统之间的接口。 通常来说,OpenGL 是一个操作 GPU 的 API,它通过驱动向 GPU 发送相关指令,控制图形渲染管线状态机的运行状态,但是当涉及到与本地窗口系统进行交互时,就需要这么一个中间层,且它最好是与平台无关的...

2018-12-06 23:28:21 7912 0

原创 OpenGL ES 3.0 渲染管线介绍

一、前言 OpenGL 1.x 系列采用的还是固定功能管线。 从 OpenGL ES 2.0 开始采用了可编程图形管线。 而 OpenGL ES 3.0 兼容了 2.0,并加入了很多 2.0 不具备的功能。 Android 4.3 之后开始支持 OpenGL ES 3.0。 二、...

2018-12-06 00:22:05 1264 0

原创 Android 为例编写一个 OpenGL ES 3.0 实例,Native & Java 两种实现

一、简介 通过这个 Sample,你将了解到 Android 中是怎么使用 OpenGL ES 通过绘制一个简单的静态三角形,来简单入门和了解它大致的流程(类似于 HelloWorld 工程) 介绍使用 Native 层 和 Java 层 两种方式来分别实现 本文暂不介绍具体的语法,但...

2018-12-05 10:24:04 2133 1

原创 Android 进程通信 (IPC) 之 AIDL 的使用

一、简介 AIDL 是 Android Interface Definition Language 的缩写,是 Android 定义的一种专门用于进程间通信的接口语言,它的语法也和 java 比较类似。 二、特点 我们知道 Android 中还有一种轻量级的进程通信方式——Messenger...

2018-11-28 23:42:36 813 0

原创 LeetCode : 24. 两两交换链表中的节点(Swap Nodes In Pairs)解答

24. 两两交换链表中的节点 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 示例: 给定 1->2->3->4, 你应该返回 2->1->4-&gt...

2018-11-19 22:26:19 542 0

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