1. 程式人生 > 其它 >Android OpenGL ES API

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