5 阿飞__

尚未进行身份认证

我要认证

Android开发工程师,熟悉 Java、NDK(JNI)、C++ 等

等级
TA的排名 2k+

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

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

2019-08-26 18:50:08

浅谈 SurfaceView、TextureView、GLSurfaceView、SurfaceTexture

一、SurfaceViewSurfaceView 是一个可以在子线程中更新 UI 的 View,且不会影响到主线程。它为自己创建了一个窗口(window),就好像在视图层次(View Hierarchy)上穿了个“洞”,让绘图层(Surface)直接显示出来。但是,和常规视图(view)不同,它没有动画或者变形特效,一些 View 的特性也无法使用。概括:SurfaceView 独立于视图...

2019-08-22 20:34:38

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

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

2019-08-21 17:37:42

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

一、应用截图二、前言GPUImage 是一个开源的图像渲染的库,使用它可以轻松实现很多滤镜效果,也可以很轻松的定义和实现自己特有的滤镜效果。地址:https://github.com/cats-oss/android-gpuimage三、依赖工程要想使用 GPUImage,使用 Android Studio 只需要在 build.gradle 里面添加相关的依赖即可。implemen...

2019-08-12 18:50:17

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

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

2019-07-29 15:08:55

OpenGL 纹理过滤和 mip 贴图

一、概念1. 纹理过滤当纹理贴到具体像素上时,像素需要到纹理图像中进行采样,这个过程称为纹理过滤。纹理过滤通常有两种情况:放大(GL_TEXTURE_MAG_FILTER)和缩小(GL_TEXTURE_MIN_FILTER)。2. mip 贴图mip 贴图只适用于纹理过滤缩小的场景,其原理是将纹理按照2的倍数进行缩放,直至图像1*1的大小。在贴图时,OpenGL 会自动选择合适大小的纹理...

2019-07-19 17:08:55

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

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

2019-07-16 17:42:24

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

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

2019-07-12 16:46:29

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

一、简介说简单点,就是如何将 YUV I420 格式转换为 RGBA8888 格式。在 Camera2 API 中,相机预览不能直接使用 NV21 格式获取了,否则会报错一个 “NV21 format is not supported” 的异常。官方推荐我们使用 YUV_420_888 格式,关于这个格式的介绍,可以参考官方文档或者百度。如果获取到相机预览数据,并转化为 YUV I420 格...

2019-07-05 17:59:08

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

一、简介ReentrantLock 即可重入锁的意思,是 java 控制线程同步的一种方式。和 synchronized 一样都是独占锁,只允许拿到锁的线程访问临界区。synchronized 优点是使用简单,不需要用户手动操作,加锁解锁的过程都是隐式的。ReentrantLock 则需要我们手动加锁和解锁(解锁操作通常放在 finally 代码块中保证执行),虽然使用更复杂但是其灵活性更好...

2019-07-02 16:58:52

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

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

2019-06-19 15:32:10

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

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

2019-06-15 16:22:53

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

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

2019-04-25 17:20:11

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

一、简介在 OpenGL ES 2.0 中,使用 glDrawArrays 和 glDrawElements 两个接口绘制图元。在 OpenGL ES 3.0 中,又新增了 glDrawRangeElements、glDrawElementsInstanced 和 glDrawArraysInstanced 三个接口用于绘制图元。二、函数介绍1. glDrawArrays/** * @...

2019-04-11 09:50:38

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

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

2019-04-08 19:16:55

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

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

2019-03-31 00:38:34

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 ES 2.0 的。也就是说使用 2.0 编写的应用程序是可以在 3.0 中继续使用的。基于 2.0 拥有的...

2019-03-28 00:55:32

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

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

2019-02-28 23:29:22

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

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

2019-02-28 00:03:17

Android Gradle 使用指南(收藏向)

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

2019-02-27 00:18:55

查看更多

CSDN身份
  • 博客专家
勋章 我的勋章
  • GitHub
    GitHub
    绑定GitHub第三方账户获取
  • 专栏达人
    专栏达人
    授予成功创建个人博客专栏的用户。专栏中添加五篇以上博文即可点亮!撰写博客专栏浓缩技术精华,专栏达人就是你!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 1024勋章
    1024勋章
    #1024程序员节#活动勋章,当日发布原创博客即可获得
  • 勤写标兵Lv1
    勤写标兵Lv1
    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。