• Android OpenGL ES API


    OpenGL ES API

    Shader GLSL

    uniform

    • 外部application程序通过函数glUniform**()函数传入。在shader中类似const。

    • 同名shader可以在vertex和fragment共享使用。

    • uniform变量一般用来表示:变换矩阵,材质,光照参数和颜色等信息。

    attribute

    • 只能在vertex shader中使用
    • attribute变量来表示一些顶点的数据,如:顶点坐标,法线,纹理坐标,顶点颜色等

    varying

    • vertex和fragment shader之间做数据传递,vertex shader修改varying值,fragment shader使用该值
    • varying变量在vertex和fragment shader二者之间的声明必须一致
    • 应用程序不能使用该变量

    GLES20

    glCreateShader

    /**
    * 创建一种类型的着色器对象
    * type = GL_VERTEX_SHADER(顶点着色器), GL_FRAGMENT_SHADER(片段着色器)
    * return shaderObjectId,如果创建失败,则返回0
    **/
    public static native int glCreateShader(int type);
    

    glShaderSource

    /**
    * 上传源码到shader对象中
    * shader = shaderObjectId
    * string = 着色器源码
    **/
    public static native void glShaderSource(int shader,String string);
    

    glCompileShader

    /**
    * 编译着色器对象
    **/
    public static native void glCompileShader(int shader);
    

    glGetShaderiv

    /**
    * 从一个 shader 对象中返回一个 指定 pname 的 params 参数。
    * shader = shaderObjectId
    * pname = GL_SHADER_TYPE,GL_DELETE_STATUS,GL_COMPILE_STATUS,GL_INFO_LOG_LENGTH等,表示参数名
    * params = 结果数组,一般存在params[0]
    * offset = 填写结果数组的偏移量
    **/
    public static native void glGetShaderiv(
            int shader,
            int pname,
            int[] params,
            int offset
        );
    

    glDeleteShader

    /**
    * 删除一个shader
    **/
    public static native void glDeleteShader(int shader);
    

    glGetShaderInfoLog

    /**
    * 返回指定 shader 对象的日志信息。一个shader 对象的日志信息会在 shader 编译是修改。
    **/
    public static native String glGetShaderInfoLog(int shader);
    

    glCreateProgram

    /**
    * 创建着色器程序对象,返回programId,创建失败返回0
    **/
    public static native int glCreateProgram();
    

    glAttachShader

    /**
    * 附加一个 shader 对象到程序对象
    **/
    public static native void glAttachShader(int program,int shader);
    

    glLinkProgram

    /***  链接一个着色器程序对象**/public static native void glLinkProgram(int program);
    

    glGetProgramiv

    类似glGetShaderiv

    glGetProgramInfoLog

    类似glGetShaderInfoLog

    glDeleteProgram

    类似glDeleteShader

    glValidateProgram

    /*** 
    检查着色器可执行程序能够在当前OpenGL状态下执行,检查是否通过的结果需要
    glGetProgram来获得。检查出错信息会存放在日志信息中,
    该信息需要通过glGetProgramInfoLog来获得,这些信息会提示程序为什么不高效、不优化、不能执行等
    **/
    public static native void glValidateProgram(int program);
    

    glClearColor

    /*** 设置清屏颜色**/
    public static native void glClearColor(        
    	float red,        
    	float green,        
    	float blue,        
    	float alpha   
    );
    

    glClear

    /**
    * 用当前缓冲区清除值,清除指定缓冲区
    * mask = GL_COLOR_BUFFER_BIT(当前可写颜色缓冲)|GL_DEPTH_BUFFER_BIT|GL_ACCUM_BUFFER_BIT|GL_STENCIL_BUFFER_BIT
    **/
    public static native void glClear(int mask);
    

    glViewport

    /**
    * 设置视口尺寸,通知OpenGL用于渲染的surface大小
    **/
    public static native void glViewport(        int x,        int y,        int width,        int height    );
    

    glUseProgram

    /*** 安装指定的 program 程序对象来作为当前渲染状态的一部分* 使用 glAttachShader 来给创建的程序对象附加一个或多个 shader 对象* 使用 glCompileShader 来编译 shader* 使用 glLinkProgram 来链接程序对象**/
    public static native void glUseProgram(int program);
    

    glGetAttribLocation

    /**
    *	获取顶点属性变量(位置、纹理、颜色、法线)在着色器程序中的位置索引,通过该序号可以设置顶点属性变量的值,如果没有该变量则返回-1
    **/
    public static native int glGetAttribLocation(int program,String name);
    

    glGetUniformLocation

    /**
    *	获取一致变量在着色器程序中的位置序号,通过该序号可以设置一致变量的值,如果没有该变量则返回-1
    **/
    public static native int glGetUniformLocation(    int program,    String name);
    

    glVertexAttribPointer

    /**
    * 指定了渲染时着色器索引值为 index 的顶点属性数组(颜色、纹理、法线坐标)的数据格式和位置,用于从内存向显存上传数据
    * indx = 属性位置,即通知OpenGL读取数据到哪里
    * size = 每个顶点属性的组件数量
    * normalized = 暂时为false
    * stride = 指定连续顶点属性之间的偏移量(或间隔,字节数,步长)
    * ptr = 存储数据缓冲区
    **/ 
    public static void glVertexAttribPointer(    
    	int indx,    int size,    int type,    boolean normalized,    int stride,    java.nio.Buffer ptr
    );
    

    glUniform4f

    /**
    * 设置着色器程序中的uniform变量的值
    * location = uniform变量在着色器程序中的位置
    **/
    public static native void glUniform4f(       
    	int location,        float x,        float y,        float z,        float w    
    );
    

    glUniformMatrix4fv

    public static native void glUniformMatrix4fv(    
    	int location, // uniform的位置   
    	int count, // 需要加载数据的数组元素的数量或者需要修改的矩阵的数量, 1表示一个矩阵    
    	boolean transpose, // 指明矩阵是列优先(column major)矩阵(GL_FALSE)还是行优先(row major)矩阵(GL_TRUE)    
    	float[] value, // 指向由count个元素的数组的指针    int offset
    );
    

    glEnableVertexAttribArray

    public static native void glEnableVertexAttribArray(        int index // 顶点属性位置值    );
    

    glDrawArrays

    // 渲染图元
    public static native void glDrawArrays(       
    	int mode, // 渲染的图元模式,有:GL_POINTS,GL_LINES,GL_TRIANGLE_FAN,GL_TRIANGLES        
    	int first, // 顶点数组起始位置        
    	int count // 图元数量    
    );
    

    Matrix

    setIdentityM

    // 设置单位矩阵
    public static void setIdentityM(float[] sm, int smOffset) 
    

    translateM

    // 平移矩阵
    public static void translateM(float[] m, int mOffset,float x, float y, float z)
    

    rotateM

    // 旋转矩阵,绕(x,y,z)轴旋转a角度
    public static void rotateM(float[] m, int mOffset,float a, float x, float y, float z)
    

    multiplyMM

    // 矩阵乘法,
    result = lhs * rhspublic static native void multiplyMM(
    	float[] result, int resultOffset,        float[] lhs, int lhsOffset, float[] rhs, int rhsOffset
    );
    

    orthoM

    // 正交矩阵,将[left, right],[bottom, top], [near, far]正交投影到OpenGL坐标上
    public static void orthoM(
    	float[] m, int mOffset,    float left, float right, float bottom, float top,    float near, float far
    );
    

    Texture

    glGenTextures

    // 创建
    texturepublic static native void glGenTextures(    
    	int n,	// 创建纹理个数     
    	int[] textures, // 保存纹理的id    
    	int offset // 偏移量
    );
    

    glDeleteTextures

    // 删除
    texturepublic static native void glDeleteTextures(    int n,    int[] textures,    int offset);
    

    glActiveTexture

    // 显卡中有N个纹理单元(具体数目依赖你的显卡能力)
    // 每个纹理单元(GL_TEXTURE0、GL_TEXTURE1等)都有GL_TEXTURE_1D、GL_TEXTURE_2D等
    // glActiveTexture 并不是激活纹理单元,而是选择当前活跃的纹理单元(默认为0)
    public static native void glActiveTexture(int texture);
    

    glBindTexture

    // 把纹理textureId绑定到纹理单元(当前活跃),
    public static native void glBindTexture(
        int target, // 指定活动纹理单元的目标纹理,如GL_TEXTURE_2D
        int texture // 纹理id,0表示接触当前的纹理绑定
    );
    

    texImage2D

    // 读入bitmap位图数据,复制到当前绑定的纹理对象
    public static void texImage2D(
      	int target, // 指定活动纹理单元的目标纹理
      	int level,  // 级别0是基本图像级别。级别n是第n个缩略图缩小图像
      	Bitmap bitmap,
            int border // 指定边框的宽度。必须为0
    )
    

    glTexParameteri

    public static native void glTexParameteri(
        int target, // 指定活动纹理单元的目标纹理
        int pname,	// 参数名,GL_TEXTURE_MIN_FILTER(纹理缩小情况)|GL_TEXTURE_MAG_FILTER(纹理放大情况)
        int param   // 参数值
    );
    

    glGenerateMipmap

    关于mipmap:https://www.cnblogs.com/cack/p/4972806.html

    //为与target相关联的纹理图像生成一组完整的mipmap
    public static native void glGenerateMipmap(
        int target
    );
    
  • 相关阅读:
    ODOO开发-Pycharm开启debug模式
    pycharm开启debug模式报错汇总
    星辉Odoo模型开发教程4-常用字段属性
    星辉Odoo模型开发教程3-创建字段
    Business Object 开发
    Ubuntu安装masscan的两种方式
    HFish 蜜罐搭建测试
    【转】如何超过大多数人
    【译】13款入侵检测系统介绍
    【译】修复Ubuntu软件安装的锁文件问题
  • 原文地址:https://www.cnblogs.com/zsben991126/p/14897411.html
Copyright © 2020-2023  润新知