
Mobile
文章平均质量分 50
volvet
Mail: volvet2002@gmail.com
展开
-
在iOS设备上进行抓包
可能出于各种需要,你需要在iOS上抓取数据包,比如查看一下安装的软件是否私自上传了什么东西,或者研究一下如何实现某些功能等等。关于iOS上抓包目前有很多方法,可以看Apple Technical Q&A 1176,里面介绍的内容很全面,有工具的介绍和几种支持方法的具体做法。不过QA所述没有包含完整的流程,缺失了一些步骤;另外网络上常用的方法是通过HTTP Proxy方式抓包,这种方转载 2015-11-28 12:15:23 · 811 阅读 · 0 评论 -
Metal 着色语言编程指南 十一
采样器(Samplers) Metal 着色语言中, 采样器类型决定了如何对纹理进行采样. Metal 框架允许你创建一个采样器对象, 并将其作为参数传递给graphics 或者 kernel 函数, 除了在Metal 框架中创建采样器对象, Metal 着色语言中也可以创建采样器对象. 但是在着色语言中创建的采样器对象, 只能设定部分的采样器状态: 寻址模式, 滤波模式, 归一化坐标和比较函数.翻译 2016-04-24 09:45:27 · 1620 阅读 · 0 评论 -
Metal 着色语言编程指南 十
纹理(Texture) 纹理数据类型是一个指向1, 2 或者3维纹理数据的句柄. 纹理数据则是一个纹理的某个等级(level)的mipmap的全部或者部分数据. enum class access { sample, read, write };texture1dtexture1d_arraytexture2dtexture2d_arraytexture3dtex翻译 2016-04-23 10:45:30 · 1579 阅读 · 0 评论 -
Metal 着色语言编程指南 十八
矩阵的操作符(Operators on Matrix) 加,减操作符(+, -) 适用于矩阵运算。 但是要求参与运算的矩阵行数和列数必须相等。 其运算过程就是矩阵的每个相同位置的分量执行加或者减操作, 其结果为相同大小的矩阵。 乘操作符(*) 可以适用于: 标量与矩阵 矩阵与标量 矢量与矩阵 矩阵与矢量 矩阵与矩阵 标量乘矩阵翻译 2016-05-07 14:16:00 · 820 阅读 · 0 评论 -
Metal 着色语言编程指南 十七
比较操作符(Rational and Equality Operators) 比较操作符(>, =, 如果至少一个操作数为NaN(Not a number), 则 == 操作符返回为false, != 操作符返回为true. 其他的比较操作符都返回false. 对于返回的布尔矢量, 可以用着色语言内建函数any 或者 all 来判断矢量的某一个分翻译 2016-05-07 10:39:46 · 507 阅读 · 0 评论 -
Metal 着色语言编程指南 十六
操作符(Operators)算数操作符(+, -, *, /, %) 返回值类型与操作数相同(矢量或标量, 整型或浮点型). 除和取模运算有可能返回未定义的值: 除操作可能会导致越界返回值(Out-Of-Range Value). 以整型而言, 除操作返回的值如果越界的话, 会被限制为整型可以表示的最大或者最小值, 比如, 带符号整型的最小值为: TYPE_MIN/(翻译 2016-05-07 09:06:22 · 553 阅读 · 0 评论 -
Metal 着色语言编程指南 十五
操作符(Operators) 本章讲述Metal 着色语言的操作符, 第一部分讲述矢量和标量操作符, 所谓标量操作数, 就是指整型, 浮点型或者布尔型的变量. 所谓矢量操作书是指其成员为整型, 浮点型或者布尔型的 1-, 2-, 3-, 4- 维矢量. 第二部分讲述矩阵操作符, 矩阵操作符应用于至少有一个操作数为矩阵的场合, 另一个操作数可以为标量, 矢量或者矩阵.翻译 2016-05-06 21:43:22 · 590 阅读 · 0 评论 -
Metal 着色语言编程指南 二一
变量和参数的地址空间修饰符 Metal 着色语言使用地址空间修饰符来辨识函数的变量或者参数是分配在哪块地址空间的. 下面的修饰符就是Metal着色语言所支持的的不同的地址空间类型:devicethreadgroupconstantthread Graphics函数(vertex或者fragment)和并行运算函数(kernel)的参数,如果是指针或者引用的话,翻译 2016-05-17 20:41:29 · 666 阅读 · 0 评论 -
Metal 着色语言编程指南 二三
线程组地址空间(Threadgroup Address Space) 线程组地址空间用于为kernel函数的变量分配地址空间, 用threadgroup 修饰符定义的变量将被线程组中的所有线程共享. Graphics函数无法访问用threadgroup修饰的变量. kernel函数中, 每个线程组就会分配独立的threadgroup变量, 其生命周期与该线程组相同.翻译 2016-05-29 20:40:18 · 778 阅读 · 0 评论 -
Metal 着色语言编程指南 十九
函数, 变量和修饰符本章阐述函数, 函数参数, 变量是如何被定义的, 用来声明一些比较特殊限制的修饰符也会被详细说明. 函数修饰符函数修饰符用于限制函数被调用的方式, Metal 着色语言中的函数修饰符有:kernel kernel函数是用于并行运算的函数, 它可以在1-, 2-, 3-维的线程网格(grid: 此处是指 中执行翻译 2016-05-09 22:12:48 · 1181 阅读 · 0 评论 -
Metal 着色语言编程指南 二四
常量地址空间(Constant Address Space) constant修饰符用来表示在设备内存池上分配的只读内存. 在程序域(Program Scope)中声明的变量必须是constant型的,而且在声明的位置被初始化. 用于声明constant类型变量的值必须是在编译期就可以获取的. 在程序域声明的constant变量其生命期与程序相同, 而且其值在任意的函数调用中都保翻译 2016-06-09 10:16:21 · 530 阅读 · 0 评论 -
iOS CI 自动生成IPA
使用CI脚本为iOS 应用生成IPA, 常用的方法是使用xcodebuild生成app之后, 再调用xcrun -sdk iphoneos -v PackageApplication $APP_NAME -o $IPA_NAME不幸的是, xcode更新到8.3之后, PackageApplication工具已经被废弃了, 这个方法无法奏效, 不过apple 还是为脚本生成IPA提供了另外一种方法原创 2017-07-18 19:52:53 · 924 阅读 · 0 评论 -
Google VR Sample 遇到 Gradle sync failed 的解决方案
Google 的VR android SDK发布在github 上, 地址为: https://github.com/googlevr/gvr-android-sdk下载后用Android Studio打开后 编译其Sample 却遇到错误: Gradle sync failed, Cause: error in opening zip file 几次Invalidat原创 2017-04-02 22:28:57 · 1616 阅读 · 0 评论 -
Build WebRTC For iOS
WebRTC for iOS的编译可以参见 www.webrtc.org下面是我写的为了简化日常工作的编译脚本, 将WebRTC的库打包到一个libwebrtc.a 实现了 armv7 和 arm64两种架构的编译和combile到一个 库. 模拟器版本只需仿照即可实现。 代码如下: #! /bin/sh# out directoriesIOS32_OU原创 2016-08-11 15:44:12 · 2209 阅读 · 0 评论 -
Build OpenSSL for iOS
OpenSSL的版本为1.0.2h编译脚本如下:#!/bin/bash# This script builds the iOS and Mac openSSL libraries# Download openssl http://www.openssl.org/source/ and place the tarball next to this script# Credi原创 2016-08-11 15:37:09 · 1479 阅读 · 0 评论 -
通过广播发现局域网内的其他设备
被问到一个问题, 一个封闭, 无法连接外网的局域网内, 两个SIP终端如何建立会话? SIP终端建立会话其实并非一定需要SIP Server参与, 如果其中一个SIP终端知道另一个IP, 可以直接向其发起呼叫即可, 于是问题就转化为如何发现局域网内的其他设备, 这个可以用类似Device-discovery的思路来解决, 一个设备在网内进行广播, 受到广播的其他设备回复后, 发起广播原创 2016-09-10 21:46:37 · 3307 阅读 · 0 评论 -
为 webrtc 创建 xcode工程
创建xcode的mac 工程export GYP_GENERATOR_FLAGS="xcode_project_version=7.2 xcode_ninja_target_pattern=All_mac xcode_ninja_executable_target_pattern=AppRTCDemo output_dir=out_mac"export GYP_GENERATO原创 2016-07-19 10:10:34 · 2737 阅读 · 0 评论 -
Metal着色语言编程指南 二五
线程地址空间(Thread Address Space) thread地址空间修饰符表示其所修饰的地址为线程的私有空间, 仅仅在其被声明的线程可见, 在graphics和kernal函数内所声明的变量都是在线程地址空间上分配的。代码实例如下:kernel void my_func(...){ // A float allocated in the per-thread add翻译 2016-06-10 19:45:27 · 570 阅读 · 0 评论 -
Metal 着色语言编程指南 二六
函数参数与变量 除了定义在常量地址空间的变量和定义在程序域的采样器之外, graphics和kernel函数的输入输出都需要通过函数参数, 函数参数可以是下面之一: 设备缓存(Device Buffer): 一个指向设备地址空间任意数据类型的指针或者引用 常量缓存(Constant Buffer): 一个指向常量地址空间任意数据类型的指针或者饮用 纹理对象(T翻译 2016-06-26 20:33:18 · 820 阅读 · 0 评论 -
Metal 着色语言编程指南 九
缓存(Buffer)Metal 着色语言中的缓存(buffer)指的是指向内建类型或者用户自定义类型, 并且被定义在device 或者 constant 的地址空间。 (关于device, constant 可以参看 Address Space Qualifiers for Variables and Arguments for a full description of these翻译 2016-04-20 20:52:47 · 667 阅读 · 0 评论 -
Metal 着色语言编程指南 三
Data Type 这一章将会详细讲述Metal Shading 语言的数据类型, 包括矢量和矩阵, 原子类型, 缓存(buffer), 纹理(texture), 采样器(Samplers), 数组 和用户定义结构, 另外, 类型对齐和转换也会被提到.翻译 2016-04-14 21:29:20 · 764 阅读 · 0 评论 -
Metal 着色语言编程指南 二
Metal and C++11 Metal Shading 语言是基于C++11的标准[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3690.pdf]设计的, 在这个基础之上 增加了一些扩展和限制. 这些具体可以参考详细的语法描述. 本文会简单介绍Metal对C++11所做的一些修改和限制.翻译 2016-04-13 21:52:11 · 1083 阅读 · 0 评论 -
Metal 着色语言编程指南 一
Metal Shading Language Guide 这篇文章讲述了Metal 图形绘制和计算 Shading 编程语言. Metal shading 语言是基于C++的编程语言, 使用Metal Shading 语言的代码可以在GPU上进行图形绘制或者通用并行计算。 由于Metal Shading 语言跟C++的语法很相似, 所以C++程序员可以轻松上手, 而且根据Metal Sha翻译 2016-04-12 22:09:08 · 2197 阅读 · 0 评论 -
CAMetalLayer 浅析
CAMetalLayer 是 Apple Core Animation Framework 的内部模块, 它 管理Metal Texture Pool, 并且负责渲染MTL Texture到窗口。 CAMetalLayer 的使用 device: 需要为其创建 MTLDevice 对象 pixelFormat: MTLTexture的像原创 2016-03-13 14:31:31 · 4251 阅读 · 0 评论 -
MTLRenderPassDescriptor
在创建MTLRenderCommandEncoder对象的时候需要传入 MTLRenderPassDescriptor 作为参数, 那么MTLRenderPassDescritpor 是个什么东西, 应该如何设置其中的参数呢? 1. 创建 MTLRenderPassDescriptor+ (MTLRenderPassDescriptor *)renderPassDescr原创 2016-04-03 13:38:21 · 1894 阅读 · 0 评论 -
Apple Metal 的基本概念
Metal 是随着iOS 8的发布而出现的, 作为一种新的图形和并行计算编程接口(语言)而广为人知. 下文就简要介绍下 Metal框架的基本概念Low-overhead interface: Metal的设计目标就是期望消除那些被隐藏起来的性能瓶颈, 你可以借助Metal来创建和提交执行Metal命令以实现高效的并行运算, 自如的操控GPU完成异步运算.Memory a原创 2016-03-05 08:39:15 · 1671 阅读 · 0 评论 -
CADisplayLink
CADisplayLink 是一个用于显示的定时器, 它可以让用户程序的显示于屏幕的硬件刷新保持同步。 一 创建CADisplayLink对象 可以用 CADisplayLink 的静态创建函数 + (CADisplayLink *)displayLinkWithTarget:(id)target原创 2016-03-03 22:43:43 · 1079 阅读 · 0 评论 -
IOS app crash: 如何定位Crash 堆栈
Symbolicating Crash Logs转载 2016-01-27 09:08:04 · 616 阅读 · 0 评论 -
GLKit Framework 浅析
GLKit Framework GLKit 框架的设计目标是为了简化基于OpenGL或者OpenGL ES的应用开发。 GLKit 主要的功能: 1. 纹理加载(Texture loading): GLKTextuerLoader Class. 2. 性能卓越的科学运算库, 支持矢量, 四元数,矩阵运算等。 3. 实现的常见的标准Sh原创 2016-01-16 20:44:23 · 5096 阅读 · 0 评论 -
Metal 着色语言编程指南 十二
数组与结构(Array and Structs) Metal 着色语言支持数组和结构, 但是有如下限制: 纹理和采样器不能声明为数组. 纹理和采样器不能定义在结构中 Graphics 和 Kernel 函数的参数不能为size_t 或者 ptrdiff_t 类型, 也不能为包含了这两种类型的结构. 结构中的成员必须被声明为属于同样的地址空间.翻译 2016-04-26 20:09:22 · 672 阅读 · 0 评论 -
Metal 着色语言编程指南 十三
紧致矢量类型 (Packed Vector Data Type) 如前文所述, 矢量类型是有其规范的对齐方式(基于性能优化的考量). 但是你也许会有需要你所定义的矢量是被紧密地包装着的, 比如, 你定义了一个顶点的数据类型, 其成员有坐标, 法线矢量, 正切矢量和矩阵坐标, 并且希望它们是被紧密地包在一起作为给Vertex 函数的输入参数. Metal 着色语言翻译 2016-04-28 15:37:20 · 902 阅读 · 0 评论 -
Metal 着色语言编程指南 二二
设备地址空间 device 地址空间修饰符用来表示一块从设备内存池分配的可读写的内存对象. 内存对象可以是指针或者引用, 该指针或引用指向的可以是标量, 矢量或者用户定义结构体. 内存对象的大小由Host代码中使用Metal framework API 时指定, 代码实例如下:// an array of a float vector with 4 componentsdevi翻译 2016-05-28 06:57:15 · 621 阅读 · 0 评论 -
Metal 着色语言编程指南 二十
Fragment 函数的属性修饰符 Fragment 函数可以用 early_fragment_tests 来声明, 其含义为: 在执行fragment 着色程序前先进行fragment 测试. 下面是例子:fragment [[ early_fragment_tests ]] float4my_frag_shader( ... ){ ...}翻译 2016-05-15 14:31:08 · 703 阅读 · 0 评论 -
Metal 着色语言编程指南 八
构造矩阵对象同矢量对象的构造相似, 矩阵对象也可以从标量或者矢量集合来构造, 当矩阵初始化时,其构造器参数决定了它是如何被创建的。 例如, 如果构造器参数仅仅是一个标量, 那么这个矩阵的对角线上的成员被初始化为这个标量,其他成员被初始化为0.0。 下面的这个调用float4x4(fval);构造的矩阵为:fval 0.0 0.0 0.00.0 fval翻译 2016-04-18 22:01:56 · 829 阅读 · 0 评论 -
Metal 着色语言编程指南 七
访问矩阵成员 floatnxm 和 halfnxm 矩阵可以被看成是类型为floatm和halfm的数组. 类似二维数组, 矩阵的成员可以用二维下标来寻址. 矩阵对象后面跟一个下标可以被看作是一个列矢量. 如同数组, 列矢量的计数也是从0开始, 矩阵对象的第二个下标就如同是对矢量对象进行寻址。 所以, 矩阵对象后面跟两个下标就表示了矩阵其中一个成员, 第一个下标是翻译 2016-04-17 20:14:30 · 682 阅读 · 1 评论 -
Metal 着色语言编程指南 六
下面所描述的对矢量成员的访问是非法的, 会引起编译错误: 访问越界的矢量成员, 一个二维矢量只能访问 .xy 或者 .rg 成员, 三维矢量只能访问 .xyz 或者 rgb 成员:float2 pos;pos.x = 1.0f; // is legal; so is ypos.z = 1.0f; // is illegal; so is w float3 pos;po翻译 2016-04-17 13:16:12 · 559 阅读 · 0 评论 -
Metal 着色语言编程指南 五
(.) 操作符访问矢量成员 Metal 也支持(.) 操作符来访问矢量成员, (.) 操作符后面跟随字符来表示坐标或者颜色: .xyzw 或者 .rgba。 示例代码如下int4 test = int4(0, 1, 2, 3);int a = test.x; // a = 0int b = test.y; // b = 1int c = test.z; //翻译 2016-04-16 19:16:03 · 526 阅读 · 0 评论 -
Metal 着色语言编程指南 四
矢量和矩阵类型Metal Shading 语言的矢量数学库提供了对矢量和矩阵类型表示和运算的支持。 矢量的命名规则如下所示:booln, charn, shortn, intn, uncharn, ushortn, uintnhalfn, floatn这里 n 可以是 2, 3, 4 的其中一个数字, 表示 2-, 3-, 4- 维矢量。 矩阵的命名规翻译 2016-04-16 09:15:37 · 632 阅读 · 0 评论 -
Metal 着色语言编程指南 十四
隐式类型转换 (Implicit type conversions) Metal 着色语言支持标量间的类型转换, 这种转换是试图用把等价的值用一种新的数据类型来表示, 比如:int的5 被转换为float的时候为5.0. 矢量的类型转换更为严格, 矢量到另一种矢量或者标量的转换是非法的,会引起编译错误, 例子如下: int4 i;float4 f = i; // c翻译 2016-04-28 16:43:03 · 611 阅读 · 0 评论 -
深入浅出 ARKit - Basic Concept
什么是现实增强(Augmented Reality)现实增强是在真实世界中加入计算机所构建的虚拟物体, 通过对真实世界所采集的信息的分析, 虚拟物体可以跟真实世界中的物体互动, 比如遮挡, 碰撞等, 让使用者产生错觉, 如同虚拟物体真实存在于世界. 此技术涉及很多复杂技术, 包括3D建模, 真实感图形绘制, 视频与图像分析等. 其实现实增强技术在电影拍摄中早有应用, 空中大掼篮里动原创 2017-07-23 14:16:46 · 685 阅读 · 0 评论