返回

学习OpenGL ES的第三章:编译着色器

Android

Android OpenGl Es 学习(三):编译着色器

前言

走进学习OpenGlEs系列的第三章,在这个学习阶段,我们即将开始学习着色器的基本知识,首先从编译着色器开始吧。

何为着色器

在学习编译着色器之前,我们首先要了解着色器的基础知识,着色器是一段可以在GPU上运行的程序,它可以控制如何渲染图形,一般来说着色器会被存储在一个单独的文件中,这种文件通常以.glsl为后缀名,每个着色器文件包含两部分,分别是顶点着色器和片元着色器,接下来让我们依次看看它们分别是什么。

顶点着色器

顶点着色器是着色器的一种,顶点着色器在顶点数据进入光栅化器进行光栅化之前调用,其主要作用是将每一个顶点的属性从一个坐标系变换到另一个坐标系中,通常,顶点着色器负责对顶点进行变换,包括平移、旋转、缩放等,此外,它还可以用于计算顶点的颜色、纹理坐标等属性。

片元着色器

片元着色器是着色器中的另一种,片元着色器在光栅化器进行光栅化后调用,此时我们得到的是一个一个的片元,即像素,片元着色器决定了最终像素的颜色,片元着色器的主要作用是计算像素的颜色、透明度等属性,还可以通过计算不同的光照模型来实现不同的光照效果。

编译着色器

了解了着色器是什么,我们现在可以看看如何编译着色器,在OpenGL ES中,有两种方法可以编译着色器:一种是使用OpenGL ES API,另一种是使用预处理器,在使用OpenGL ES API编译着色器时,可以使用glShaderSource函数将着色器代码字符串加载到一个着色器对象中,然后使用glCompileShader函数编译该着色器对象,在使用预处理器编译着色器时,可以使用#include指令将着色器代码文件加载到一个预处理器中,然后使用-E标志调用编译器编译预处理器,例如:

gcc -E shader.glsl -o shader.frag

注意事项

在编译着色器时,有几件注意事项:

  • 着色器代码必须是有效的OpenGL ES着色器代码
  • 着色器代码必须以.glsl为后缀名
  • 着色器代码必须使用UTF-8编码
  • 着色器代码不得包含任何预处理器指令,如#include#define

结语

至此我们已经完成了编译着色器的介绍,编译着色器是学习OpenGL ES着色器的第一步,本节内容是基础,它是未来着色器学习的基础,后面的学习我们会围绕着色器继续进行。