OpenGL ES 2.0 shader开发

Posted Msnow

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenGL ES 2.0 shader开发相关的知识,希望对你有一定的参考价值。

1.创建一个shader容器

GLES20.glCreateShader(shaderType);

函数原型为:

int glCreateShader (int type)

方法参数:

GLES20.GL_VERTEX_SHADER (顶点shader)

GLES20.GL_FRAGMENT_SHADER (片元shader)

返回值:

函数将返回一个整形的正整数作为shader容器的id。

2.加载shader的源代码

 GLES20.glShaderSource(shader, source);

要在创建好的shader容器中添加shader的源代码。源代码应该以字符串数组的形式表示。当然,也可以只用一个字符串来包含所有的源代码。

函数的原型:

void glShaderSource (int shader, String string)

方法参数:

shader是代表shader容器的id(由glCreateShader返回的整形数);

strings是包含源程序的字符串数组;

3.编译shader

GLES20.glCompileShader(shader);

使用glCompileShader函数来对shader容器中的源代码进行编译。

函数的原型如下:

void glCompileShader (int shader)

参数含义:

shader是代表shader容器的id

4.调试

4.1 编译阶段使用glGetShaderiv获取编译情况

函数原型:
void glGetShaderiv (int shader, int pname, int[] params, int offset)
参数含义:
shader是一个shader的id;
pname使用GL_COMPILE_STATUS;
params是返回值,如果一切正常返回GL_TRUE代,否则返回GL_FALSE。

4.2编译阶段使用glGetShaderInfoLog获取编译错误

函数原型:
String glGetShaderInfoLog (int shader)
参数含义:
shader是一个顶点shader或者片元shader的id。

4.3 在连接阶段使用glGetProgramiv获取连接情况

函数原型:
void glGetProgramiv (int program, int pname, int[] params, int offset)
参数含义:
program是一个着色器程序的id;
pname是GL_LINK_STATUS;
param是返回值,如果一切正常返回GL_TRUE代,否则返回GL_FALSE。

4.4 在连接阶段使用glGetProgramInfoLog获取连接错误

函数原型:
String glGetProgramInfoLog (int program)
参数含义:
program是一个着色器程序的id。

5.清理shader

当不再需要某个shader或某个程序的时候,需要对其进行清理,以释放资源。

函数原型:

void glDeleteShader (int shader)

参数含义:

shader是要被排除的顶点shader或者片元shader的id

6.创建程序对象

int program = GLES20.glCreateProgram();
函数原型:
int glCreateProgram ()
如果函数调用成功将返回一个正整数作为该着色器程序的id。

7.Shader连接程序对象

//向程序中加入顶点着色器
GLES20.glAttachShader(program, vertexShader);//向程序中加入片元着色器
GLES20.glAttachShader(program, pixelShader);       
函数原型:
void glAttachShader (int program, int shader)
参数含义:
program是着色器程序容器的id;
shader是要添加的顶点或者片元shader容器的id。

8.链接程序

函数原型:
void glLinkProgram (int program)
参数含义:
program是着色器程序容器的id。

9.使用链接好的程序

  如果将program设置为0,表示使用固定功能管线。

函数原型:
void glUseProgram (int program)
参数含义:
program是要使用的着色器程序的id。

参考:

http://www.tuicool.com/articles/VZVJra

http://fengmm521.blog.163.com/blog/static/2509135820133254936364/

以上是关于OpenGL ES 2.0 shader开发的主要内容,如果未能解决你的问题,请参考以下文章

OPENGL ES 2.0 知识串讲 ——GLSL 语法(IV)

如何在Android上使用OpenGL ES 2.0绘制点

OPENGL ES 2.0 知识串讲 ——OPENGL ES 详解I(绑定 SHADER)

OPENGL ES 2.0 知识串讲 ——OPENGL ES 详解II(传入绘制信息)

OPENGL ES 2.0 知识串讲 ——OPENGL ES 详解II(传入绘制信息)

OPENGL ES 2.0 知识串讲 ——GLSL 语法(IV)