在使用OpenGL ES渲染視頻流時,需要將圖像以紋理的方式送入渲染,這個過程需要設置紋理的相關參數,包括紋理的拉伸方式和紋理的過濾方式。OpenGL ES設置紋理參數的函數是 glTexParameterx( x 可以是 i 或 f 等),函數原型是
void glTexParameteri(int target, int pname, int param);
void glTexParameterf(int target, int pname, float param);
target: 目標紋理
GL_TEXTURE_1D
GL_TEXTURE_2D
GL_TEXTURE_3D
GL_TEXTURE_EXTERNAL_OES(Android特有的OES紋理, 預覽相機或者視頻使用)
pname: 紋理參數
GL_TEXTURE_MIN_FILTER // 紋理大於渲染屏幕, 將會有一部分像素無法映射到屏幕上, 紋理要縮小
GL_TEXTURE_MAG_FILTER // 紋理小於渲染屏幕, 沒有足夠的像素映射到屏幕上, 紋理要放大
GL_TEXTURE_WRAP_S // 相當於紋理的x軸, 設置紋理x軸的延伸方式
GL_TEXTURE_WRAP_T // 相當於紋理的y軸, 設置紋理y軸的延伸方式
param: 紋理參數值
GL_NEAREST // 臨近插值
GL_LINAER // 線性插值
GL_CLAMP_TO_EDGE // 邊界像素延伸
GL_REPEAT // 重複
GL_MIRRORED_REPEAT // 鏡像重複
一些常用的設置方式
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);