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
);