OpenGL ES API 收集

glClearColor 

是通过glClear使用红,绿,蓝以及AFA值来清除颜色缓冲区的,并且都被归一化在(0,1)之间的值,其实就是清空当前的所有颜色。

  1. 必须强调 glClearColor只起到Set的作用,并不Clear任何!不要混淆~2. glClearColor 的作用是,指定刷新颜色缓冲区时所用的颜色。所以,完成一个刷新过程是要 glClearColor(COLOR) 与 glClear(GL_COLOR_BUFFER_BIT) 配合使用。glClearColor(0.0, 0.0, 1.0, 1.0);//蓝色

glClear(GL_COLOR_BUFFER_BIT);

  1. 清除颜色缓冲区的作用是,防止缓冲区中原有的颜色信息影响本次绘图(注意!即使认为可以直接覆盖原值,也是有可能会影响的),当绘图区域为整个窗口时,就是通常看到的,颜色缓冲区的清除值就是窗口的背景颜色。所以,这两条清除指令并不是必须的:比如对于静态画面只需要设置一次,比如不需要背景色/背景色为白色。4. glClear 比手动涂抹一个背景画布效率高且省力,所以通常使用这种方式。

例如glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)表示要清除颜色缓冲以及深度缓冲

 

loadGLShader加载着色器

GLES30.glCreateShader(创建一个着色器对象)

glCreateShader创建一个空的着色器对象,并返回一个可以引用的非零值(shader ID)。着色器对象用于维护定义着色器的源代码字符串。shaderType指示要创建的着色器的类型。 支持两种类型的着色器。 GL_VERTEX_SHADER类型的着色器是一个用于在可编程顶点处理器上运行的着色器。 GL_FRAGMENT_SHADER类型的着色器是一个着色器,旨在在可编程片段处理器上运行。

创建时,着色器对象的GL_SHADER_TYPE参数设置为GL_VERTEX_SHADER或GL_FRAGMENT_SHADER,具体取决于shaderType的值。

GLES30.glShaderSource(替换着色器对象中的源代码)

对于支持着色器编译器的实现,glShaderSource将着色器中的源代码设置为string指定的字符串数组中的源代码。先前存储在着色器对象中的任何源代码都将被完全替换。数组中的字符串数由count指定。 如果length为NULL,则认为每个字符串都以null结尾。如果length不是NULL,则它指向包含字符串的每个相应元素的字符串长度的数组。length数组中的每个元素可以包含相应字符串的长度(空字符不计为字符串长度的一部分)或小于0的值以表示该字符串为空终止。此时不扫描或解析源代码字符串; 它们只是复制到指定的着色器对象中。

GLES30.glCompileShader(编译一个着色器对象)

对于支持着色器编译器的实现,glCompileShader编译已存储在shader指定的着色器对象中的源代码字符串。

编译状态将存储为着色器对象的状态的一部分。 如果着色器编译时没有错误并且可以使用,则此值将设置为GL_TRUE,否则将设置为GL_FALSE。 可以通过使用参数shader和GL_COMPILE_STATUS调用glGetShaderiv来查询状态值。

由于OpenGL ES着色语言规范指定的多种原因,着色器的编译可能会失败。 无论编译是否成功,都可以通过调用glGetShaderInfoLog从着色器对象的信息日志中获取有关编译的信息。

GLES30.glGetShaderiv(从着色器对象返回一个参数)

glGetShaderiv以params形式返回特定着色器对象的参数值。 定义了以下参数:

GL_SHADER_TYPE

如果着色器是顶点着色器对象,则params返回GL_VERTEX_SHADER;如果着色器是片段着色器对象,则 返回GL_FRAGMENT_SHADER。

GL_DELETE_STATUS

如果shader当前被标记为删除,则params返回GL_TRUE,否则返回GL_FALSE。

GL_COMPILE_STATUS

对于支持着色器编译器的实现,如果着色器上的最后一次编译操作成功,则params返回GL_TRUE,否则返回GL_FALSE。

GL_INFO_LOG_LENGTH

对于支持着色器编译器的实现,params返回着色器信息日志的字符数,包括空终止字符(即,存储信息日志所需的字符缓冲区的大小)。 如果着色器没有信息日志,则返回值0。

GL_SHADER_SOURCE_LENGTH

对于支持着色器编译器的实现,params返回构成着色器着色器源的源字符串的串联长度,包括空终止字符。 (即,存储着色器源所需的字符缓冲区的大小)。 如果不存在源代码,则返回0。

GLES30.glDeleteShader(删除一个着色器对象)

如果要删除的着色器对象附加到程序对象,它将被标记为删除,但它不会被删除,直到它不再附加到任何程序对象,对于任何渲染上下文(即,它必须与 它被附加之前的任何地方都将被删除)。shader为0将被忽视。

要确定对象是否已标记为删除,请使用参数shader和GL_DELETE_STATUS调用glGetShaderiv。

GLES30.glDeleteShader(删除一个着色器对象)

如果要删除的着色器对象附加到程序对象,它将被标记为删除,但它不会被删除,直到它不再附加到任何程序对象,对于任何渲染上下文(即,它必须与 它被附加之前的任何地方都将被删除)。shader为0将被忽视。

要确定对象是否已标记为删除,请使用参数shader和GL_DELETE_STATUS调用glGetShaderiv。

loadProgram(加载对象)

GLES30.glCreateProgram(创建一个对象)

glCreateProgram创建一个空program并返回一个可以被引用的非零值(program ID)。 program对象是可以附加着色器对象的对象。 这提供了一种机制来指定将链接以创建program的着色器对象。 它还提供了一种检查将用于创建program的着色器的兼容性的方法(例如,检查顶点着色器和片元着色器之间的兼容性)。 当不再需要作为program对象的一部分时,着色器对象就可以被分离了。

通过调用glCompileShader成功编译着色器对象,并且通过调用glAttachShader成功地将着色器对象附加到program 对象,并且通过调用glLinkProgram成功的链接program 对象之后,可以在program 对象中创建一个或多个可执行文件。

当调用glUseProgram时,这些可执行文件成为当前状态的一部分。 可以通过调用glDeleteProgram删除程序对象。 当program 对象不再是任何上下文的当前呈现状态的一部分时,将删除与program 对象关联的内存。

GLES30.glAttachShader(将着色器对象附加到program对象)

要在program对象中链接的shaders必须首先附加到该program对象上。那glAttachShader方法就是用于将指定的shaders附着到指定的program对象上。这就表明shader将被包含在要被执行的program的链接操作中。

GLES30.glLinkProgram(连接一个program对象)

glLinkProgram链接program指定的program对象。附加到program的类型为GL_VERTEX_SHADER的着色器对象用于创建将在可编程顶点处理器上运行的可执行文件。 附加到program的类型为GL_FRAGMENT_SHADER的着色器对象用于创建将在可编程片段处理器上运行的可执行文件

GLES30.glGetProgramiv(从program对象返回一个参数的值)

glGetProgramiv以params形式返回指定的program对象的参数值。 定义了以下参数:

GL_DELETE_STATUS

如果program当前标记为删除,则params返回GL_TRUE,否则返回GL_FALSE。

GL_LINK_STATUS

如果program的最后一个链接操作成功,则params返回GL_TRUE,否则返回GL_FALSE

GL_VALIDATE_STATUS

params返回GL_TRUE,program的最后一次验证操作成功了也返回GL_TRUE,否则返回GL_FALSE。

GL_INFO_LOG_LENGTH

params返回program信息日志中的字符数,包括空终止字符(即,存储信息日志所需的字符缓冲区的大小)。 如果程序没有信息日志,则返回值0

GL_ATTACHED_SHADERS

params返回附加到program的着色器对象的数量。

GL_ACTIVE_ATTRIBUTES

params返回program的激活状态的属性变量数。

GL_ACTIVE_ATTRIBUTE_MAX_LENGTH

params返回program的最长激活状态的属性名称的长度,包括空终止字符(即,存储最长属性名称所需的字符缓冲区的大小)。 如果不存在活动属性,则返回0。

GL_ACTIVE_UNIFORMS

params返回program的激活状态的统一变量的数量。

GL_ACTIVE_UNIFORM_MAX_LENGTH

params返回program的最长激活状态的统一变量名称的长度,包括空终止字符(即,存储最长统一变量名称所需的字符缓冲区的大小)。 如果不存在活动的统一变量,则返回0。

GLES30.glDeleteProgram (删除一个程序对象)

如果程序对象正在被用作当前渲染状态的一部分,则它将被标记为删除,但在它不再是任何渲染上下文的当前状态的一部分之前不会被删除。 如果要删除的程序对象附加了着色器对象,那么这些着色器对象将自动分离但不会被删除,除非它们已被标记为先前调用glDeleteShader而被删除。 程序的值0为0将被忽视。

要确定对象是否已标记为删除,请使用参数program和GL_DELETE_STATUS调用glGetProgramiv。

顶点缓冲区VBO使用

GLES30.glGetUniformLocation(返回统一变量的位置)

glGetUniformLocation返回一个整数,表示程序对象中特定统一变量的位置。 name必须是不包含空格的空终止字符串。 name必须是程序中的活动统一变量名,它不能是结构,也不能是结构数组或向量或矩阵的子组件。 如果name与程序中的活动统一变量不对应,或者name以保留前缀“gl_”开头,则此函数返回-1。

GLES30.glGenBuffers(生成缓冲区对象名称)

glGenBuffers在buffers中返回n个缓冲区对象名称。我们无法保证这些名称形成一组连续的整数; 但是能够保证的是在调用glGenBuffers之前不会立即使用这些返回的名称。

GLES30.glBindBuffer(绑定一个命名的帧缓冲区对象)

glBindFramebuffer允许您创建或使用命名的帧缓冲对象。 调用glBindFramebuffer并将目标设置为GL_FRAMEBUFFER,将framebuffer设置为新的绑定了帧缓冲区对象名称的帧缓冲区对象。 绑定帧缓冲区对象时,先前的绑定会自动中断。

GLES30.glBufferData(创建并初始化缓冲区对象的数据存储)

glBufferData为当前绑定到target的缓冲区对象创建一个新的数据存储。 删除任何预先存在的数据存储。 使用指定的字节和usage创建新数据存储。 如果data不是NULL,则使用来自此指针的数据初始化数据存储。

VAO的使用

GLES30.glGenVertexArrays(生成VAO)

GLES30.glBindVertexArray(绑定VAO)

GLES30.glEnableVertexAttribArray(启用顶点位置、法向量、纹理坐标数据)

GLES30.glVertexAttribPointer(将顶点位置数据送入渲染管线)

绘制Program

GLES30.glUseProgram(指定使用某套着色器程序)

GLES30.glUniformMatrix4fv(将最终变换矩阵传入渲染管线)

GLES30.glDrawElements(绘制加载的物体)

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值