自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(48)
  • 资源 (2)
  • 收藏
  • 关注

原创 将博客搬至CSDN

为了方便将之前分享的文章发表到CSDN,特写该篇文章。后续新写的文章,还会在掘金上更新。为了方便将之前分享的文章发表到CSDN,特写该篇文章。后续新写的文章,还会在掘金上更新。为了方便将之前分享的文章发表到CSDN,特写该篇文章。后续新写的文章,还会在掘金上更新。...

2021-12-27 09:16:56 149

原创 Metal 框架之渲染到多个视口

视口定义了渲染目标的一部分,绘图命令会渲染到该区域内。使用视口选择,可以为绘图命令提供多个视口,并且可以为绘图命令渲染的每个图元动态选择其中的一个视口。通过视口选择,使用更少的绘图命令,可以更轻松地将渲染合并到多个视口中。例如,渲染立体图像或者渲染其他图像的内容到渲染目标的多个部分试时,可以使用视口选择。...

2021-11-30 19:46:08 346 1

原创 Metal 框架之渲染到多个纹理切片

使用图层选择为顶点着色器中的每个图元选择目标切片,可以将图元渲染到纹理数组、立方体纹理或 3D 纹理的多个层(切片)中。层是单个 1D、2D 或 3D 像素块,由目标纹理中的切片和 mipmap 级别指定。加载和存储操作适用于渲染通道附件的每个切片。当你需要将内容渲染到来自同一源数据的多个相关纹理时,例如...

2021-11-29 20:02:44 552

原创 Metal 框架之自定义设置渲染通道

渲染通道是一系列渲染命令,用于绘制一组纹理。本示例执行一对渲染通道来渲染视图的内容。对于第一个通道,示例创建了一个自定义渲染,将图像渲染成纹理。这个通道是一个离屏渲染通道,因为样本渲染为普通纹理,而不是由显示子系统创建的纹理。第二个渲染通道使用 MTKView 对象提供的渲染通道描述符,来渲染和显示最终图像。...

2021-11-26 20:33:51 410

原创 Metal 框架之同步托管资源

托管存储(MTLStorageMode.managed)模式只在 macOS 下有效,非 macOS 下无此存储模式,请移步阅读《 Metal 框架之资源存储模式 》。该模式下的资源,CPU 和 GPU 都可以访问。 Metal 为每个处理器优化托管资源,但给定的资源内容有更改时,需要同步这些资源。同步托...

2021-11-25 20:42:15 233

原创 Metal 框架之资源存储模式

Metal 中使用 MTLStorageMode 来指定资源的内存位置和访问权限。MTLStorageMode 是个枚举类型,定义如下:public enum MTLStorageMode : UInt { case shared = 0 case managed = 1 //只在...

2021-11-24 20:29:01 655

原创 Metal 框架之设置加载和存储操作

通过设置 MTLLoadAction 和 MTLStoreAction 属性,可以定义渲染通道加载和存储 MTLRenderPassAttachmentDescriptor 对象 的方式。为渲染目标设置适当的操作,在渲染通道的开始(加载)或结束(存储)时,可以避免昂贵且不必要的工作。在 texture 属...

2021-11-23 19:50:49 397

原创 Metal 框架之从可绘制纹理中读取像素数据

Metal 优化了纹理以供 GPU 快速访问,但不允许直接从 CPU 访问纹理的内容。当 App 需要更改或读取纹理的内容时,需要 Metal 在纹理和可访问的 CPU 内存(系统内存或使用共享存储分配的 Metal 缓冲区)之间复制数据。本文示例配置了可绘制的纹理,该纹理具备可读取权限,并将渲染像素数据从这...

2021-11-22 16:30:54 472

原创 Metal 框架之同步 CPU 与 GPU 工作

通过本示例,你将了解如何管理数据依赖,并避免 CPU 和 GPU 之间的处理器等待。本示例渲染连续的三角形,这些三角形沿着正弦波顺序排列。每一帧都会更新三角形顶点的位置,然后渲染新图像。这些动态更新的数据会产生一种运动错觉,三角形似乎沿着正弦波移动。该示例将三角形顶点存储在 CPU 和 GPU 共...

2021-11-21 14:08:23 872

原创 Metal 框架之使用 Metal Debugger 查看 GPU 工作负载

为了了解计算机是如何运行 App 或调试问题,通常要使用调试器。传统的调试器通过暂停一个线程来工作,但对基于 Metal 的 App 效果不佳。 Xcode 通过帧捕获工作流专门为 Metal 提供一个调试器。要使用 Metal 调试器来调试 Metal App,需要捕获单个动画帧,并检查 App 生成该...

2021-11-20 23:23:25 766

原创 Metal 框架之深度测试

在图形基本图元相互重叠情况下,Metal 按照画家算法来绘制图元,即按照图元提交的顺序来渲染它们。这种绘制方式一定可以得到正确的绘制结果,但是这种方法不足以渲染复杂的 3D 场景。 为了解决这个问题, 需要使用 Metal 提供的深度测试来确定每个片段在渲染时的可见性,消除隐藏的面。深度是从观察位置到特定...

2021-11-19 23:13:29 399

原创 Metal 框架之渲染管线渲染图元

在 《 Metal 框架之使用 Metal 来绘制视图内容 》中,介绍了如何设置 MTKView 对象并使用渲染通道更改视图的内容,实现了将背景色渲染为视图的内容。本示例将介绍如何配置渲染管道,作为渲染通道的一部分,在视图中绘制一个简单的 2D 彩色三角形。该示例为每个顶点提供位置和颜色,渲染管道使用该数据,...

2021-11-18 19:33:10 444

原创 Metal 框架之使用 MetalKit 来绘制视图内容

在 《 Metal 框架之 MTKView 》 文章中介绍了如何使用 MTKView 来创建、配置和展示 Metal 对象,本文可作为上篇文章的补充篇,将介绍有关 Metal 渲染图形内容的基础知识。本示例中,会创建一个 MetalKit 视图和一个渲染通道,然后指定擦除背景色,通过提交渲染通道命令来更新...

2021-11-17 16:31:21 535

原创 Metal 框架之创建纹理及纹理采样

Metal 中使用纹理来绘制和处理图像,它是由像素组成的。使用2维数组的纹理来保存图像,每个元素都包含颜色数据。通过纹理映射技术将纹理绘制到几何图元上。 在片段着色器中,使用片段函数对纹理采样来为每个片段生成颜色。Metal 中,使用 MTLTexture 对象来表示纹理。 MTLTexture 对象定...

2021-11-16 20:14:28 706

原创 Metal 框架之 MTKView

MTKView 封装了 Metal 的基本功能,隐藏了配置 Metal 的一些操作,省去了开发者配置的麻烦,开发者只需要将精力花费在图形渲染即数据准备上就可以。在 iOS, iPadOS, Mac Catalyst, tvOS中,代码定义如下:```class MTKView : UIView...

2021-11-15 18:27:42 953

原创 创建通用 macOS 二进制文件

原生应用比解析执行的应用程序运行更高效,因为编译器针对目标架构优化了代码。仅支持 x86_64 架构的应用程序必须通过 Rosetta 转换才能在App芯片上运行 。通用二进制文件在 Apple 芯片和 Intel 芯片的 Mac 上运行,因为它包含两种架构的可执行代码。可以将所有编译的代码转换为通用二进...

2021-11-14 23:09:52 1445

原创 Metal 执行 GPU 命令的流程

阅读完本文,你将了解 Metal 是如何在 GPU 上执行命令的。让 GPU 来执行任务是通过发送命令来实现的。该命令可以执行绘图、并行计算或资源管理相关的操作工作。Metal 应用程序和 GPU 之间的关系是客户端-服务器模式:Metal 应用程序是客户端GPU 是服务器可以通过向 GPU...

2021-11-13 23:03:59 386

原创 使用 Metal 命令行来构建库

在使用 Metal 开发过程中,为了实现功能,我们可能会自定义多个 .metal 文件。我们也可能输出 sdk 给使用方调用。此时就会遇到如下的问题:太多的 .metal 文件,导致 sdk 文件增多,不好管理。暴露的 .metal 透露了一些算法逻辑之类的,而这些有可能我们不希望给使用者看到。...

2021-11-12 20:27:02 583

原创 自定义 Metal 渲染视图

我们可以通过 MetalKit 提供的 MTKView 来快速编写基于 Metal 渲染的视图,MTKView 视图把 Metal 的操作都封装了起来,一定程度上方面了开发。但有时我们希望能够更加灵活的来控制 Metal 内容的呈现方式,这时就需要自己从头开始操作 Metal 来实现渲染流程。本例将自定...

2021-11-11 21:28:05 354

原创 基于 Metal 框架的 GPU 计算

GPU 的优势在于并发计算能力,在本示例中,你将学习如何使用 Apple 的新框架 Metal 来实现并发计算。你将学会如何将用C编写的简单函数转换为 Metal Shading Language (MSL),以便它可以在 GPU 上运行。如何在 GPU 上创建管道和可访问的数据对象,编写 MSL 函数驱动...

2021-11-10 20:42:25 816

原创 编译器优化之Loop Unrolling

开发过程中,我们有可能会写段循环语句来执行一段代码,完成一个功能点。运行没问题看到结果后,一切万事大吉,功能完成了就可以了。但对于这段代码背后是如何执行的,很少有人愿意去深究,除非涉及到一些性能问题,不得不改进循环时才会去真正的探究本质。其实对于我们写的循环语句,编译器有可能帮助我们做了一定程度上的优化。这种优...

2021-11-09 19:27:20 999 1

原创 iOS 15 图表的可听表达-Audio Graphs API

我们都知道,图表和图形可帮助用户快速识别数据中的重要特征和趋势。但是图表和图形的可访问性方面的表达是比较难得,尤其是提供可听方面的服务。 幸运的是,iOS 15 有一个名为 Audio Graphs 的新功能帮我们解决了这个难题。使用Audio Graphs API 可以将图表和图形中的数据转变成可听方面...

2021-11-08 19:28:09 168

原创 视频播放流程

平时我们播放一个视频(本地或者在线)的时候,有想到过这个视频是如何播放出来的吗?其实从我们点击播放开始,到最后我们看到视频,这中间经历了一系列的流程。你也许会很惊讶吧,我就点击了一个视频观看,没想到中间还会有这么多的过程呢!这些不可见的过程要感谢工程师们默默的付出。本文将就在线播放视频播放的流程做一些介绍:流...

2021-11-07 22:46:20 1612

原创 YUV 420、YCbCr 422、RGB 444以及色度二次采样

学习完YUV相关的知识点,现谈谈自己对这方面的理解。计算机里面,R、G、B也被称为“基色分量”。它们的取值,分别从0到255,一共256个等级(256是2的8次方)。所以,任何颜色,都可以用R、G、B三个值的组合表示。而且只有RGB格式的数据才能在屏幕或显示器上显示出来。既然只有RGB格式信号才可以在显示器上显...

2021-11-06 23:29:20 18891

原创 常用图形渲染API简介

目前比较常用的图形渲染API有如下几种:Direct3DOpenGLVulkanMetal下面会详细的介绍各种API的特点Direct3DDirect3D(简称:D3D)是微软公司在Microsoft Windows操作系统上所开发的一套3D绘图编程接口,是...

2021-11-05 23:13:42 2448

原创 OpenSceneGraph之iOS版本编译

    本文主要探讨iOS平台下的编译,官网上以及代码托管库github上提供了编译的步骤,我也亲测了一下,命令行执行了一下发现编译不过,基本的工程都没有生成,有点尴尬,感觉是cmake的版本没有对上,尝试了几次最终放弃了命令行的方式。 OpenSceneGraph提供了cmake 脚本的支持,方便开发者编译源码。一些基本的设置都在CMakeLists.txt里面。在此我们使用CMake的GUI工...

2018-05-14 21:00:05 946 1

转载 知道这20个正则表达式,能让你少写1,000行代码

正则表达式,一个十分古老而又强大的文本处理工具,仅仅用一段非常简短的表达式语句,便能够快速实现一个非常复杂的业务逻辑。熟练地掌握正则表达式的话,能够使你的开发效率得到极大的提升。正则表达式经常被用于字段或任意字符串的校验,如下面这段校验基本日期格式的JavaScript代码:var reg = /^(\\d{1,4})(-|\\/)(\\d{1,2})\\2(\\d{1,2})$/;

2017-02-27 18:02:54 429

原创 网络库封装

基于AFNetworking的封装,支持同步异步GET或POST请求,支持设置超时、头字段参数设置,支持取消操作,支持请求发起线程以及返回结果线程

2016-10-23 00:08:58 983

原创 开源备忘

开源备忘IOS开源: http://github.ibireme.com/github/list/ios/

2016-10-15 14:17:41 1187

转载 SWIFT 的柯里化

SWIFT 的柯里化        Swift 里可以将方法进行柯里化 (Currying),也就是把接受多个参数的方法变换成接受第一个参数的方法,并且返回接受余下的参数而且返回结果的新方法。

2016-01-25 15:39:09 706

原创 DockTitle以及消息通知提示的研究

类似QQ消息推送,Dock栏上的图标显示消息的个数,并且在右上角通知中心有消息提示。封装NSDockTile和NSUserNotificationCenter类完成此项功能,处理一些代理的回调,用来完成特定的任务。

2015-12-29 14:12:35 1366

原创 基于NSTimer的倒计时

OSX或IOS开发过程中,实现倒计时功能的有两种方法,一种是使用NSTimer来实现,第二种是使用GCD(配合dispatch_source_t相关类)的方法来实现。本文主要基于NSTimer来实现倒计时的功能,在保证线程安全的情况下,提供每次回调的功能。

2015-12-17 11:15:45 723

原创 应用数据plist存储方法

本文主要探讨plist存储,自己coding实现存储的过程。基本的方法就是增、删、改、查吧。基本功能大概如下: 1. 添加的方法,使用键值对key-value形式存储. 2. 取值方法,通过key来获取value. 3. 删除方法,通过key来删除value. 4. 修改方法,通过key来修改value.

2015-12-15 18:43:42 850

原创 OSX下代码压缩文件

OSX下通过NSTask来压缩文件

2015-12-10 18:38:35 747

原创 OSX下代码打开系统首选项(system preferences)

使用NSTask来完成特殊的功能,通过setLaunchPath设置要执行的路径(启动哪个app或执行的命令),通过setArguments设置参数,设置的参数会传入给启动的那个app,最后通过launch来执行命令。

2015-12-10 18:36:10 3766

原创 Swift工程下使用OC版本的MKNetworkKit

Swift工程下使用OC版本的MKNetworkKit        貌似网络库MKNetworkKit没有Swift版本的,因此就需要将OC版本的网络库移植到Swift工程中。

2015-12-05 22:34:36 942

原创 OSX10.11分屏(SplitView)功能的新特性研究(三)

OSX10.11分屏(SplitView)功能的新特性研究,自定义Titlebar时,使用系统的最大化按钮,在OSX10.11及其以后系统使用过程中有一些小的知识点需要注意下。 我们一般设置最大化按钮的响应事件,当点击最大化按钮时,会有一些必要的处理。分屏注意事项,toggleFullScreen与自己写的设置window的frame要控制好,否则window的level会被搞乱,发生意想不到的结果

2015-12-05 19:50:57 1173

原创 OSX10.11分屏(SplitView)功能的新特性研究(二)

OSX10.11分屏(SplitView)功能的新特性研究(二)         由于Apple 没有提供触发Split功能的函数,那么在Split分屏时如何捕获到呢? windowWillEnterFullScreenwindowDidEnterFullScreenwindowDidEndLiveResize

2015-12-05 12:07:08 1024

原创 苹果私有函数使用初探

苹果私有函数使用初探本文只是介绍一些可能规避的方法,建议不要直接使用显而易见的关键字(比如_NSThemeCloseWidget、_NSThemeZoomWidget等等),可以采用混淆的方法,比如直接使用NSData类型的,用到的时候再通过如下代码转换一下。

2015-11-30 18:24:27 1256

原创 OSX下原生态按钮的Hover状态

使用Method Swizzling 钩住(Hook)私有类_NSThemeWidgetCell里面的coreUIState消息,通过返回不同的字符串改变按钮的状态。可返回的字符串为:"normal"(正常态)、"rollover"(悬停态)以及"pressed"(按下态

2015-11-29 21:57:06 1860

Advanced_Apple_Debugging_Reverse_Engineering_1.0.pdf

Advanced_Apple_Debugging_&_Reverse_Engineering_v1.0 pdf 文档

2018-03-02

Advanced_Apple_Debugging_&_Reverse_Engineering_v2.0代码

Advanced_Apple_Debugging_&_Reverse_Engineering_v2.0最新代码包

2018-03-02

空空如也

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

TA关注的人

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