Skip to content

比喻:建筑工地

  • OpenGL ES 3 = 建筑工人和施工技术(具体怎么盖房子)
  • EGL = 工地办公室和施工许可(在哪儿盖、如何展示)

OpenGL ES 3 —— “建筑工人团队”

cpp
// OpenGL ES 3:真正干活的人
glClearColor(0.05f, 0.05f, 0.08f, 1.0f);    // 准备“底色”
glDrawArrays(GL_TRIANGLES, 0, 36);           // 砌“砖”(画三角形)
glUniform4fv(uColor_, 1, c.color);           // 上“油漆”(设置颜色)

OpenGL ES 3 负责:

  • 绘制几何(点/线/三角形)
  • 颜色与透明度
  • 光照计算
  • 3D 变换(平移/旋转/缩放)
  • 纹理贴图

特点:

  • 只管画画,不管在哪显示;
  • 专业工具齐全;
  • ES 3 相比 ES 2 功能更强、效率更高。

EGL —— “工地管理办公室”

cpp
// EGL:准备场地、许可与展示
display_ = eglGetDisplay(EGL_DEFAULT_DISPLAY);  // 找到“工地”
eglInitialize(display_, nullptr, nullptr);       // 初始化“场地”
surface_ = eglCreateWindowSurface(display_, cfg, window_, nullptr); // 准备“画布”
context_ = eglCreateContext(display_, cfg, EGL_NO_CONTEXT, ctxAttrs); // 许可证
eglSwapBuffers(display_, surface_);              // 展示成果

EGL 负责:

  • 场地准备:连接 OS 与显示设备(EGLDisplay);
  • 手续办理:创建绘图上下文(EGLContext);
  • 舞台搭建:创建绘制表面(EGLSurface);
  • 成果展示:交换缓冲、把图像显示到屏幕;
  • 工具协调:管理 OpenGL 与系统通信。

特点:

  • 不画内容,只提供“能画并能显示”的环境;
  • 是 App 和系统的桥梁。

实际工作流程对比

EGL(准备工作):

cpp
display_ = eglGetDisplay(EGL_DEFAULT_DISPLAY);
eglInitialize(display_, nullptr, nullptr);
context_ = eglCreateContext(display_, cfg, EGL_NO_CONTEXT, ctxAttrs);
surface_ = eglCreateWindowSurface(display_, cfg, window_, nullptr);
eglMakeCurrent(display_, surface_, surface_, context_);

OpenGL ES 3(实际施工):

cpp
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glUseProgram(program_);
glBindVertexArray(vao_);
glDrawArrays(GL_TRIANGLES, 0, 36);
glUniform4fv(uColor_, 1, c.color);

两者关系:

text
EGL 准备好 → OpenGL ES 3 开始画 → EGL 负责展示

在代码中的分工(示例)

cpp
void RenderFrame() {
  // EGL:初始化阶段已完成 display_/surface_/context_

  // OpenGL ES 3:绘制
  glClearColor(0.05f, 0.05f, 0.08f, 1.0f);
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  glUseProgram(program_);
  glBindVertexArray(vao_);

  for (/* 每个物体 */) {
    glUniformMatrix4fv(uMVP_, 1, GL_FALSE, MVP);
    glUniform4fv(uColor_, 1, c.color);
    glDrawArrays(GL_TRIANGLES, 0, 36);
  }

  // EGL:展示
  eglSwapBuffers(display_, surface_);
}

版本对比:OpenGL ES 3 vs ES 2

glsl
// ES 2(较旧)
#version 100
attribute vec3 aPos;

// ES 3(较新)
#version 300 es
layout(location=0) in vec3 aPos;

ES 3 典型提升:

  • 更多纹理格式;
  • 更强缓冲/对象管理;
  • GLSL 语法更现代、更灵活;
  • 更好的性能与可移植性。

速览表

角色OpenGL ES 3EGL
职责画什么(内容)在哪画(环境)
比喻建筑工人工地办公室
工作绘图、上色、光照创建环境、显示结果
依赖需要 EGL 提供环境不画内容、只管环境

总结

EGL 是“舞台管理员”,OpenGL ES 3 是“演员”。

  • 没有 EGL,演员无处表演;
  • 没有 OpenGL,舞台上无人演;
  • 两者配合,才能上演精彩的 3D 图形大戏。

本站总访问