前言
学习发现网上关于GELS2.0相关的中文API说明非常少,Android的API对GLES的使用说明也非常简单,现总结部分相关API介绍放在这里,以便日后进一步学习
/**
* 通过handle绑定指定的VBO,同一时间只能绑定一个同类型的VBO,只有当前被绑定的VBO才会被用户操作。
* 通过绑定handle为0的VBO,可以取消对所有同类型VBO的绑定。
* int target 指定绑定的VBO类型,具体类型有GL_ARRAY_BUFFER(用于为顶点数组传值)
* 和GL_ELEMENT_ARRAY_BUFFER(用于为索引数组传值)
* int buffer 指定绑定的VBO handle
*/
public static native void glBindBuffer(
int target,
int buffer
);
/**
* 将数据传递给当前绑定的VBO。
* int target 指定VBO类型,同 void glBindBuffer(int target, int buffer)
* int size 指定VBO的大小,单位为byte
* Buffer data 指定需要传递的数据
* int usage 指定VBO的存储方式,例如GL_STATIC_DRAW或GL_DYNAMIC_DRAW
*/
public static native void glBufferData(
int target,
int size,
java.nio.Buffer data,
int usage
);
/**
* 直接使用顶点数组绘制图元。
* @param mode 指定绘图的模式,如GL_TRIANGLES和GL_TRIANGLE_STRIP
* @param first 指定从第几个顶点开始绘制
* @param count 指定绘制几个顶点
*/
public static native void glDrawArrays(
int mode,
int first,
int count
);
/**
* 使用索引数组绘制图元。
* @param mode 指定绘图的模式,如GL_TRIANGLES和GL_TRIANGLE_STRIP
* @param count 指定绘制几个顶点
* @param type 指定索引数组的数据类型,如GL_UNSIGNED_SHORT和GL_UNSIGNED_INT
* @param offset 指定索引数组起始位置的偏移量,单位为byte
*/
public static native void glDrawElements(
int mode,
int count,
int type,
int offset
);
/**
* 向OpenGL ES申请开辟新的VertexBufferObject,并通过buffers数组获取VBO handle,handle的类型为整型。
* int n 申请的VBO个数
* int[] buffers 用于存储VBO handle的数组
* int offset buffers数组的偏移量,即从buffers的第offset个位置开始存储handle
* 注意需要满足 n + offset <= buffers.length
*
*/
public static native void glGenBuffers(
int n,
int[] buffers,
int offset
);
/**
* 获取错误输出信息
* @param shader 需要编译的shader 句柄
* @return 提示信息
*/
public static native String glGetShaderInfoLog(
int shader
);
/**
* glUniform更改一个uniform变量或数组的值。
* 要更改的uniform变量的位置由location指定,location的值应该由glGetUniformLocation函数返回。
* 通过调用glUseProgram,glUniform操作的程序对象将成为当前状态的一部分
* glUniform{1|2|3|4}{f|i}使用传进来的实参,修改通过location指定的uniform变量。
* 所有在程序对象中定义的活动uniform变量,在程序对象链接成功后都会被初始化为0.
* 直到下一次程序对象链接成功再一次被初始化为0前,它们将保留通过调用glUniform赋给它们的值。
* glUniform{1|2|3|4}{f|i}v可以用来更改单个uniform变量的值,或者一个uniform变量数组。
* glUniformMatrix{2|3|4}fv用来更改一个矩阵或一个矩阵数组。
*/
/**
* 为当前程序对象指定Uniform变量的值。
* 译者注:注意,由于OpenGL ES由C语言编写,但是C语言不支持函数的重载,所以会有很多名字相同后缀不同的函数版本存在。
* 其中函数名中包含数字(1、2、3、4)表示接受这个数字个用于更改uniform变量的值,
* i表示32位整形,f表示32位浮点型,ub表示8位无符号byte,ui表示32位无符号整形,v表示接受相应的指针类型。
* @param location 指明要更改的uniform变量的位置
* @param count 指明要更改的元素个数。如果目标uniform变量不是一个数组,那么这个值应该设为1;如果是数组,则应该设置为>=1。
* @param transpose 指明是否要转置矩阵,并将它作为uniform变量的值。必须为GL_FALSE。
* @param value 指定一个具有count个数值的数组指针,用来更新指定的uniform变量。
* @param offset
*/
public static native void glUniformMatrix4fv(
int location,
int count,
boolean transpose,
float[] value,
int offset
);
/**
* 将VBO中的数据传递给顶点数组。
* @param indx 指定Shader属性的顶点数组handle
* @param size 指定该属性的顶点数组大小,单位为数组元素的类型
* @param type 指定该属性的顶点数组元素类型,如GL_FLOAT和GL_UNSIGNED_BYTE
* @param normalized 指定传递给该属性顶点数组的数据是否需要归一化(转化为单位向量)
* @param stride 指定该属性的顶点数据在VBO中的跃度,即每个顶点所占的数据长度,单位为byte
* @param offset 指定该属性在VBO中起始位置的偏移量,单位为byte
*/
public static native void glVertexAttribPointer(
int indx,
int size,
int type,
boolean normalized,
int stride,
int offset
);
// 把着色器程序添加到OpenGL环境中
public static native void glUseProgram(
int program
);
//由glEnableVertexAttribArray启用指定属性,才可在顶点着色器中访问逐顶点的属性数据,
//允许顶点着色器读取GPU(服务器端)数据。
public static native void glEnableVertexAttribArray(
int index
);