子轶的随想地

但行好事,莫问前程


  • 首页

  • 标签

  • 归档

GPUImage源码阅读(三):OpenGL ES 与 BGRA/RGBA

发表于 2018-02-20

在 GPUImagePicture.m 的源码中提到,只有这两种格式的图像数据可以直接在 OpenGL 中使用:

  • Little endian,alpha-first,即 BGRA(也就是 ARGB 反过来)
  • Big endian,alpha-last,即 RGBA

在 Apple 的官方 sample code GLImageProcessing 有这样的说明:

CGImage may return pixels in RGBA, BGRA, or ARGB order.
On the device, CGImage will generally return BGRA or RGBA.
On the simulator, CGImage may return ARGB, depending on the file format.

为了提升 Core Graphics 的性能,苹果推荐使用 BGRA。

阅读全文 »

GPUImage源码阅读(二):texture顶点设置

发表于 2018-01-19

UIKit和Core Graphics的坐标系不同

在iOS中,存在两个坐标系:

  • 左上角为原点的坐标系(upper-left-origin,ULO),例如UIKit和Core Animation
  • 左下角为原点的坐标系(lower-left-origin,LLO),例如Core Graphics

如下图所示:

由于两个坐标系不同,如果直接在屏幕显示由Core Graphics加载的图片,那么看到的图片效果是「上下颠倒」的。

阅读全文 »

GPUImage源码阅读(一):CVOpenGLESTextureCache 理解

发表于 2017-12-29

对于 iOS 5.0+ 的设备,Core Video 允许 OpenGL ES 的 texture 和一个 image buffer 绑定,从而省略掉创建 texture 的步骤,也方便对 image buffer 操作,例如以多种格式读取其中的数据而不是用 glReadPixels 这样比较费时的方法。Core Video 中的 OpenGL ES texture 类型为 CVOpenGLESTextureRef,定义为

A texture-based image buffer that supplies source image data to OpenGL ES.

image buffer 类型为 CVImageBufferRef,在文档中可以看到两个类型其实是一回事:

typedef CVImageBufferRef CVOpenGLESTextureRef;
阅读全文 »

iOS 设计模式漫谈

发表于 2017-12-04

当我们谈论设计模式的时候,我们在谈什么?

设计模式是为特定场景下的问题而定制的解决方案,是对特定面向对象设计问题主要方面的一种抽象。程序如果在设计中使用了设计模式,将来就更易于复用和扩展、且易于变更。另外,基于设计模式的程序会更加简洁和高效,因为达成同样目的所需的代码会更少。

最早对设计模式做出权威性论述和分类的是 Design Patterns: Elements of Reusable Object-Oriented Software,由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 合著,简称 Gang of Four (GoF)。书中论述了根据创建型(Creational)、结构型(Structural)、行为型(Behavioral)划分的一共 23 种设计模式。

阅读全文 »

iOS 开发之用 Instruments 寻找内存泄露

发表于 2017-04-27

偶然发现自己的 ViewController 退出后没有释放,存在内存泄露,而代码量大的情况下自己找可能的 retain cycle 不太现实,于是学习了用官方的 Instruments 工具来找出代码的问题。

打开 Instruments

If Instruments has access to information about your app’s source code, a leak is reported as a class name. Otherwise, a leak is reported as a memory address, such as Malloc-size. To ensure that Instruments has access to information about your code, initiate profiling from Xcode (see Profile from Xcode) or configure a symbol mappings file (see Map Data to Source Code).

上面这段话来自 Apple 官方文档Find Memory Leaks。

阅读全文 »

在 iOS 开发中使用 FMDB 进行数据库操作

发表于 2016-11-29

前言

FMDB 是对 SQLite 的 Objective-C 语言的轻量级封装。
本文结合 Github 页面的使用说明与项目中的使用经验,列出一些简单的使用方法。

安装 FMDB

使用 CocoaPods 安装,在 podfile 中添加以下内容:

pod 'FMDB'

在命令行运行

pod install

再在项目中包含头文件 FMDB.h 即可。

阅读全文 »

为 iOS 创建动态 framework 和包含资源文件的 bundle 的方法

发表于 2016-11-22

创建 framework

本文使用 demo 见 JYUIAnimateDemo,效果是在页面显示扩散的圆圈。

在 Xcode 中,首先建立一个新 project,命名为 JYUIAnimate ,类别选择Cocoa Touch Framework:

阅读全文 »

利用Hexo和GitHub搭建博客的最简单步骤

发表于 2016-10-28

最近根据网上的教程,利用Hexo和GitHub搭建了自己的博客,准备记录下以后学习成长的点点滴滴。这篇博客总结了搭建博客的最简单步骤,安装环境为macOS 10.12。

准备工作

注册GitHub账号

首先需要注册GitHub的账号,假定用户名是username,新建一个repository,命名为username.github.io。

安装homebrew、Git和Node.js

安装homebrew:

$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

安装Git:

$ brew install git

安装Node.js:

$ brew install node

这一步有个小插曲(如果安装顺利可以忽略),在公司网速很快以及梯子具备的情况下, 安装 Node.js 之前需要安装的管理工具 npm 一直下载不成功,而用浏览器下载同样的内容很快下载完毕(npm-3.10.3.tgz,大概3M+)。因此一种曲线救国的方法是,在命令行输出内容中找到下载内容的路径(我的是 ~/Library/Caches/Homebrew/),打开该路径找到未下载成功的文件(node--npm-3.10.3.tgz.incomplete),将该文件替换为 npm-3.10.3.tgz 并重命名为 node--npm-3.10.3.tgz ,再次尝试即安装成功。

阅读全文 »

子轶

8 日志
12 标签
GitHub Weibo
© 2018 子轶
由 Hexo 强力驱动
|
主题 — NexT.Mist v5.1.4