top of page

macOS 15.8.2 在 RC 版本中导致 OpenGL 故障,随后 Apple 修复

1小时前
讀畢需時 13 分鐘

在两版发布候选系统让多款 Mac 应用中的加速 3D 视图变为空白后,“macOS 15.8.2 导致 OpenGL 故障”成为新闻标题。这一问题波及 Apple silicon 设备,影响原生软件和通过 Rosetta 运行的软件,并延续至第二个候选版本。不过,这个令人担忧的标题遗漏了一个决定性细节:Apple 在最终更新发布前,已于发布候选版 3 中修复了这一回归问题。

这仍然是一个严重的 macOS OpenGL 问题。使用 NSOpenGLView,或将 NSOpenGLContext 直接附加到窗口的应用,可能失去其可绘制表面。菜单和其他界面元素仍可见,但 CAD 模型、终端窗口、游戏和插件界面会渲染为一片空白。

这一事件揭示了 Apple 持续承诺兼容性与其八年来推动开发者转向 Metal 之间更大的冲突。OpenGL 已被弃用,但许多仍在维护的应用依然依赖它。因此,一个破坏这一兼容层的维护更新,其影响可能远超已经停止维护的软件。

macOS 15.8.2 对 OpenGL 造成了什么破坏

此次回归并未禁用所有 OpenGL 操作。它破坏的是在普通应用窗口内呈现加速 OpenGL 内容的路径。

首份详细的开发者报告描述了搭载 M1 Pro 芯片的 MacBook Pro 上出现的故障。该问题在系统从 macOS 15.8 升级到 macOS 15.8.2 发布候选版 1、构建版本 24H219 后出现。

一个最小测试创建了 NSOpenGLView,请求加速像素格式,并尝试绘制一个绿色方块。程序没有获得可用的默认帧缓冲区,而是报告没有附加可绘制对象。

帧缓冲区是在渲染后的像素显示到屏幕前用于存储图像的区域。没有有效的默认帧缓冲区,应用仍可发出图形命令,却无法在窗口中呈现结果。

测试返回了三个重要信号:kCGLCPHasDrawable 为零,帧缓冲区状态为 GL_FRAMEBUFFER_UNDEFINED,而 glClear 产生了 GL_INVALID_FRAMEBUFFER_OPERATION。相关内核日志报告了无效的表面标识符。

这些结果显著缩小了故障范围。应用已创建 OpenGL 上下文,但 macOS 在将该上下文连接至操作系统管理的窗口表面时失败。

这一差异解释了令人困惑的用户体验。受影响的应用可以正常启动,并显示菜单、按钮、检查器或工具栏。但其加速画布会保持白色、黑色或透明,因为最终呈现路径已经失效。

最初的报告者发现,离屏帧缓冲对象仍可工作。CAOpenGLLayer 和 NSOpenGLLayer 也能在同一进程中继续渲染。这些结果表明,底层 OpenGL 实现并未完全消失。

该故障同时影响 arm64 应用,以及通过 Rosetta 运行的 x86_64 应用。无论是由图层支持还是不由图层支持的视图,以及主线程和后台线程的渲染路径,均会出现这一问题。

这种广泛性很重要,因为它使单个应用的孤立缺陷不太可能成为原因。多种不同配置都在操作系统的窗口表面路径中遭遇了同样的故障。

报告中提到了 Sony Imaging Edge Desktop Viewer、DJI Studio、kitty、Alacritty、Godot 和 Bambu Studio。随后,其他用户还确认 FreeCAD、PrusaSlicer、OrcaSlicer、音频插件界面和多款 OpenGL 游戏受到影响。

另一组用户报告描述了 OpenSCAD 和 Bambu Studio 中的空白 3D 区域。一项诊断测试发现,加速 OpenGL 呈现失败,而软件 OpenGL 和 Metal 均可正常通过。

这一组合提供了另一条有用线索。这些应用并非整体上无法绘制,Mac 也没有失去所有图形加速能力。某一条旧式加速呈现路径拒绝了分配给它的表面。

这一 macOS OpenGL 问题还在多个 Apple silicon 世代的设备上复现。公开报告涵盖 M1、M2 Pro、M4、M4 Pro 和 M4 Max 系统。这些证据表明,缺陷并不局限于某一种 GPU 型号。

该回归问题在 macOS 15.8.2 发布候选版 2、构建版本 24H225 中仍然存在。10 月 14 日的测试得到了相同的结果:缺少可绘制对象、未定义的帧缓冲区,以及无效表面的提示信息。

在当时,这种担忧是合理的。两个发布候选版都暴露出维护分支中广泛的兼容性故障,而来自无关开发者的应用呈现出一致症状。

但这两个构建版本都不是最终公开发布版。当第三个候选版本到来后,这一事实将成为核心。

被弃用并不代表可以随意舍弃

Apple 在 2018 年弃用了 OpenGL,但 macOS 仍持续提供该框架以保证兼容性,这在实际层面形成了维持既有应用正常工作的责任。

Apple 在 macOS Mojave 10.14 中宣布弃用 OpenGL。其 Mojave 发布说明指出,OpenGL 和 OpenCL 框架仍将为兼容性而保留。Apple 建议开发者将新项目迁移至 Metal。

弃用是一种开发信号,并不等于立即移除。它意味着开发者应避免围绕该接口建立新的依赖,因为其未来有限。现有二进制程序仍然可以在多年内依赖这一接口。

OpenGL 本身是一个跨平台图形 API,用于向 GPU 提交绘图命令。Apple 首选的替代方案 Metal,则是面向 macOS、iOS、iPadOS 及相关系统的平台专属图形与计算 API。

对于新的 Mac 应用,Metal 显然是长期选择。它可获得当前平台功能,并契合 Apple 的图形架构。但这并不意味着每个既有产品的迁移都很简单。

CAD 程序、科学可视化工具、创意应用、终端模拟器、游戏和跨平台框架,通常会在不同操作系统间共享渲染代码。替换一个后端可能需要架构调整、额外测试,以及在漫长的过渡期内同时支持两条渲染路径。

一些项目使用 Qt、GLFW、SDL、游戏引擎或其他抽象层。这些层降低了平台特定的工作量,但未必能完全消除它。框架仍可能针对特定版本、功能或部署目标选择 OpenGL 后端。

较旧的商业应用带来了另一类问题。其开发者可能仅维持必要的兼容性,尤其当 Mac 版本只占用户群的一小部分时。即便客户持续依赖该软件,完整的 Metal 渲染器也可能缺乏经济合理性。

开源项目也面临类似限制。贡献者可能在测试硬件有限的情况下支持多个平台。由于大部分渲染逻辑可以共享,OpenGL 路径仍然具有吸引力,因为它可同时适用于 Linux、Windows 和 macOS。

Apple 也一直在 Apple silicon 上保留 OpenGL。这一决定让许多 Intel 时代的应用能在架构迁移期间继续运行。因此,用户逐渐认为被弃用的 OpenGL 虽然老旧,但仍然可用,而不是已经不存在。

15.8.2 的回归问题与这一预期发生了冲突。应用没有显示关于不受支持技术的有序警告,而是在启动后失去了最关键的视觉区域。

这正是“开发者本应完成迁移”这一回应并不完整的原因。迁移会降低未来风险,但用户无法重写一款已购买的应用、专业工程工具或被遗弃的游戏。

相反的论点也走得太远。测试版中的回归并不能证明 Apple 暗中移除了 OpenGL,也无法证明其有意通过故障强迫用户升级。仍然可用的离屏和基于图层的路径,与蓄意关闭整个框架的说法相矛盾。

更狭义的证据指向加速窗口呈现中的兼容性错误。其技术特征以及后续的修复,都支持这一判断。

关键压力落在两方身上。Apple 必须防止优先级较低的旧代码成为不可预测的故障点。应用开发者则必须决定,还能依赖一个自 2018 年起就被 Apple 劝退使用的框架多久。

任何一方都无法让迁移成本消失。用户则处于两者之间尴尬的位置。

真正的冲突是兼容性与迁移之间的矛盾

Apple 希望开发者转向 Metal,而用户仍期待已随系统发布的兼容性框架能经受住常规操作系统更新。

这是该事件背后的核心张力。OpenGL 的弃用使其在 Apple 的战略中不再重要,但持续提供它又使其在用户层面具有实际重要性。

成熟的兼容层在正常运作时很少受到关注。只有当一次微小的内部改动让看似毫无关联的应用无法使用时,它的价值才会显现。

15.8.2 的故障提供了清晰例子。摄影师使用的查看器、3D 打印切片软件、终端模拟器、音频插件和开源游戏并不共享同一市场,却可能汇聚到同一条操作系统渲染路径上。

这带来了不寻常的测试挑战。Apple 无需逐一验证每个应用,就能捕捉到如此广泛的回归。一个通过 NSOpenGLView 呈现加速 OpenGL 的小型自动化测试,应当足以暴露缺少可绘制对象的问题。

公开的最小复现程序恰好完成了这项任务。它使用公开的 Apple 框架,绘制简单色彩,并检查帧缓冲区状态。其范围狭窄,使这份报告比仅列举故障应用更具可操作性。

一名 Apple Developer Technical Support 工程师确认收到了该报告,并请求提供后续构建版本的结果。该工程师还要求提交 sysdiagnose,它会捕获接近故障发生时间的详细系统状态。

Apple 没有公开承诺修复的发布日期。该工程师表示,公司无法就已知问题或修正是否会发布发表评论。这一回应令部分开发者感到沮丧,因为他们不得不反复测试,却没有明确承诺。

另一些人则更积极地看待这次沟通。报告已进入正确渠道,包含最小复现,并收到了补充证据的请求。这正是发布候选版测试的目的。

这一分歧在 Hacker News 讨论中尤为突出,讨论吸引了数百条评论。批评者将该回归视为 Apple 忽视被弃用技术的又一迹象。辩护者则强调,受影响的构建版本是预发布软件,且 Apple 正在积极收集测试结果。

两种立场都捕捉到了部分事实。发布候选版的存在是为了在最终版本发布前发现缺陷。在这一阶段发现问题,并不等同于将其广泛推送给用户。

不过,发布候选版也代表一个被认为已接近完成的构建版本。影响众多常见应用的回归值得审视,尤其是在它延续至第二个候选版本之后。

准确的措辞至关重要。“macOS 15.8.2 破坏 OpenGL”准确描述了已测试的候选版本,却暗示最终正式版已经出现这一结果。加上“RC”即可在保留警示的同时,明确该软件仍处于预发布状态。

这种区别不只是标题规范的问题。用户会根据对发布状态的判断作出决定。看到一个已正式发布的更新破坏了关键软件,有人可能会尝试风险较高的回滚;看到的是 Beta 版缺陷,则可以避开该版本,并等待下一候选版。

兼容性与迁移之间的冲突也影响开发者的规划。项目可以保留其 OpenGL 渲染器,同时加入有针对性的防护措施;但每次未来的 macOS 更新都会带来不确定性。原生 Metal 后端需要更多投入,但更符合 Apple 支持的方向。

转换层提供了一条折中路径。MoltenVK 将 Vulkan 应用映射到 Metal,而较新的可移植性方案可通过现代 API 转换 OpenGL 行为。这些层能减少一部分平台特定工作,但也会引入自身的兼容性和性能考量。

OpenGL 的动态状态模型可能难以高效映射到现代图形 API。Metal 和 Vulkan 鼓励开发者预先组装更多状态;OpenGL 则允许在渲染期间频繁更改状态,这可能迫使转换层重建或缓存现代管线对象。

这种架构差异意味着迁移并非只是机械地重命名函数。应用必须重新审视资源管理、着色器编译、同步和呈现行为。

即便如此,这次回归也说明推迟迁移是有代价的。被弃用的代码获得的功能开发更少,测试覆盖也可能更少。其用户会异常依赖微小的维护性修复。

Apple 仍掌握着这项约定的另一半。如果它为兼容性提供了一个接口,那么点版本更新不应在受支持硬件上悄然破坏一条核心路径。

RC 3 修复改变了故事走向

macOS 15.8.2 release candidate 3 恢复了损坏的路径,将一场可能面向公众的兼容性故障转变为一次成功的预发布发现。

原始开发者在测试 release candidate 3、构建版本 24H230 后更新了论坛帖子。被采纳的回答称问题已修复,OpenGL 窗口呈现再次正常工作。

报告还指出了一个值得关注的版本变化。IOGPUFamily 从损坏构建中的 104.6.6 回退至 RC 3 中的 104.6.5。

这一观察表明,Apple 可能回滚或替换了与该回归相关的图形组件。但它本身并不能揭示缺陷代码,也不能证明整个组件都导致了故障。

修复后的构建是反驳“故意移除”说法的最有力现有证据。Apple 并未让窗口路径保持损坏,也没有宣称该行为符合预期;后续候选版恢复了它。

这一逆转并不意味着最初报告不重要。RC 1 和 RC 2 确实在多台机器和多个应用中失败。安装这些构建的开发者遭遇了真实的中断。

但它改变了应负责任地得出的结论。最终的故事并不是 Apple 在 macOS 15.8.2 中终结了 OpenGL 兼容性,而是一次严重回归进入了两个预发布构建,借助可复现测试被记录下来,并在第三个构建中得到修正。

这一时间线也说明 Beta 报告为何需要持续更新。基于 RC 2 的静态文章会在 RC 3 发布后变得误导。软件报道必须跟踪构建编号,而不只是营销版本号。

构建编号之所以重要,是因为 Apple 可以发布多个带有相同可见版本标签的二进制文件。本案中,24H219、24H225 和 24H230 都属于 15.8.2 测试序列,但它们的表现并不相同。

因此,用户在诊断 OpenGL 故障前应确认已安装的构建版本。仅凭 macOS 版本号,可能无法区分受影响的候选版和已修复的版本。

这项修复也验证了最初报告者的工作。他们提供了最小公开示例、内核输出、调用跟踪、受影响配置,以及独立的反馈标识符。这些证据让 Apple 得以锁定一个范围明确且可重复的故障。

不够具体的报告可能只会说,若干应用显示空白窗口。这一症状可能来自应用设置、损坏的缓存、不兼容插件、GPU 故障或框架 Bug。

复现测试排除了这些可能性。它证明同一个公开 API 会在一个极小程序中失败,而相关渲染路径仍能正常工作;随后又使用同一测试确认了修复。

仍然存在一个合理的质量问题:一条核心兼容性路径在多代 Apple silicon 设备上失效。复现程序的简洁性令人质疑,Apple 的自动化覆盖是否包含维护分支上的硬件加速 NSOpenGLView 呈现。

没有公开证据表明 Apple 在内部测试什么。因此,声称不存在任何回归测试是不正确的。这次故障只能说明,现有流程无论为何,未能阻止前两个候选版到达测试者手中。

这一事件同样不能证实 macOS 软件质量存在更广泛的下滑。个别开发者提到其他长期存在的问题,但这些轶事并未提供受控的趋势衡量。

证据支持的是一个更狭窄但仍然重要的结论:被弃用的框架可能承载着广泛的应用依赖面,却获得比当前 API 更少的可见关注。这种组合让基础兼容性测试尤为有价值。

开发者不应将 RC 3 理解为可以永远忽视迁移的许可。此修复保留的是当前兼容性,而不是 OpenGL 的长期地位。Apple 的建议仍然是 Metal。

用户也不应把每个 Beta 故障都视作永久性的平台决定。Release candidate 只是在说明某个特定构建,并不能证明最终产品的行为。

开发者和 Mac 用户接下来应关注什么

接下来的检验是修正后的构建能否原样进入正式发布,随后是受影响应用能否确认渲染恢复正常。

第一个信号是最终 macOS 15.8.2 的构建编号。如果 Apple 发布 24H230,或发布保留修复的更高构建版本,那么这项核心回归对普通用户而言便已解决。

任何运行较早 release candidate 的人都不应假定版本标签意味着修复已经存在。检查构建编号可将受影响的 24H219 和 24H225 候选版与 RC 3 区分开来。

第二个信号是应用层面的确认。最小示例证明框架路径有效,但生产软件还会加入工具包、插件、渲染循环和应用特有状态。

开发者应重新测试报告中提及的应用,包括 CAD 和切片工具、终端模拟器、游戏、图像软件以及音频插件界面。若这些类别均能成功渲染,将增强人们对修复覆盖更广泛影响的信心。

在 RC 3 或正式版上仍看到空白 3D 视口的用户,应记录准确的 macOS 构建版本、Mac 型号、应用版本和渲染后端。这些信息可帮助区分最初的回归与无关的应用问题。

第三个信号是未来维护版本如何对待被弃用的图形路径。一次已修复的回归,并不能说明 Apple 是否加强了对 NSOpenGLView、NSOpenGLContext 及相关呈现路径的覆盖。

应用开发者无需立即重写每个渲染器,也可以降低风险暴露。自动化启动测试可验证窗口是否收到有效帧缓冲、是否呈现已知图像,以及是否返回预期的图形错误。

当产品依赖旧版图形技术时,团队应在 Apple 的 Beta 和 release-candidate 构建上运行这些测试。一套小型兼容性测试可在客户遇到问题前发现操作系统回归。

在可能的情况下,开发者可以保留备用路径。论坛报告发现 CAOpenGLLayer 仍可工作,而软件 OpenGL 在至少一项用户测试中仍然可用。这些方案或许能让应用继续可用,但性能和集成方式可能不同。

另一个建议的临时方案是,渲染到由 IOSurface 支持的离屏帧缓冲区,再通过 Core Animation 图层呈现。IOSurface 是 Apple 用于在图形和系统组件之间共享图像缓冲区的机制。

这一方案在技术上有意义,但并不简单。它会改变呈现架构,增加同步方面的顾虑,并要求应用开发者发布新版本。对于封闭或不再支持的软件,它并非用户可行的修复方式。

对于长期维护的产品,战略问题仍在于:是增加 Metal、采用可移植性层,还是迁移到拥有持续维护 macOS 后端的框架。正确选择取决于性能要求、平台覆盖范围和可投入的工程时间。

依赖专业 OpenGL 应用的 Mac 用户应谨慎对待重大更新和维护更新。保留最新备份,并等待应用层面的确认,可降低意外回归的代价。

这并不意味着无限期避开更新。安全修复很重要,停留在旧操作系统上也有其风险。更好的做法是分阶段部署,尤其适用于工作室、实验室、车间和生产环境。

“macOS 15.8.2 破坏 OpenGL”这句话捕捉到了一次真实且严重的 Beta 故障,却没有涵盖完整结果。RC 3 在正式发布前恢复了受影响的窗口渲染路径,表明 Beta 流程在一次令人不安的疏漏之后发挥了作用。

长远的教训不是被弃用的软件不值得支持,也不是每个 release-candidate 缺陷都预示着平台崩塌。关键在于,兼容性承诺需要测试,而报道需要精确到构建级别。

如果你的工作依赖某个 OpenGL 应用,请确认准确的 macOS 构建版本,并先在一台非关键 Mac 上测试修正后的发布版本。然后向应用开发者提出一个更长期的问题:当 Apple 最终不再将修复 OpenGL 兼容性视为值得做的事情时,哪条渲染路径能保护这一工作流?

 
 

免费开始使用

一款本地优先的AI助手

为了获得更好的人工智能体验,

remio 目前仅支持Windows 10+ (x64)和M-Chip Mac 。

你的 AI 工作伙伴

和 remio 一起高效工作

规划、创作、交付

一站式完成

bottom of page