音视频从入门到放弃

基础概念OpenGLES(一)

2019-06-08  本文已影响0人  仙人掌__

opengl es是什么?

tips:
libSDL是一个跨平台的图形处理库,其中有包含对opengl es的标准接口的封装及各个平台上下文,窗口管理的封装。
备注:opengl es 2.0 官方接口文档 https://www.khronos.org/registry/OpenGL-Refpages/es2.0/

基础概念

opengl es渲染管线

渲染管线也就是opengl es的工作流程,这里是opengl es2.0以后的版本的渲染管线

备注:以上所有的操作都是并行处理

opengl es的相关坐标系

纹理映射

顶点着色器中顶点坐标的顺序规则

open gl 中顶点坐标
static float verData1[8] = {
-1.0f,-1.0f, // 左下角
1.0f,-1.0f, // 右下角
-1.0f,1.0f, // 左上角
1.0f,1.0f, // 右上角
};
对应的纹理坐标
static float uvData[8] = {
0.0f, 1.0f, // 左下角
1.0f, 1.0f, // 右下角
0.0f, 0.0f, // 左上角
1.0f, 0.0f, // 右上角
};
对应的为glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); 可以渲染出一张图片

VBO

GPU中专门开辟的一块内存用于存储图元的顶点数据,这样每次调用glDrawArrays()函数时,GLSL就是直接从GPU中获取
顶点数据,而不是每次都有cpu拷贝到GPU(cpu拷贝到gpu肯定效率不如直接从GPU中取),这样对于顶点数据比较多时,
可以加快效率;

FBO

帧缓冲,也就是通过glGenFramebuffers()函数生成的对象,它主要用于存储opengl es最终的渲染结果。

离屏渲染

当需要对纹理进行多次渲染采样时(也就是对一个纹理进行多个着色器程序去处理),而这些渲染采样中间过程是不需要
展示给用户看的,所以就可以额外创建一个FBO对象来专门做这个事情,这个FPO对象就成为为离屏渲染帧缓冲,这个
过程叫做离屏渲染

渲染缓冲区

通过glGenRenderbuffers()生成的缓冲区,他用于将渲染的结果呈现到屏幕上,需要与FBO绑定

opengl es api和EGL api

opengl es api是用来进行图像渲染操作的,
egl api是由各个操作系统实现的系统api,它主要的作用就是创建窗口,创建opengl 上下文环境等。可以由各自厂商自行定义,使用通用的EGL接口。
如苹果就是EAGL,安卓就可以用EGL来自行管理,也可以用GLSurface系统创建opengl 环境

上一篇下一篇

猜你喜欢

热点阅读