GLES2.0初识——API

前言

学习发现网上关于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
    );
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值