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

posted on 2021-06-17 21:43  zsben  阅读(177)  评论(0编辑  收藏  举报

导航