shader 概述和EGL

着色器:在gpu上运行的一组指令
(GPU即图形处理器,是一个对CPU的补充,它的目的就是尽可能的加速图形处理速度,光栅化,主要负责跟显示相关的数据处理)

顶点数据打包给顶点着色器,顶点输出
(平面旗子的顶点位置,通过sin处理,输出为飘扬的旗子顶点位置)
顶点输出给 光栅化器 (光珊化会根据这些关键点生成很多点用来组成图形的形状) 找到顶点几何区域中的像素, 划分片段 内插顶点着色器的数据 给 像素着色器
根据顶点数据 (计算区域内各像素着色器 数据)
(顶点法线与面法线的区别:若第一个顶点光照强度是10,第二个顶点光照强度是1,那么这两个顶点正中间的光照强度是(10-1)*0.5 = 4.5,由此可见顶点光照强度在整个面上是均匀过度的。面法线整个面的光照强度一样)

渲染管道:顶点数据→顶点着色器 →光栅化 几何着色器(划分区域,计算)→像素/片段着色器(进行最终的颜色计算,输出像素颜色alpha)→绘制像素

读取顶点数据→执行顶点着色器→组装图元→光栅化图元→执行片段着色器→写入帧缓冲区→显示在屏幕上。

计算着色器在渲染管道之外,用来运行gpu并行处理功能,处理通过任务

在这里插入图片描述
shader中尽量不用if,因为GPU会两种判断都计算

在这里插入图片描述
blend原像素颜色与着色器输出颜色混合模式

在这里插入图片描述

8bit为一个字节,所以假如图像时单通道的黑白图像,那么每一个像素包含一个字节的信息。假如图像是R、G、B三通道的彩色图像,那么每一个像素包含3个字节的信息。

在这里插入图片描述

EGLint eglGetError(void)

用于返回当前thread如果EGL的API出错的话,最近一个错误所对应的错误代码(错误代码写入寄存器中,通过该函数读取)
输入:空
输出:错误代码 (1种成功,15种错误情况)

EGLDisplay eglGetDisplay(EGLNativeDisplayType display_id);

从EGL运行的操作系统中获取一个Display
输入:从操作系统中得知的Display的ID
输出:用于显示图片绘制的Display

EGLBoolean eglInitialize(EGLDisplay dpy, EGLint * major, EGLint *minot);

针对某display初始化一个某版本的EGL
输入:使用Display的handle特指某个Display,major和minor共同指定EGL的版本(若为空,则不初始化)
输出:EGL初始化成功或失败

EGLBoolean eglGetConfigs(EGLDisplay dpy, EGLConfig *configs, EGLint config_size, EGLint *num_config);

获取Display支持的配置信息
输入:DIsplay的handle,一个用于保存配置信息的指针,指针中存放的配置信息的数量,某display支持的配置信息数量(第四个参数若未传入变量地址,而是null,直接返回false),2,4为输出参数(通过函数获取的信息传与输入的参数)
输出:配置信息获取成功或者失败

EGLBoolean eglChooseConfig(EGLDisplay dpy, const EGLint *attrib_list, EGLConfig *configs, EGLint config_size, EGLint *num_config);

获取与需求匹配,且某display支持的配置信息
输入:Display的handle,一个指向所匹配的需求信息的指针,一个指向保存匹配需求的配置信息的指针,指针中存放的配置信息的数量,display匹配需求的配置信息的数量,3,5为输出参数
输出:匹配的配置信息获取成功或者失败

EGLSurface eglCreateWindowSurface(EGLDisplay dpy, EGLConfig config, EGLNativeWindowType win, const EGLint *attrib_list);

创建一个可以显示在屏幕上的rendering surface
输入:DIsplay的handle,用于创建surface的配置信息(通常传入eglChooseConfig获取的配置信息,已默认排好序,使用第一个),窗口信息的handle,额外的需求信息(EGLRender Buffersr的属性, 可null按默认处理)
输出:创建的rendering surface的handle

EGLBoolean EGLBindAPI(EGLenum api);

设置当前thread的绘制API(当前的API要用来创建context,context要与surface唯一对应匹配使用)
输入:支持的绘制API(OpenGL是pc端,OpenGL Es是移动端)
输出:API设置成功或者失败

EGLContext eglCreateContext(EGLDisplay dpy, EGLConfig config, EGLContext share_context, const EGLint *attrib_list);

针对当前的绘制API创建一个rendering context(context中保存OpenGL ES状态机信息, 若一对surface与context兼容,context可使用保存的信息往rendering surface上进行绘制)
输入:DIsplay的handle,用于创建context的配置信息(一般般传入eglChooseConfig得到的信息),指定一个context使得创建的context与其share(通过该参数多个context之间都可以进行共享),额外的需求信息
输出:创建的rendering context的handle

一个native windows handle只能创建一个 rendering surface,而display与EGL对应可创建多个rendering surface,context与native windows无关,则display可创建多个context,每个context对应一种绘制api,只要surface与context的格式匹配,两则可进行关联,同一时间,一个surface只能与一个context关联,一种绘制api也只能有一个context

EGLBoolean eglMakeCurrent(EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext ctx);

将指定的context绑定到当前thread以及读和写surface上
输入:Display的handle,用于写入的surface,用于读取的surface,(第二个和第三个一般会设置成一个参数)指定的context
(如果当前thread已经有相同绘制api的context,则会先将之前的context进行flash操作,把未执行的命令全部执行完毕,然后设置disabled状态,再把新传入的context设置成enabled)
输出:成功或失败
(如果想要释放当前context,即设为disabled,则第二第三参数传入EGLNoSurface,第四个设置成EGLNoContext,只有这种情况第一个参数可传入未初始化的display)

EGLBoolean eglSwapBuffers(EGLDisplay dpy, EGLSurface surface);

将surface中的color buffer显示到屏幕上
输入:Display的handle,将会被展示的surface
输出:显示成功或失败

EGLBoolean eglTeminate(EGLDisplay dpy);

将某display对应的EGL相关的资源释放(例如与display关联的surface,context等,若surface,context在释放时仍被使用,不会导致程序瘫痪,但会使绘制命令出错,绘制结果不确定)
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值