Android OpenGL ES API
阿新 • • 發佈:2021-06-17
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
);