---
title: "我为什么到 2026 年还在教 OpenGL ES 3.0 - Angryecho"
description: "编者按：下文编译自 Elias Farhan 2026 年 1 月 27 日的博文 Why I still teach OpenGL ES 3.0。作者在瑞士日内瓦 SAE Institute 讲授计算机图形学入门课。正文保留第一人称，仅做翻译润色与结构整理。"
canonical_url: "https://www.angryecho.com/c/123/p/P2TBBpIQ2OEItHZZgi4Wg"
meta:
  "og:description": "编者按：下文编译自 Elias Farhan 2026 年 1 月 27 日的博文 Why I still teach OpenGL ES 3.0。作者在瑞士日内瓦 SAE Institute 讲授计算机图形学入门课。正文保留第一人称，仅做翻译润色与结构整理。"
  "og:image": "https://www.angryecho.com/_og/d/c_Post%2Ctitle_~5ZCQ5qe9572R%2Cdescription_~5ZCQ5qe95LiA5LiL77yM5bCx5LiK5ZCQ5qe9572R44CC%2CpostId_P2TBBpIQ2OEItHZZgi4Wg%2Crevision_~MjAyNi0xMC0yOVQwMjo1NTo1OS41MDEzMzFa%2Cp_Ii9jLzEyMy9wL1AyVEJCcElRMk9FSXRIWlpnaTRXZyI%2Cs_tYZmvk2s2RkPqFyj.png"
  "og:image:height": "630"
  "og:image:type": image/png
  "og:image:width": "1200"
  "og:title": "我为什么到 2026 年还在教 OpenGL ES 3.0"
---

> Index of every page on this site: [llms.txt](https://www.angryecho.com/llms.txt)

# **我为什么到 2026 年还在教 OpenGL ES 3.0**

> 编者按：下文编译自 Elias Farhan 2026 年 1 月 27 日的博文 *Why I still teach OpenGL ES 3.0*。作者在瑞士日内瓦 SAE Institute 讲授计算机图形学入门课。正文保留第一人称，仅做翻译润色与结构整理。

过去几年，我一直在 SAE Institute Geneva 教这门为期一个学期的计算机图形学入门课，也一直在想：什么时候该从 OpenGL ES 3.0 迁到更「现代」的 API。

去年 11 月我去了 Graphics Programming Conference。业界谈话和演讲里，这个话题又冒了出来。Teardown 那一场提到原作跑在 OpenGL 3.3，X-Plane 那一场提到渲染引擎曾用 OpenGL 2.1——两边讲的都是怎样迁到更新的 API 才能做出更好的画面。听起来像 OpenGL 的黄昏。

真正让我重新掂量「要不要立刻换课」的，是两场和教育相关的演讲：Matthieu Delaure 讲技术美术如何从零写光栅器；Mike Shah 讲教程之后的下一步。后者让我怀疑：为了这门入门课去整体迁移，是否还划算。迁移意味着几乎所有课件都要重写，还必须证明新 API 比 OpenGL ES 3.0 值得付出这笔成本。

## 课到底教什么

入门模块的目标，是让学生用图形 API **实现一个 3D 场景**，而不是做一个通用、数据驱动的 3D 渲染器。最终可执行文件可以很「手写」：从相机视角裁剪场景，再一件件画物体。

开课以来，我基本跟着 learnopengl.com 的章节结构走，只是换成 OpenGL ES 3.0：Hello Triangle、Hello Texture……一章章实现、测试。

为什么偏偏是 ES 3.0？它 2012 年 8 月发布，到现在大约 14 年——在图形圈算很长了。我选它，是因为在我看来它是跨平台最整齐的一版 OpenGL：同一套 C++（加点 `#ifdef`）和同一套着色器，可以覆盖：

- **Windows**：驱动偶有问题，但 ES 3.0 与 OpenGL 4.3 兼容，我按 4.3 来假设；
- **Linux**：机房有默认进 Linux 的机器，换编译器练同一份代码很有用；
- **Android**：应用从 Java 启动，再调本地库，稍微麻烦；
- **Nintendo Switch**：学校有两台开发机，去掉 glew/glad、换机内嵌的 OpenGL 封装后能跑；
- **WebGL2**：这是我最喜欢的理由——配合 emscripten，学生可以把作业挂到自己的网站/博客（这篇博文里的 demo 就是这么来的）；
- **iOS / macOS**：已经不再支持，但我们游戏编程本科的学生基本不用 Mac。

和更新的 API 比，OpenGL 把同步大多甩给驱动，初始化样板代码少很多，代价是驱动开销。笔记本选错 GPU（集显而不是独显）仍是每年的麻烦；现在还得在 Windows 设置里给单个应用开「高性能」。Vulkan 一类新 API 把这类问题处理得更干净，这点我承认。

## 课上我们抽象了什么

每周学生大约要完成 2–3 个围绕某一特性的 sample（例如在延迟渲染作业之上做 SSAO）。他们通常会自己长出一层抽象；今年我们干脆一起维护公共 git 仓库，抽象一写完全班就能用。这件事我还想继续做下去。

我们做了 `Pipeline`（我其实很不喜欢 OpenGL 把 pipeline 叫 program）、`Shader`、`Buffer` / `VertexInput`、`Texture`、`Framebuffer` 等封装；着色器侧用 glslangValidator 在编译期查语法。模型加载用 Assimp，路线和 learnopengl.com 接近，方便学生对着参考实现查错。多 pass、后处理、HDR、G-Buffer / deferred 也都会碰。

## ES 3.0 缺什么，现代 API 又多什么

为了保住 WebGL2，我们拿不到（或不能默认布置）不少东西：SSBO、compute shader、SPIR-V、bindless、indirect / multi-draw indirect 等——课上会讲概念，实现通常留给愿意放弃 WebGL2 兼容的学生。

贴着 OpenGL 教，也意味着碰不到 Vulkan / DX12 那套心智模型和很多能力。硬件光追我会展示利弊和未来方向，但入门课不能要求人人交一份硬件光追管线。多线程生成 GPU 命令在 DX12/Vulkan 里可行，在 OpenGL 里驱动状态基本绑在单线程上——像 *Halo Infinite* 那种吃多线程提交的游戏，不是这门课的作业形态。

## 框架呢？

我喜欢 SDL GPU，自己的图形编辑器也在往上迁，能同时打 Vulkan、DirectX、Metal。但对入门课来说，它仍有点「臃肿」。bgfx、raylib 也有人说好；WebGPU 还多一门着色语言，体感又太像 Vulkan 1.0，我以前被折磨过。学生在裸 OpenGL 里犯错，原因往往比较好定位；套框架后还得连库代码一起看。我的目标是教图形 API，并让他们在上面自己长抽象。

## 结论

即便到 2026 年，OpenGL ES 3.0 对教学仍有不少好处（尤其是 WebGL2），代价是要扛住这套 API 的历史包袱。14 年在计算机图形学里很长；Adam Sawicki 在自己的图形 API 博文末尾也不再推荐把 OpenGL 当首选。但这门课这些年确实让学生摸到图形编程是怎么回事，对一些人来说是职业的第一步。我还想另写一篇：为什么我们还没切到 Vulkan（同步、PSO、驱动开销）。欢迎同行教师和业界朋友来聊——你们希望图形课的学生出门时会什么。

> 说明：文中课程安排、平台兼容与教学选择均为作者 Elias Farhan 自述；学生作品名单见原文链接。HN 讨论里也有人强调：若目标是图形概念本身，软件光栅器/光线追踪往往比死磕 API 更有效；若目标就是教 GPU 渲染，OpenGL 仍相对好上手。

## 来源

> 原作者：Elias Farhan  
> 原文： [Why I still teach OpenGL ES 3.0](https://eliasfarhan.ch/graphics/cpp/2026/01/27/why-i-teach-opengles.html)，eliasfarhan.ch，2026年1月27日。  
> HN 讨论： [I still teach OpenGL ES 3.0](https://news.ycombinator.com/item?id=50253939)，2026-10-27。  
> 查询日：2026-10-27。

#OpenGLES #计算机图形学 #教学 #WebGL2 #经验分享

排序方式 :

### **成为第一条评论！**

Nobody's responded to this post yet. Add your thoughts and get the conversation going.

```json
{"@context":"https://schema.org","@graph":[{"@id":"https://www.angryecho.com/c/123/p/P2TBBpIQ2OEItHZZgi4Wg#post","@type":"DiscussionForumPosting","commentCount":0,"dateModified":"2026-10-29T02:55:59.501Z","datePublished":"2026-10-27T02:15:00.000Z","description":"编者按：下文编译自 Elias Farhan 2026 年 1 月 27 日的博文 Why I still teach OpenGL ES 3.0。作者在瑞士日内瓦 SAE Institute 讲授计算机图形学入门课。正文保留第一人称，仅做翻译润色与结构整理。","headline":"我为什么到 2026 年还在教 OpenGL ES 3.0","isPartOf":"https://www.angryecho.com/c/123","mainEntityOfPage":"https://www.angryecho.com/c/123/p/P2TBBpIQ2OEItHZZgi4Wg","text":"编者按：下文编译自 Elias Farhan 2026 年 1 月 27 日的博文 Why I still teach OpenGL ES 3.0。作者在瑞士日内瓦 SAE Institute 讲授计算机图形学入门课。正文保留第一人称，仅做翻译润色与结构整理。\n\n过去几年，我一直在 SAE Institute Geneva 教这门为期一个学期的计算机图形学入门课，也一直在想：什么时候该从 OpenGL ES 3.0 迁到更「现代」的 API。\n\n去年 11 月我去了 Graphics Programming Conference。业界谈话和演讲里，这个话题又冒了出来。Teardown 那一场提到原作跑在 OpenGL 3.3，X-Plane 那一场提到渲染引擎曾用 OpenGL 2.1——两边讲的都是怎样迁到更新的 API 才能做出更好的画面。听起来像 OpenGL 的黄昏。\n\n真正让我重新掂量「要不要立刻换课」的，是两场和教育相关的演讲：Matthieu Delaure 讲技术美术如何从零写光栅器；Mike Shah 讲教程之后的下一步。后者让我怀疑：为了这门入门课去整体迁移，是否还划算。迁移意味着几乎所有课件都要重写，还必须证明新 API 比 OpenGL ES 3.0 值得付出这笔成本。\n\n课到底教什么\n\n入门模块的目标，是让学生用图形 API 实现一个 3D 场景，而不是做一个通用、数据驱动的 3D 渲染器。最终可执行文件可以很「手写」：从相机视角裁剪场景，再一件件画物体。\n\n开课以来，我基本跟着 learnopengl.com 的章节结构走，只是换成 OpenGL ES 3.0：Hello Triangle、Hello Texture……一章章实现、测试。\n\n为什么偏偏是 ES 3.0？它 2012 年 8 月发布，到现在大约 14 年——在图形圈算很长了。我选它，是因为在我看来它是跨平台最整齐的一版 OpenGL：同一套 C++（加点 #ifdef）和同一套着色器，可以覆盖：\n\n\n\n\n\nWindows：驱动偶有问题，但 ES 3.0 与 OpenGL 4.3 兼容，我按 4.3 来假设；\n\n\n\nLinux：机房有默认进 Linux 的机器，换编译器练同一份代码很有用；\n\n\n\nAndroid：应用从 Java 启动，再调本地库，稍微麻烦；\n\n\n\nNintendo Switch：学校有两台开发机，去掉 glew/glad、换机内嵌的 OpenGL 封装后能跑；\n\n\n\nWebGL2：这是我最喜欢的理由——配合 emscripten，学生可以把作业挂到自己的网站/博客（这篇博文里的 demo 就是这么来的）；\n\n\n\niOS / macOS：已经不再支持，但我们游戏编程本科的学生基本不用 Mac。\n\n和更新的 API 比，OpenGL 把同步大多甩给驱动，初始化样板代码少很多，代价是驱动开销。笔记本选错 GPU（集显而不是独显）仍是每年的麻烦；现在还得在 Windows 设置里给单个应用开「高性能」。Vulkan 一类新 API 把这类问题处理得更干净，这点我承认。\n\n课上我们抽象了什么\n\n每周学生大约要完成 2–3 个围绕某一特性的 sample（例如在延迟渲染作业之上做 SSAO）。他们通常会自己长出一层抽象；今年我们干脆一起维护公共 git 仓库，抽象一写完全班就能用。这件事我还想继续做下去。\n\n我们做了 Pipeline（我其实很不喜欢 OpenGL 把 pipeline 叫 program）、Shader、Buffer / VertexInput、Texture、Framebuffer 等封装；着色器侧用 glslangValidator 在编译期查语法。模型加载用 Assimp，路线和 learnopengl.com 接近，方便学生对着参考实现查错。多 pass、后处理、HDR、G-Buffer / deferred 也都会碰。\n\nES 3.0 缺什么，现代 API 又多什么\n\n为了保住 WebGL2，我们拿不到（或不能默认布置）不少东西：SSBO、compute shader、SPIR-V、bindless、indirect / multi-draw indirect 等——课上会讲概念，实现通常留给愿意放弃 WebGL2 兼容的学生。\n\n贴着 OpenGL 教，也意味着碰不到 Vulkan / DX12 那套心智模型和很多能力。硬件光追我会展示利弊和未来方向，但入门课不能要求人人交一份硬件光追管线。多线程生成 GPU 命令在 DX12/Vulkan 里可行，在 OpenGL 里驱动状态基本绑在单线程上——像 Halo Infinite 那种吃多线程提交的游戏，不是这门课的作业形态。\n\n框架呢？\n\n我喜欢 SDL GPU，自己的图形编辑器也在往上迁，能同时打 Vulkan、DirectX、Metal。但对入门课来说，它仍有点「臃肿」。bgfx、raylib 也有人说好；WebGPU 还多一门着色语言，体感又太像 Vulkan 1.0，我以前被折磨过。学生在裸 OpenGL 里犯错，原因往往比较好定位；套框架后还得连库代码一起看。我的目标是教图形 API，并让他们在上面自己长抽象。\n\n结论\n\n即便到 2026 年，OpenGL ES 3.0 对教学仍有不少好处（尤其是 WebGL2），代价是要扛住这套 API 的历史包袱。14 年在计算机图形学里很长；Adam Sawicki 在自己的图形 API 博文末尾也不再推荐把 OpenGL 当首选。但这门课这些年确实让学生摸到图形编程是怎么回事，对一些人来说是职业的第一步。我还想另写一篇：为什么我们还没切到 Vulkan（同步、PSO、驱动开销）。欢迎同行教师和业界朋友来聊——你们希望图形课的学生出门时会什么。\n\n\n\n说明：文中课程安排、平台兼容与教学选择均为作者 Elias Farhan 自述；学生作品名单见原文链接。HN 讨论里也有人强调：若目标是图形概念本身，软件光栅器/光线追踪往往比死磕 API 更有效；若目标就是教 GPU 渲染，OpenGL 仍相对好上手。\n\n来源\n\n\n\n原作者：Elias Farhan\n原文：Why I still teach OpenGL ES 3.0，eliasfarhan.ch，2026年1月27日。\nHN 讨论：I still teach OpenGL ES 3.0，2026-10-27。\n查询日：2026-10-27。\n\n#OpenGLES #计算机图形学 #教学 #WebGL2 #经验分享","url":"https://www.angryecho.com/c/123/p/P2TBBpIQ2OEItHZZgi4Wg","author":{"@type":"Person","name":"lyang","url":"https://www.angryecho.com/u/V2Xlyang"},"interactionStatistic":[{"@type":"InteractionCounter","interactionType":"https://schema.org/LikeAction","userInteractionCount":0},{"@type":"InteractionCounter","interactionType":"https://schema.org/DislikeAction","userInteractionCount":0},{"@type":"InteractionCounter","interactionType":"https://schema.org/ViewAction","userInteractionCount":1},{"@type":"InteractionCounter","interactionType":"https://schema.org/ShareAction","userInteractionCount":0}]}]}
```

## Sitemap

See the full [sitemap](https://www.angryecho.com/sitemap.md) for all pages.
