OpenGL-ES 学习(9) ---- OpenGL-ES 简介和基本 Pipeline

目录

OpenGL-ES 简介

OpenGL-ES(OpenGL for Embedded System)是以手持和嵌入式设备为目标的高级3D图形应用编程接口,OpenGL ES 支持的的平台包括 IOS,Android,BlackBerry,bada,Linux 和 windows,它还是基于浏览器的3D图形Web标准WebGL的基础,OpenGL-ES 标准由 khronos 组织发布
OpenGL-ES 的标准变迁如下:

OpenGL-ES 版本 简介
1.0 固定管线
1.1 固定管线
2.0 开始支持可编程管线
3.0 从OpenGL 3.3 标准演化而来

渲染管线

OpenGL-ES 的渲染管线如下:

顶点和顶点着色器

顶点和顶点着色器(Vertex & Vertex Shader),Shader 是指运行在GPU可编程管线上的程序,Shader 语言也就是GPU所用的编程语言,本质是一种类C语言
Vertex Shader 的内容包含:

  • Shader程序
  • Shader 的输入属性,就是顶点数组提供的各个顶点的属性
  • uniform(统一变量) Vertex/Pixel shader 使用的不变的变量
  • 采样器(Sampler)

在图元光栅化阶段,为每个生成的片段计算 Vertex Shader 的输出值,并作为输入值传递给 Fragment Shader,
用于分配给每个图元顶点的Vertex shader输出每个片段值得机制被称为插值

Vertex Shader 流程框图:

图元装配和光栅化

图元就是基本的图形对象比如三角形,图元的每个顶点被发送到每个Vertex Shader 的不同拷贝,在裁剪之后,被转换为屏幕坐标

光栅化是将图元转换为一组二维片段的过程 ,此后这些片段就会交给PixelShader 处理,这些二维片段表示屏幕上可以绘制的像素

片段和片段着色器

片段着色器(Pixel Shader/Fragment Shader)为片段操作实现了通用的可编程方法,它的组成如下:

  • Shader 程序
  • 输入变量:光栅化阶段用插值为每个片段生成的 Vertex Shader 输出
  • 输出变量
  • 采样器(Sampler)

Pixelshader 流程框图:

逐片段操作

OpenGL-ES 逐片段的操作流程如下:

EGL

OpenGL-ES 命令需要存储渲染上下文的状态和绘制表面的支持

  • 渲染上下文存储相关的 OpenGL-ES 状态
  • 绘制表面是用于绘制图元的表面,它指定渲染所需的缓冲区类型,比如颜色缓冲区,深度缓冲区和模板缓冲区,绘制表面还需要指定所需缓冲区的位深度(本质上对接窗口系统)

因为 OpenGL-ES 没有提及如何常见渲染上下文,或者渲染上下文如何连接到原生窗口系统,EGL就是 khronos 提出的OpenGL-ES 和原生窗口系统之间的接口;

EGL的功能如下:

  • 查询并初始化设备显示商的可用显示设备(获取eglDsiplay)
  • 创建渲染表面
    EGL 创建的表面可用分为屏幕上的表面和屏幕外的表面,屏幕上的表面连接到原生窗口系统,屏幕外的表面不显示但是用作渲染表面的像素缓冲区
  • 创建渲染上下文(eglContext)
    EGL 的最新版本时 EGL v1.4
相关推荐
西岸行者4 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
悠哉悠哉愿意4 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码4 天前
嵌入式学习路线
学习
毛小茛4 天前
计算机系统概论——校验码
学习
babe小鑫4 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms4 天前
ROS2知识大白话
笔记·学习·ros2
在这habit之下4 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs
我想我不够好。4 天前
2026.2.25监控学习
学习
im_AMBER4 天前
Leetcode 127 删除有序数组中的重复项 | 删除有序数组中的重复项 II
数据结构·学习·算法·leetcode
CodeJourney_J4 天前
从“Hello World“ 开始 C++
c语言·c++·学习