自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

字节流动

技术、认知、生活与感悟

  • 博客(166)
  • 收藏
  • 关注

原创 FFmpeg 开发(12):Android FFmpeg 实现带滤镜的微信小视频录制功能

该文章首发于微信公众号:字节流动FFmpeg 开发系列连载:FFmpeg 开发(01):FFmpeg 编译和集成FFmpeg 开发(02):FFmpeg + ANativeWindow 实现视频解码播放FFmpeg 开发(03):FFmpeg + OpenSLES 实现音频解码播放FFmpeg 开发(04):FFmpeg + OpenGLES 实现音频可视化播放FFmpeg 开发(05):FFmpeg + OpenGLES 实现视频解码播放和视频滤镜FFmpeg .

2021-03-21 21:45:31 32226

原创 字节流动 OpenGLES 技术交流群来啦

字节流动 OpenGLES 技术交流群之前根据自己学习 OpenGLES 的心路历程,将自己的学习过程和在项目中的简单应用记录下来,形成了一个 Android OpenGLES 系统性的学习专辑。Android OpenGL ES 从入门到精通系统性学习教程很荣幸获得一些大佬的推荐,然后陆陆续续有不少朋友加我好友,强烈要求我建一个相关的技术交流群。刚好最近有精力折腾这个事情,索性就建了一个技术交流群,欢迎扫码进群:技术交流群主要讨论 OpenGL ES 相关技术问题,大家有遇到相关的疑问、难题,

2020-09-11 18:39:41 1456 2

原创 Android OpenGL ES FFmpeg 从入门到精通系统性学习教程

为什么要写这个教程目前这个 OpenGL ES 极简教程的更新暂时告一段落,说是教程,其实自知有种吹嘘的味道,很荣幸获得了阮一峰老师的推荐。因为在工作中频繁使用 OpenGL ES 做一些特效、滤镜之类的效果,加上平时学到的的知识点也比较细碎,就想着去系统地学习下 OpenGL ES 相关开发知识,并将学习过程记录下来。另外,这个 Android OpenGL ES 极简教程也是为音视频开发做准备的,它的内容涵盖了 OpenGL ES 3.0 的核心知识点,包含了 GLES3.0 的新特性,如 Tra

2020-06-19 13:07:18 49690 5

原创 一文掌握 YUV 图像的基本处理

原创文章,未经授权禁止转载YUV 的由来YUV 是一种色彩编码模型,也叫做 YCbCr,其中 “Y” 表示明亮度(Luminance),“U” 和 “V” 分别表示色度(Chrominance)和浓度(Chroma)。YUV 色彩编码模型,其设计初衷为了解决彩色电视机与黑白电视的兼容问题,利用了人类眼睛的生理特性(对亮度敏感,对色度不敏感),允许降低色度的带宽,降低了传输带宽。在计算...

2019-06-28 18:49:48 24035 4

原创 Vulkan 开发(十三):Vulkan 帧缓冲区(FrameBuffer)

每个帧缓冲区包含一组图像视图,这些图像视图表示实际的图像资源,可以是颜色附件、深度附件或模板附件,帧缓冲区用于将渲染输出写入这些图像中(存储渲染通道(RenderPass)输出的图像)。在Vulkan中,每个帧缓冲区至少需要一个颜色附件,而这个颜色附件可以是与SwapChain关联的ImageView。

2025-01-07 16:25:17 441

原创 Android Java 版本的 MSAA OpenGL ES 多重采样

最近多次被小伙伴问到 OpenGL 多重采样,其实前面文章里多次讲过了,就是构建2个缓冲区,多重采样缓冲区和目标解析缓冲区。

2024-12-27 10:22:06 594

原创 OpenGL 几何着色器高级应用

几何着色器(Geometry Shader)是 OpenGL 管线中的可选着色器阶段,位于顶点着色器(Vertex Shader) 和光栅化阶段 之间。其核心功能是基于输入的图元(如点、线或三角形),生成新的图元,或对输入的图元进行修改。

2024-12-12 09:36:19 329 2

原创 Vulkan 开发(十二):Vulkan 渲染通道

Vulkan 渲染通道(RenderPass)定义了整个渲染管线的一次执行过程,包括了渲染过程中使用的所有资源和操作的描述(比如指定渲染管线的渲染目标,告诉管线要渲染到哪里RenderPass 本质上是一个渲染流程的完整描述(管理渲染流程),包含了如何渲染这些数据的元数据和指令,但不包含实际的数据(图像),通过与 Framebuffer 结合来获取实际的图像数据。在 Vulkan 编程中,RenderPass 是必不可少的,它必须包含一个或多个子通道(SubPass)。

2024-12-09 17:41:44 880

原创 一文掌握 OpenGL 几何着色器的使用

几何着色器(Geometry Shader) OpenGL 管线中的可选着色器阶段,位于顶点着色器(Vertex Shader) 和光栅化阶段 之间。其核心功能是基于输入的图元(如点、线或三角形),生成新的图元,或对输入的图元进行修改。输入是一个图元(例如一个点、线段或三角形);输出可以是零个、一个或多个新的图元。几何着色器处理后,输出的是一个或多个新的图元将会被传递到光栅化阶段。光栅化负责将几何图形(如三角形)转换为片段(即潜在的像素),并为每个片段计算属性(如颜色、纹理坐标、深度等)。

2024-12-09 11:10:57 5458 1

原创 简历怎么写?这些问题不可忽视(附简历模版)

上次分享了程序员简历存在的一些共性问题,在此基础上,本篇继续补充和整理,供准备求职的同学参考,希望能对大家有所帮助。我把这些常见的问题分享出来,可以对照着自己的简历看下,把相关问题都排查一遍,我相信你的简历基本上就没什么问题了。当然了,避免出现这些问题不一定可以帮你通过面试,但绝对是锦上添花。有同学希望分享一个优秀的简历作为参考,这个其实涉及隐私,不方便分享出来。针对这些同学的需求,我也准备了一个简历模版来给你参考,文末加我微信领取。

2024-12-02 19:25:09 700 1

原创 简历怎么写?这些问题不可忽视(附简历模版)

上次分享了程序员简历存在的一些共性问题,在此基础上,本篇继续补充和整理,供准备求职的同学参考,希望能对大家有所帮助。我把这些常见的问题分享出来,可以对照着自己的简历看下,把相关问题都排查一遍,我相信你的简历基本上就没什么问题了。当然了,避免出现这些问题不一定可以帮你通过面试,但绝对是锦上添花。有同学希望分享一个优秀的简历作为参考,这个其实涉及隐私,不方便分享出来。针对这些同学的需求,我也准备了一个简历模版来给你参考,文末加我微信领取。

2024-12-02 16:48:17 277

原创 Vulkan 开发(十一):Vulkan 交换链

FIFO 呈现模式的交换链Vulkan 交换链(Swapchain)是 Vulkan 应用程序与窗口系统之间的一座桥梁,负责将渲染结果呈现给用户。换个说法,交换链是一种图元绘制结果呈现的机制,它可以将绘制结果渲染到平台相关的展示窗口/展示层当中。交换链包含一组图像(一般作为渲染目标),这些图像被用于在屏幕上显示渲染的帧。交换链中的图像个数与驱动层的实现是密切相关的。如果交换链中有两幅图像,那么称为双缓存,如果有三幅图像,那么称作三缓存。

2024-11-14 16:50:23 1322 2

原创 Vulkan 开发(十):Vulkan 窗口表面(Surface)

Vulkan 系列文章:1. 开篇,Vulkan 概述2. Vulkan 实例3. Vulkan 物理设备4. Vulkan 设备队列5. Vulkan 逻辑设备6. Vulkan 内存管理7. Vulkan 缓存8. Vulkan 图像9. Vulkan 图像视图Vulkan 是一个平台无关的图形 API ,这意味着它不能直接与特定的窗口系统(如 Windows、Linux 或 macOS 的窗口系统)交互。为了解决这个问题,Vulkan 引入了窗口系统集成(Window System Integrati

2024-11-14 16:48:19 1103 1

原创 OpenGL ES 文字渲染进阶--渲染中文字体

每个 2D 方块需要 6 个顶点,每个顶点又是由一个 4 维向量(一个纹理坐标和一个顶点坐标)组成,因此我们将VBO 的内存分配为 6*4 个 float 的大小。片段着色器有两个 uniform 变量:一个是单颜色通道的字形位图纹理,另一个是文字的颜色,我们可以同调整它来改变最终输出的字体颜色。使用 FreeType 渲染中文和英文字符在流程上基本一致,都是根据字符的编码值来加载位图,然后上传纹理。,它小巧、高效、高度可定制,主要用于加载字体并将其渲染到位图,支持多种字体的相关操作。

2024-11-13 15:46:53 7406 1

原创 OpenGL ES 文字渲染方式有几种?

在音视频或 OpenGL 开发中,文字渲染是一个高频使用的功能,比如制作一些酷炫的字幕、为视频添加水印、设置特殊字体等等。实际上 OpenGL 并没有定义渲染文字的方式,所以我们最能想到的办法是:将带有文字的图像上传到纹理,然后进行纹理贴图。本文分别介绍下在应用层和 C++ 层常用的文字渲染方式。

2024-11-13 15:41:08 7528 1

原创 OpenGL ES 共享上下文实现多线程渲染

OpenGL ES 共享上下文时,可以共享哪些资源?

2024-11-13 15:28:39 7139

原创 OpenGL ES 共享上下文实现多线程渲染

OpenGL ES 共享上下文时,可以共享哪些资源?共享上下文实现多线程渲染EGL 概念回顾查询绘图表面的可用类型和配置;,EGL 屏蔽了不同平台的差异(Apple 提供了自己的 EGL API 的 iOS 实现,自称 EAGL)。本地窗口相关的 API 提供了访问本地窗口系统的接口,而 E,接下来 OpenGL ES 就可以在这个渲染表面上绘制。egl、opengles 和设备之间的关系图片中:Display (EGLDisplay) 是对实际显示设备的抽象;

2024-11-13 15:17:09 7731 1

原创 这几个小习惯,治好了我的精神内耗

直到后来我意识到,要打破这种日复一日的循环,必须尝试做些从未做过的事情,让自己置身于全新的环境,给大脑带来新的刺激,重新建立与世界的联系,找回对生活的掌控感。刷短视频是了解外界信息的一种渠道,原本无可厚非,但短视频软件和算法的设计极易让人上瘾,导致专注力下降,变得烦躁,逐渐失去耐心,难以专注阅读长文或观看长视频。每天过着“两点一线”的生活,日复一日,几乎一成不变,我就在想:如果这个世界是虚拟的,那我就是这个虚拟世界的 NPC (游戏中由电脑控制的角色,自主意识)。此外,长时间低头看手机对颈椎负担巨大。

2024-11-12 19:37:38 147 1

原创 Vulkan 开发(九):Vulkan 图像视图

Vulkan 图像视图(VkImageView)用于描述如何访问 VkImage 对象以及访问图像的哪一部分。图像视图定义了图像的格式和访问方式,它允许渲染管线与图像进行交互,无论是作为纹理、颜色附件还是深度/模板附件。在交换链中,我们需要为每个图像创建一个基本的图像视图,以便将它们用作颜色附件。VkImage 作为纹理采样时,也必须要创建其对应的图像视图来更新描述符集 (DescriptorSet)。

2024-11-10 21:27:18 980 1

原创 什么岗位需要学习 OpenGL ES ?说说 3.X 的新特性

(应用程序编程接口)。它是标准 OpenGL 3D 图形库的一个子集,专门为资源受限的环境(如手机、平板电脑、游戏机和其他便携式设备)进行了优化。由于其在移动设备上的广泛适用性,OpenGL ES是学习移动3D图形编程的重要工具之一。随着技术的发展,新的图形 API(如 Vulkan 和 Metal )也开始在移动平台上获得关注,但 OpenGL ES 仍然是一个重要的基准和学习起点。

2024-11-10 12:13:17 13533

原创 Vulkan 开发(八):Vulkan 图像

正确的使用VkImageLayout可以保证图像在各个方面操作阶段之间的有效转换,优化性能并避免数据冲突。

2024-11-10 11:53:30 784 1

原创 OpenGL 学了那么久了,glViewport 你真的会用吗?

OpenGL中的 glViewport 函数用于定义视口(Viewport),即确定窗口中显示的区域。

2024-11-09 23:20:57 10708 1

原创 Vulkan 开发(七):Vulkan 缓存

Vulkan 中的缓存资源通过 VkBuffer 对象来表示, 它是一种用于存储通用数据的资源,可以用来存储顶点数据、索引数据、Uniform 数据等。VkBuffer 表示的是一个线性内存块,这意味着它的内存布局是连续的,类似于数组。这种布局特别适合存储顺序访问的数据,如顶点数据和索引数据,但也支持随机访问。我们创建 VkBuffer 时,可以通过设置 VkBufferCreateInfo 不同的 usage 标志来指定 VkBuffer 的用途。

2024-11-09 23:15:47 657

原创 Vulkan 开发(六):Vulkan 内存管理

本文避免一上去就讲一大堆代码,奉行概念先行。概念掌握的差不多了,再去看代码, 这样思路不容易卡住,大致就可以把握住整体代码逻辑,知道这一块代码是干嘛的,那一块是什么目的。

2024-11-09 23:13:35 831 1

原创 Vulkan 开发(五):Vulkan 逻辑设备

图片来自《Vulkan 应用开发指南》1.2.3.4.在 Vulkan 中,举例来说,物理设备可能包含了三种队列:图形、计算和传输。但是逻辑设备创建的时候,可以只关联一个单独的队列(比如图形),这样我们就可以很方便地向队列提交指令缓存了。

2024-10-29 21:13:23 943

原创 Vulkan 开发(四):Vulkan 设备队列

在Vulkan中,队列设备(Queue)是一个重要的概念。图片来自《Vulkan学习指南》每个物理设备包含一个或多个队列族(Queue Family),每个队列族包含一个或多个队列。这些队列用于处理不同类型的任务,如图形渲染、计算任务和传输操作。图片来自《Vulkan学习指南》Vulkan将设备队列按照队列族的方式组织,组织方式有以下特点:1. 一个队列族可以支持一到多个功能。2.一个队列族中包含一个或多个队列。3.同一个队列族中的所有队列支持相同的功能。

2024-10-29 20:58:53 765 1

原创 Vulkan 开发(三):Vulkan 物理设备

图片来自《 Vulkan 应用开发指南》上一节了解了 Vulkan 实例,一旦有了实例,就可以查找系统里安装的与 Vulkan 兼容的物理设备。,通常是系统的一部分--显卡、加速器、数字信号处理器或者其他的组件。系统里有固定数量的物理设备,每个物理设备都有自己的一组固定的功能。,为此 Vulkan 提供列举出系统中支持 Vulkan 的所有物理设备功能,开发者可通过 vkEnumeratePhysicalDevices() 函数枚举支持 Vulkan 的物理设备。

2024-10-20 11:37:09 747

原创 Vulkan 开发(二):Vulkan 实例

一文对比了 Vulkan 和 OpenGL 的特点,重点介绍了 Vulkan 的优势体现在哪里,本文将接着介绍 Vulkan 的一些重要概念。

2024-10-19 15:01:01 1203 1

原创 Vulkan 开发(一):Vulkan 概述

Vulkan 是由 Khronos Group 开发的一种现代、高性能的图形和计算 API。它设计用于替代 OpenGL,并提供的硬件控制。与 OpenGL 相比,Vulkan 可以更详细的向显卡描述你的应用程序打算做什么,从而可以获得更好的性能和更小的驱动开销。Vulkan 的开发者来自图形领域的各行各业,有 GPU 厂商,有系统厂商,有游戏引擎厂商等。所以 Vulkan 诞生之初就决定了它一定要有跨平台属性,目的就是成为行业内的统一标准。

2024-10-19 14:16:09 1686 6

原创 深圳有哪些神仙公司?

955 工作制,弹性工作时间,不打卡,员工持股计划,节日礼金,交通补贴,餐补,特别注重女性员工,连续 5 年入选“彭博性别平等指数”还曾荣获“最具女性关怀雇主”称号。双休,氛围轻松简单,有很多工会活动,五险一金,带薪年假,定期休检,春节探亲路费补贴,节日福利,团建旅游;公司配备足球场,篮球场,羽毛球馆,健身房;世界 500 强老牌企业,弹性工作制,可远程办公,很少加班,女性友好企业。头部音乐公司,发展前景好,福利待遇超一线水平,班车接送,餐补房补,24 小时健身房,免费早餐+下午茶,不定期举办明星音乐会。

2024-10-11 16:18:16 451

原创 GLSL 着色器(Shader)编程语言入门教程(珍藏版)

可能代表了一个空间坐标(x,y,z,w),或者代表了一个颜色(r,g,b,a),再或者代表一个纹理坐标(s,t,p,q)。下文中的 类型 T可以是 float, vec2, vec3, vec4,且可以逐分量操作.下文中的 类型 T可以是 float, vec2, vec3, vec4,且可以逐分量操作.下文中的 类型 T可以是 float, vec2, vec3, vec4,且可以逐分量操作.下文中的 类型 T可以是 float, vec2, vec3, vec4,且可以逐分量操作.

2024-10-11 15:59:54 8918

原创 你觉得学历在贬值吗?

从上图可以看出,进入 21 世纪我国的高等教育规模迅速扩大,高考录取率一度逼近 90% ,当然这主要与中国经济的快速发展和对人才需求的增加相适应。最近总是看到某某一二线城市某个街道办招聘,应聘者不乏哈佛、清北的博士和硕士,这种新闻频频上热搜,引起人们对学历贬值的讨论。这“一增一减”意味着学历贬值的趋势在增大,个人获得的文凭看起来是上涨了,但是它在市场上的价值却缩水了。学历是可以贬值的,但是自己所学的知识和技能是不会的,多去关注自我,终身学习。这年头,天赋异禀,真不如另辟蹊径,与君共勉。

2024-06-05 10:42:22 316

原创 Shader GLSL 3D旋转函数

【代码】Shader GLSL 3D旋转函数。

2024-05-24 16:45:43 209

原创 OpenGL ES 面试高频知识点(二)

EGL 是 OpenGL ES 和本地窗口系统(Native Window System)之间的通信接口与设备的原生窗口系统通信;查询绘图表面的可用类型和配置;创建绘图表面;在OpenGL ES 和其他图形渲染API之间同步渲染;管理纹理贴图等渲染资源。OpenGL ES 的平台无关性正是借助 EGL 实现的,EGL 屏蔽了不同平台的差异(Apple 提供了自己的 EGL API 的 iOS 实现,自称 EAGL)。

2024-05-11 14:16:04 23375 1

原创 OpenGL 使用 PBO 零拷贝替换 glReadPixels

**OpenGL PBO(Pixel Buffer Object),被称为像素缓冲区对象,主要被用于异步像素传输操作。PBO 仅用于执行像素传输,不连接到纹理,且与 FBO (帧缓冲区对象)无关。**

2024-04-24 19:12:03 26763

原创 OpenGL 多重采样抗锯齿(MSAA,Multisample Anti-Aliasing)

多重采样抗锯齿(MSAA,Multisample Anti-Aliasing)是一种用于减少图形渲染中锯齿(aliasing)效应的技术。

2024-04-15 20:29:11 16493

原创 OpenGL ES 面试高频知识点

VBO(Vertex Buffer Object)是指顶点缓冲区对象,VAO(Vertex Array Object)是指顶点数组对象。OpenGL ES 2.0 编程中,用于绘制的顶点数组数据首先保存在 CPU 内存,在调用 glDrawArrays 或者 glDrawElements 等进行绘制时,需要将顶点数组数据从 CPU 内存拷贝到显存。但是很多时候我们没必要每次绘制的时候都去进行内存拷贝,如果可以在显存中缓存这些数据,就可以在很大程度上降低内存拷贝带来的开销。

2024-04-03 19:43:31 13900

原创 OpenGL 实现“人像背景虚化“效果

手机上的人像模式,也被人们称作“背景虚化”或 ”双摄虚化“ 模式,也称为 Bokeh 模式,能够在保持画面中指定的人或物体清晰的同时,将其他的背景模糊掉。突出画面的主体部分,主观上美感更强烈。,例如美颜、肤色优化以及基于深度信息的虚化等,最终提供清晰突出的人像照片。所以,人像模式的实现对于软件层面来说,关键还是有能精确输出带有深度(景深)信息的图像分割算法。

2024-03-28 19:43:53 32133

原创 OpenGL ES 3.0 从入门到精通系统性学习教程

因为在工作中频繁使用 OpenGL ES 做一些特效、滤镜之类的效果,加上平时学到的的知识点也比较细碎,就想着去系统地学习下 OpenGL ES 相关开发知识,并将学习过程记录下来。

2024-02-26 10:41:25 24459

原创 OpenGL ES (OpenGL) Compute Shader 计算着色器是怎么用的?

OpenGL ES (OpenGL) Compute Shader 是怎么用的?Compute Shader 是 OpenGL ES(以及 OpenGL )中的一种 Shader 程序类型,用于在GPU上执行通用计算任务。与传统的顶点着色器和片段着色器不同,Compute Shader 被设计用于在 GPU 上执行各种通用计算任务,而不是仅仅处理图形渲染。Compute Shader 使用场景广泛,除了图像处理之外,还可以用于物理模拟计算、数据加密解密、机器学习、光线追踪等。

2024-02-25 22:01:32 38320 1

空空如也

空空如也

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

TA关注的人

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