一、OpenGL ES 初探

2020-07-25  本文已影响0人  致青春_bf42

OpenGL ES

OpenGL ES 渲染流程

下图出自苹果官方文档OpenGL ES as a Client-Server Architecture

OpenGL ES渲染流程

OpenGL ES的渲染主要分为两部分:CPU和GPU

OpenGL ES 图形管线

OpenGL ES 图形管道有以下两种图示,其中原理都是一致的,只是描述方式不同

图示一
图示一
图示二 Apple官方图示

来自苹果官方文档OpenGL ES as a Graphics Pipeline

图示二

顶点着⾊器

简单来说就是处理顶点的着色器程序,如图所示

顶点着⾊器
顶点着色器处理的业务
顶点着色器GLSL代码示例
attribute vec4 position;
attribute vec2 textCoordinate; 
uniform mat4 rotateMatrix; 
varying lowp vec2 varyTextCoord; 
void main()
{
    varyTextCoord = textCoordinate;
    vec4 vPos = position;
    vPos = vPos * rotateMatrix;
    gl_Position = vPos; 
}

图元装配

顶点着⾊器之后,下⼀个阶段就是图元装配

光栅化

在这个阶段绘制对应的图元(点/线/三⻆形).
光栅化就是将图元转化成⼀组⼆维⽚段的过程.⽽这些转化的⽚段将由⽚元着⾊器处理.这些⼆维⽚段就是屏幕上可绘制的像素.

光栅化

⽚段着⾊器/⽚元着⾊器

下图表示片元着色器中有哪些输入和输出

片元着色器
片元着色器业务

它可以⽤于图⽚/视频/图形中每个像素的颜⾊填充(⽐如给视频添加滤镜,实际上就是将视频中每个图⽚的像素点颜⾊填充进⾏修改.)

片元着色器GLSL代码示例
varying lowp vec2 varyTextCoord; 
uniform sampler2D colorMap;
void main() {
gl_FragColor = texture2D(colorMap, varyTextCoord); 
}
总结

逐片段操作

这个过程都是GPU内部处理的,开发者并不需要关心,将处理好的数据存储到帧缓存区,最后读取帧缓存区将图形显示到屏幕上

OpenGL ES的应用

图片滤镜
视频滤镜

原理以及处理方式是一样的(GLSL代码),视频也是一帧一帧处理的,而一帧就是一张图片

EGL(Embedded Graphics Library)

上一篇 下一篇

猜你喜欢

热点阅读