首页 Home.

  • 前三章我们从 OpenGL 的顶点和状态讲到了 Blaze3D,又继续走过 HDR Bloom 与 MRT。到了这里,一个更容易踩坑的问题出现了:底层原理没有变,但 Minecraft 组织渲染代码的方式已经变了。 旧版本里,我们习惯拿到一个绘图对象,设置状态,然后立刻把矩形 文字或模型画出去。26

  • 前两章我们从 OpenGL 一路讲到了 Blaze3D,知道顶点怎么进入 GPU,也知道 RenderTarget 怎么把一帧画面留在纹理里。但是把场景画进纹理只是第一步,怎样保住强光的亮度层次,怎样让光源产生自然的光晕,又怎样在一次绘制里留下颜色 法线 高光这些不同的数据呢? 这一章继续往后处理走

  • vivo / iQOO 的 TWS 耳机在 Mac 上有个尴尬处境:耳机能连、能出声,但你想看电量、切降噪、管多连接设备,官方那套东西在 Mac 上根本用不了。VivoPods 就是为了补上这一块——一个原生 macOS 菜单栏应用,直接通过蓝牙跟耳机对话。 这篇文章分两部分。前半讲这个软件本身:它

  • 一个前端编辑器有很多"注册式"入口:工具要注册到工具表,画布层要注册到图层管理器,命令要注册到命令工厂,标注类型要注册到类型表。这些注册最初都是手写清单——一个初始化函数里逐行 register(...)。 清单短的时候没问题,长到几十行、且分散在多个文件后就开始难受:新增一个功能要在三四处登记,漏

  • 最近几周同时在跟三件事:一个正在跑的重构,一个每天都要临时上线的紧急修复,还有一个想抽空试的技术方案。三个都得在同一个仓库里改代码,但主分支一天要切换十几次,编辑器缓存、构建产物、node_modules 状态全都糊在一起。 后来把三件事分别放到三个 git worktree 里,问题少了一半——每

  • 升级 pnpm 到 11 之后,Electron 的构建流程没有任何报错,安装包也照常产出。装上去启动,主进程立刻挂在 Error: Cannot find module。 打开 app.asar 看一眼,node_modules 几乎是空的。 这类问题最难受的地方不是它坏了,而是它坏得很安静。CI

  • 桌面应用一旦有了自己的文件格式,用户很快就会提一个需求:能不能在资源管理器里直接看到文件长什么样,而不是一排一模一样的图标。 这件事在 Electron 里没有现成 API。nativeImage 只负责应用自己的托盘、窗口图标,管不到资源管理器怎么渲染文件。资源管理器的缩略图由 Windows S

  • 做一个类 CAD 的图形编辑器,绕不开命令行坐标输入。老 CAD 用户不点鼠标,他们敲键盘:100,200 回车定点,@50,30 回车画相对位移,100<45 回车走极坐标,<45 回车再敲个长度确定方向加距离。同一个输入框,同一批字符,语义却各不相同。 这篇文章讲我怎么把这套输入系统从「正则加

  • 问题 一个自定义 DSL 的 LSP 服务(Go 实现)需要为编辑器提供语法高亮。高亮依赖一份"词表":哪些标识符是内置元素 哪些是指令 哪些是内置函数。 这份词表在后端 schema 包里已经有了——它同时服务于补全 hover 诊断。问题是前端 Monaco Editor 的 Monarch t

  • 最初的需求很简单:每天早上抓一批 RSS,过滤一遍,发到飞书群。后来一路改下来,变成了一套支持多源、多过滤器、多调度任务、多 AI 渠道、跨 VM 协程并发的装配式系统。这篇记录这条路上的几个关键转折点。 起点:一份 YAML 工作流 需求的雏形是一份 YAML:14 个 RSS 源、关键词粗筛、L