[返回] [最新] [最热门] [最高评价]

Ericsson Texture 压缩贴图 EAC 的编码器

最近在做新引擎 UI 模块的工作。汉字字体纹理需要占比较大的一张贴图,考虑到这张贴图只需要用一个通道就够了,所以我决定使用压缩贴图。在手机设备上,GL_COMPRESSED_R11_EAC 是一个不错的选择。

EAC 是 Ericsson 提出的对单通道贴图的压缩方案,现已进入 OpenGL 的官方标准。它通常会结合 ETC2 一起使用。ETC2 负责 RGB 部分,EAC 负责 Alpha 通
...

云风 2018-05-22 15:13 | 查看: 155

断点单步跟踪是一种低效的调试方法

断点单步跟踪的交互式调试器是软件开发史上的一项重大发明。但我认为,它和图形交互界面一样,都是用牺牲效率来降低学习门槛。本质上是一种极其低效的调试方法。

我在年少的时候( 2005 年以前的十多年开发经历)都极度依赖这类调试器,从 Turbo C 到 Visual C++ ,各个版本都仔细用过。任何工具用上十年后熟能生巧是很自然的事。我认为自己已经可以随心所欲用这类工具高效的定位出 bug 了。但
...

云风 2018-05-08 14:21 | 查看: 347

《冰气时代》末日下的人性考验

劳动节假期前夜,跳票了一年的 Frostpunk 上架了。我的五一假期有一半时间是都在挖煤。我想这是一款堪称艺术品的游戏,因为他能带来娱乐之外的东西,所以我一定要专门为它写一篇 blog 。

出于对开发商的信任,我第一时间就买了这款游戏。毕竟他们的前一个作品——《我的这场战争(This War of Mine)》就充满着人文情怀却不失游戏性,让我沉迷了好几个晚上。我相信新作不会让人失望的。


...

云风 2018-05-05 18:11 | 查看: 415

skynet cluster 模块的一点优化

上周末,我对 skynet 的 cluster 模块做了一点优化。

cluster 模式 是 skynet 的一种集群方案,用于将多台机器更为弹性的组成一个集群。我们将每台机器都赋予一个名字,然后就可以在集群间用这个名字向对方推送消息或发起请求。

集群的管理是一项非常复杂的工作,skynet 作为一个轻量化的框架,只实现了最基本的基础设施。cluster 这个基础设施已实现的部分并不复杂。在每
...

云风 2018-04-17 15:21 | 查看: 357

Lua 5.4 的改进及 Lua 的版本演进

Lua 社区最近的一件大事是 Lua 5.4 的 work1 版本发布了。

这次的首发版本中引入了一个试验性的新特性,用来解决将 nil 放入数组的问题。因为是实验性特性,所以开发组决定默认关闭,必须在编译源代码的时候定义 LUA_NILINTABLE 这个宏才能开启。注意:默认是不开启的,后面的讨论都以这个为基础。

在邮件列表的讨论中,有不少人引入了不必要的激烈情绪,反对这种影响兼容性的改变
...

云风 2018-04-09 18:42 | 查看: 409

为什么用本地程序通过本地端口做第三方服务认证是不安全的

今天有同事吐槽钉钉的 windows 客户端做第三方服务权限认证的流程,人机交互方面远没有 qq 好用。

我说,通过一个普通权限的本地程序做统一认证,其实是很容易出安全漏洞的,小心点比较好。一般来说,这个在操作系统层面支持会比较安全,就像 windows 的 UAC 。这种通常是第三方应用向服务器发一个认证请求,然后服务器下转发到本地客户端,然后客户端弹出一个确认窗口,经过用户确认以后,再经由第
...

云风 2018-03-15 18:02 | 查看: 423

LoadLibrary 无法加载 DLL 的 bug 处理

今天我们的小伙伴在把 Open Asset Import Library 封装成 lua 库的时候遇到一些麻烦。他在 vs 集成环境中编译的版本可以用,在 mingw-gcc 下却出错,报告 “找不到指定的模块。” 或是 “找不到指定的程序。" 。

我不得不吐槽,微软真是太有钱了,雇了一大帮人把出错信息都给国际化,这叫中国程序员怎么 google 问题啊。不太懂 windows ,反正我用 ex
...

云风 2018-03-15 10:40 | 查看: 607

群星 2.0 汉化项目

年前就留意了群星会在年后发布 2.0 ,我一直在跟踪它的版本升级维护汉化 mod ,既然这次是一个大版本升级,更新的文本肯定非常多,所以对这次的工作量有了充分的心理准备。

在 2.0 发布的前一天就返回了广州,我反思了过去汉化 mod 的维护过程。虽然有 github 这个方便的工具,可以联合很多同好的力量,但每次还是弄得人很累,尤其是第一天的整理工作。

我以前的做法是,更新完游戏,把新的英文
...

云风 2018-02-24 23:18 | 查看: 452

最近玩的几款游戏

最近和一位新同事一起在开发新的 3d engine 。还在构建基础的东西。从第一次提交到现在已经过去了 24 天,有 129 个 commits 。短期内还不太可能开源(即使开放仓库,估计也没几个人知道怎么构建出来)。提一句,只是说明这个项目正在进行中。

从 2017 年底到现在倒是玩到了不少非常不错的游戏。这些游戏没有用到什么华丽的技术,但它们都有一些能抓住玩家的不一样的东西。

首先是 Sl
...

云风 2018-02-12 21:36 | 查看: 628

提高 lua 处理向量运算性能的一点尝试

如果用纯 lua 来做向量/矩阵运算在性能要求很高的场合通常是不可接受的。但即使封装成 C 库,传统的方法也比较重。若把每个 vector 都封装为 userdata ,有效载荷很低。一个 float vector 4 ,本身只有 16 字节,而 userdata 本身需要额外 40 字节来维护;4 阶 float 矩阵也不过 64 字节。更不用说在向量运算过程中大量产生的临时对象所带来的 gc
...

云风 2018-02-08 11:42 | 查看: 880

向量库的一点改进

前段为 3d engine 写的向量运算库小伙伴在用,提了很多意见,所以这段时间一直在改进。

一开始觉得逆波兰表示法的运算表达式不太习惯,觉得需要绕个弯想问题,希望做一个表达式编译的东西,但是用了几天后,又觉得其实不是什么大问题,习惯了就好了。

但心智负担比较大的地方是那个 id 的正负号约定,也就是生命期管理。我想了一下,人为的去管理生命期,有些对象是要长期持有的,有些对象只在当前渲染帧使用
...

云风 2018-02-07 22:20 | 查看: 486

lua 模块管理的一点改进

lua 从 5.2 开始,简化了 5.1 中的模块管理方式,然后一直保持到现在这个样子。

模块用 require 加载,同名模块在一个 vm 中只加载一次,第 2 次开始会返回上次加载的结果。加载模块时会利用 package.path 或 package.cpath 中定义的字符串模板,把模块名转换为文件名,依次尝试打开文件。

我在新项目中,由于整合了不少模块,感觉现有的这套机制有点点不够用。
...

云风 2018-01-31 10:47 | 查看: 585

...更多...