自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

洪伟的专栏

长兄于病视神,未有形而除之,故名不出于家。中兄治病,其在毫毛,故名不出于闾。若扁鹊者,镵血脉,投毒药,副肌肤,闲而名出闻于诸侯。

  • 博客(231)
  • 资源 (10)
  • 收藏
  • 关注

原创 【Vulkan 入门系列】本地窗口改变后重置、资源清理和 GLSL 分析(十一)

最后一节主要介绍本地窗口改变后重置、资源清理和 GLSL 分析,本地窗口改变后重置可能涉及新建 Surface 和重建交换链。资源清理涉及销毁各种使用的 Vulkan 资源。GLSL 分析涉及顶点着色器和片段着色器。

2025-05-25 07:09:30 681

原创 【Vulkan 入门系列】图像渲染,让图像动起来(十)

这一节我们主要学习如何渲染图像。展示了 Vulkan 渲染管线的典型控制流程,突出了其显式控制的特性,需要开发者精确管理资源生命周期和同步机制。

2025-05-25 07:07:47 335

原创 【Vulkan 入门系列】创建和配置描述符集,创建同步对象(九)

本节介绍了在 Vulkan 中创建和配置描述符集(Descriptor Sets)的过程。描述符集用于将资源(如缓冲区和图像)绑定到着色器,是 Vulkan 渲染管线中的重要机制。通过 createDescriptorSets 函数,首先分配描述符集,然后为每个帧配置 Uniform 缓冲区和图像采样器信息。具体步骤包括:创建描述符集布局数组、设置分配信息、调整描述符集大小、分配描述符集,以及为每个描述符集配置缓冲区和图像信息。最后,通过 vkUpdateDescriptorSets 更新描述符集,确保资源

2025-05-10 15:14:00 505

原创 【Vulkan 入门系列】创建纹理采样器、Uniform 缓冲区、描述符池(八)

本节介绍了在 Vulkan 中创建纹理采样器、Uniform 缓冲区和描述符池的过程。首先,通过 createTextureSampler 函数创建纹理采样器,配置了过滤模式、寻址方式、各向异性过滤、边界颜色等参数,确保纹理在着色器中正确采样。接着,createUniformBuffers 函数用于管理 Uniform 缓冲区,确保多帧渲染中的数据安全性和高效性。最后,描述符池的创建为描述符集分配提供了资源。这些步骤是 Vulkan 渲染管线中处理纹理和缓冲区数据的关键环节,为后续的渲染操作奠定了基础。

2025-05-10 15:10:38 924

原创 【Vulkan 入门系列】创建纹理图像,将暂存区图像拷贝到纹理图像,创建纹理图像视图(七)

这一节主要关注创建纹理图像,将暂存区图像拷贝到纹理图像和创建纹理图像视图。

2025-04-20 18:14:44 986

原创 【Vulkan 入门系列】创建帧缓冲、命令池、命令缓存,和获取图片(六)

这一节主要介绍创建帧缓冲(Framebuffer),创建命令池,创建命令缓存,和从文件加载 PNG 图像数据,解码为 RGBA 格式,并将像素数据暂存到 Vulkan 的 暂存缓冲区中。

2025-04-20 18:12:45 1104

原创 【Vulkan 入门系列】创建描述符集布局和图形管线(五)

描述符集布局定义了着色器如何访问资源(如缓冲区和图像),是渲染管线配置的关键部分。图形管线定义了从顶点数据到最终像素输出的整个处理流程,包括可编程阶段(如顶点和片段着色器)和固定功能阶段(如光栅化、深度测试)。

2025-04-20 18:07:57 1056

原创 【Vulkan 入门系列】创建交换链、图像视图和渲染通道(四)

Vulkan 没有“默认帧缓冲”的概念,因此它需要一个基础设施来拥有我们将要渲染的缓冲,然后我们才能在屏幕上可视化它们。这个基础设施被称为交换链,必须在 Vulkan 中显式创建。交换链本质上是一个等待呈现到屏幕的图像队列。我们的应用程序将获取这样的图像来绘制它,然后将其返回到队列。队列的确切工作方式以及从队列中呈现图像的条件取决于交换链的设置方式,但交换链的总体目的是将图像的呈现与屏幕的刷新率同步。

2025-04-20 18:01:17 917

原创 【Vulkan 入门系列】创建逻辑设备和图形、呈现队列,显示尺寸更改(三)

在选择要使用的物理设备后,我们需要设置一个逻辑设备来与它交互。逻辑设备的创建过程类似于实例的创建过程,并描述了我们想要使用的功能。我们还需要指定要创建哪些队列,现在我们已经查询了哪些队列族可用。接下来设置调试信使,最后再来确定 Surface 的宽高来完成这一节的内容。

2025-04-20 17:59:16 741

原创 【Vulkan 入门系列】创建 Vulkan 实例、Surface 和选择物理设备(二)

使用 Vulkan API 的第一步是先创建它的实例,并搭建 Surface 和创建逻辑设备。我们通过学习 Android Hello VK Demo 来一步步熟悉 Vulkan API。

2025-04-16 07:59:36 905

原创 【Vulkan 入门系列】什么是 Vulkan API?(一)

这个快速导览应该能让你基本了解绘制第一个三角形所需的工作。一个真实的程序包含更多的步骤,例如分配顶点缓冲区、创建统一缓冲区和上传纹理图像等。创建一个VkInstance选择一个支持的显卡 (创建用于绘制和呈现的VkDevice和VkQueue创建一个窗口、窗口 Surface 和交换链将交换链图像包装到中创建一个指定渲染目标和用法的渲染通道为渲染通道创建帧缓冲区设置图形管线为每个可能的交换链图像分配并记录带有绘制命令的命令缓冲区。

2025-04-15 19:36:17 877

原创 Flutter 使用 C、C++ 代码库,突破性能敏感和“底层”库移植能力

Flutter主要使用Dart语言,也就是说我们只要掌握了Dart语言调用C/C++的方法,就知道了如何在Flutter中调用C/C++编写的功能了。Dart的移动端、命令行和服务端应用所运行的Dart原生平台,均可以使用dart:ffi库调用原生的C语言API,用于读、写、分配和销毁原生内存。FFI(ForeignFunctionInterface)指的是外部函数接口。

2025-01-19 15:35:37 903

原创 libjpeg-turbo 加速 JPG 有损压缩与解压缩

libjpeg-turbo 是一个 JPEG 图像编解码器,它使用 SIMD 指令加速 x86、x86-64、Arm、PowerPC 和 MIPS 系统上的基本 JPEG 压缩和解压缩,以及 x86、x86-64 和 Arm 系统上的渐进式 JPEG 压缩。在这些系统上其他条件相同的情况下,libjpeg-turbo 通常比 libjpeg 快 2-6 倍。在其他类型的系统上,由于其高度优化的 Huffman 编码算法,libjpeg-turbo 仍能比 libjpeg 有显著的性能提升。

2024-12-05 08:33:44 1327

原创 Rust 程序设计语言学习——高级特性

RUST 中常用部分学习结束之后,我们来接触一些 RUST 中的其他高级用法。不安全 Rust:用于当需要舍弃 Rust 的某些保证并负责手动维持这些保证高级 trait:与 trait 相关的关联类型,默认类型参数,完全限定语法(fully qualified syntax),超(父)trait(supertraits)和 newtype 模式高级类型:关于 newtype 模式的更多内容,类型别名,never 类型和动态大小类型高级函数和闭包:函数指针和返回闭包宏:定义在编译时定义更多代码的

2024-10-29 08:01:36 1364

原创 Rust 程序设计语言学习——面向对象

面向对象编程(Object-Oriented Programming,OOP)是一种对程序进行建模方式。对象(Object)作为一个编程概念来源于 20 世纪 60 年代的 Simula 编程语言。这些对象影响了 Alan Kay 的编程架构,该架构中对象之间互相传递消息。他在 1967 年创造了面向对象编程 (object-oriented programming)这个术语。关于 OOP 是什么有很多相互矛盾的定义;在一些定义下,Rust 是面向对象的;在其他定义下,Rust 不是。

2024-09-10 07:41:41 1847

原创 Rust 程序设计语言学习——并发编程

安全且高效地处理并发编程是 Rust 的另一个主要目标。并发编程(Concurrent programming),代表程序的不同部分相互独立地执行,而并行编程(parallel programming)代表程序不同部分同时执行,这两个概念随着计算机越来越多的利用多处理器的优势而显得愈发重要。由于历史原因,在此类上下文中编程一直是困难且容易出错的:Rust 希望能改变这一点。起初,Rust 团队认为确保内存安全和防止并发问题是两个分别需要不同方法应对的挑战。

2024-08-04 14:03:08 1189 1

原创 Rust 程序设计语言学习——智能指针

智能指针(smart pointers)是一类数据结构,它们的表现类似指针,但是也拥有额外的元数据和功能。智能指针的概念并不为 Rust 所独有;其起源于 C++ 并存在于其他语言中。Rust 标准库中定义了多种不同的智能指针,它们提供了多于引用的额外功能。

2024-07-28 08:24:57 793

原创 Rust 程序设计语言学习——函数式语言功能:迭代器和闭包

Rust 的闭包(closures)是可以保存在一个变量中或作为参数传递给其他函数的匿名函数。可以在一个地方创建闭包,然后在不同的上下文中执行闭包运算。不同于函数,闭包允许捕获被定义时所在作用域中的值。迭代器(iterator)负责遍历序列中的每一项和决定序列何时结束的逻辑。当使用迭代器时,我们无需重新实现这些逻辑。

2024-07-07 14:12:11 1484 1

原创 Rust 程序设计语言学习——泛型、Trait和生命周期

每一种编程语言都有高效处理重复概念的工具。在 Rust 中其工具之一就是泛型。泛型是具体类型或其他属性的抽象替代。Trait 定义了某个特定类型拥有可能与其他类型共享的功能。可以通过 Trait 以一种抽象的方式定义共同行为。可以使用 trait bounds 指定泛型是任何拥有特定行为的类型。生命周期是另一类我们已经使用过的泛型。不同于确保类型有期望的行为,生命周期确保引用如预期一直有效。

2024-06-28 08:03:50 1141 1

原创 Rust 程序设计语言学习——常见集合:Vector String Map

Rust 中常见的集合包括 Vector(列表)、String(字符串)和 Map(键值对)。Vec,也被称为 vector。vector 允许我们在一个单独的数据结构中储存多于一个的值,它在内存中彼此相邻地排列所有的值。vector 只能储存相同类型的值。String字符串类型由 Rust 标准库提供,而不是编入核心语言,它是一种可增长、可变、可拥有和 UTF-8 编码的字符串类型。当 Rustaceans 提及 Rust 中的 "字符串 "时,他们可能指的是String。

2024-05-27 08:31:21 1012

原创 Rust 程序设计语言学习——枚举&模式匹配

假设我们要跨省出行,有多种交通工具供选择。常用的交通工具有飞机、火车、汽车和轮船。这是我们常用的跨省出行乘坐交通工具的所有形式:所以可以枚举出所有可能的值,这也正是此枚举名字的由来。可以通过在代码中定义一个 Vehicle 枚举来表现这个概念并列出可能的交通工具类型,Airplane(飞机)、Train(火车)、Car(汽车) 和 Ship(轮船)。这被称为枚举的成员Airplane,Train,Car,Ship,如果现在我们要区分汽车到底是哪一种?

2024-04-05 20:10:31 1520 1

原创 Rust 程序设计语言学习——结构体

定义结构体,需要使用struct关键字并为整个结构体提供一个名字。结构体的名字需要描述它所组合的数据的意义。接着,在大括号中,定义每一部分数据的名字和类型,我们称为 字段(field)。

2024-03-24 07:41:29 1259 3

原创 Rust 程序设计语言学习——所有权

这一节主要来学习 Rust 语言的其他特性,所有权、引用与借用、Slice 类型。

2024-03-17 07:04:54 1403 1

原创 Rust 程序设计语言学习——基础语法

println!( “Hello World”) 中的 println 后面还有一个!符号,println 不是一个函数,而是一个宏规则。println!()和print!()。这两个"函数"都是向命令行输出字符串的方法,区别仅在于前者会在输出的最后附加输出一个换行符。当用这两个"函数"输出信息的时候,第一个参数是格式字符串,后面是一串可变参数,对应着格式字符串中的"占位符",这一点与 C 语言中的printf函数很相似。但是,Rust 中格式字符串中的占位符不是 “% + 字母” 的形式,而是一对{}

2024-01-21 11:09:12 2519 1

原创 【ARMv8 SIMD和浮点指令编程】浮点数据转换指令——数据类型互转必备

浮点数据转换指令包括不同的浮点精度数之间的转换,还包括整型和浮点数之间的转化。在了解数据转换指令前,必须学习 IEEE 754 定义的五种舍入规则。

2023-12-09 07:33:58 1468

原创 【ARMv8 SIMD和浮点指令编程】浮点加减乘除指令——四则运算

浮点指令有专门的加减乘除四则运算指令,比如 FADD、FSUB、FMUL、FDIV 等。

2023-11-05 13:56:32 1114

原创 【ARMv8 SIMD和浮点指令编程】NEON 通用数据处理指令——复制、反转、提取、转置...

NEON 通用数据处理指令包括以下指令(不限于):• DUP将标量复制到向量的所有向量线。• EXT提取。反转向量中的元素。• TBL、TBX向量表查找。• TRN向量转置。• UZP、ZIP向量交叉存取和反向交叉存取。

2023-10-29 07:30:01 1392

原创 【ARMv8 SIMD和浮点指令编程】NEON 存储指令——如何将数据从寄存器存储到内存?

和加载指令一样,NEON 有一系列的存储指令。比如 ST1、ST2、ST3、ST4。

2023-10-28 14:54:47 1717

原创 【ARMv8 SIMD和浮点指令编程】NEON 加载指令——如何将数据从内存搬到寄存器(其它指令)?

除了基础的 LDx 指令,还有 LDP、LDR 这些指令,我们也需要关注。

2023-09-30 07:10:46 923

原创 【ARMv8 SIMD和浮点指令编程】NEON 加载指令——如何将数据从内存搬到寄存器(LDx&LDxR)?

将内存中的数据搬到 NEON 寄存器,有很多指令可以完成,熟悉这些指令是必须的。

2023-09-30 07:00:50 1109

原创 【ARMv8 SIMD和浮点指令编程】NEON 乘法指令——asimdrdm

ARMv8 有许多版本(ARMv8.1 等),它们定义了强制和可选功能。Linux 内核通过 hwcaps 公开了其中一些功能的存在。这些值显示在 /proc/cpuinfo 中。

2023-09-03 07:24:33 1324

原创 【ARMv8 SIMD和浮点指令编程】NEON 乘法指令——乘法知多少?

NEON 乘法指令包括向量乘法、向量乘加和向量乘减,还有和饱和相关的指令。总之,乘法指令是必修课,在我们的实际开发中会经常遇到。

2023-08-27 17:05:18 1241

原创 【ARMv8 SIMD和浮点指令编程】NEON 移位指令——左右移位之术

NEON 移位指令主要涉及逻辑移位、算术移位两大类,同时下面还介绍了两个移位插入指令。

2023-07-22 08:14:13 581

原创 【ARMv8 SIMD和浮点指令编程】NEON 比较指令——比较的方方面面

比较指令是常见的一类指令,NEON 中当然也排除,下面涉及比较和测试位两类指令。

2023-06-22 07:20:22 923

原创 【ARMv8 SIMD和浮点指令编程】NEON 移动指令——精通 MOV?

移动指令主要涉及 MOV 和 MVN,它们分别是移动和求反移动。如果你认为仅仅两条指令,还是太小看设计者了!

2023-06-18 07:22:32 1098

原创 【ARMv8 SIMD和浮点指令编程】NEON 逻辑指令——与或非有多少?

NEON 逻辑指令主要包括与、或、异或、位清除、或非、为 False 时按位插入、为 True 时按位插入和按位选择指令。

2023-06-10 07:43:37 1022

原创 【ARMv8 SIMD和浮点指令编程】NEON 通用算术指令——杂项也不少

无符号向量差值绝对值累加和差值绝对值。向量绝对值和求反。无符号向量最大值,无符号向量最小值,无符号向量按对最大值,无符号向量按对最小值,无符号跨向量最大值和跨向量最小值。向量前导符号位计数,前导零计数和设置位计数。

2023-06-10 07:28:02 828

原创 【ARMv8 SIMD和浮点指令编程】NEON 减法指令——减法也好几种

向量减法包括常见的普通加指令,还包括长减、宽减、半减、饱和减、按对减、按对加并累加、选择高半部分结果加、全部元素加等。

2023-06-04 06:43:12 507

原创 【ARMv8 SIMD和浮点指令编程】NEON 加法指令——加法都能玩出花

向量加法包括常见的普通加指令,还包括长加、宽加、半加、饱和加、按对加、按对加并累加、选择高半部分结果加、全部元素加等。如果你和我一开始以为的只有一种普通加,那就太小看设计者了!同时这么多加法指令的确会提升我们设计程序的效率,同样学习这些指令也需要花费不少精力。

2023-06-03 07:27:57 638

原创 【ARMv8 编程】A64 系统控制和其他指令

A64 指令集包含与以下相关的指令:异常处理、系统寄存器访问、调试、提示指令,在许多系统中都有电源管理应用程序。

2023-05-17 07:24:13 1546

ORMLite和GreenDao性能对比Demo

ORMLite和GreenDao性能对比Demo,两个常用数据库ORM框架用法与比较

2016-01-03

android使用html写一个关于页面

使用html写一个android的关于页面,动态修改版本号,让你从繁重的Textview 堆砌中彻底解放出来

2015-11-07

Android FTP客户端与服务端

两部手机其中一部手机作为服务器,另一部手机作为客户端下载,使用FTP方式传输文件,图片下载,多图加载,滑动停止加载完整DEMO。

2015-09-13

MPAndroidChart

关于MPAndroidChart就不多说了,是一个开源的android图表库,包含折线图、柱状图、散点图、雷达图等等,功能非常强大

2015-09-05

Android图片局部放大镜

图片上某一点看不清楚,你不需要将整张图片都放大,只需要放大你想看到的部分,这个时候放大镜就派上用场了。

2015-08-16

Android发送邮件功能实现

使用commons-net-3.3.jar或mail.jar核心邮件包实现邮件发送功能,可发送附件、图片、HTML邮件,灵活控制,甚至实现后台发送邮件功能!

2015-08-16

android图片堆叠效果实现

android图片堆叠效果实现,实现任意小角度堆叠显示,可用于图片相册缩略图

2015-07-18

软件内每日提醒功能实现

软件内每日提醒功能实现,可添加到工程中实现每日提醒,隔天提醒等提醒功能

2015-07-12

可分割的环形进度条

可分割的环形进度条,适合倒计时等场景,已经定义好,只需把文件拷入即可使用

2015-06-13

高仿今日头条字体渐变指示器

今日头条的指示器很炫酷,随着你的滑动字体颜色可以逐渐的变化,实现方法主要是使用自定义控件结合ViewPager。 CompleteTrackColorViewDemo实现高仿今日头条字体渐变指示器,滑动+点击切换,如丝顺滑

2015-04-26

空空如也

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

TA关注的人

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