glTexParameter和glTextureParameter兩個系列的函數(都分為i和f,還有iv,fv等)。
void glTexParameteri( GLenum target, GLenum pname, GLint param);
glTexParameter是用來處理Active Texture的。要先用Active Texture來激活它。當然,也可以在Texture剛剛創建之后就設置它的屬性。其中target可以是GL_TEXTURE_2D, GL_TEXTURE_3D, GL_TEXTURE_2D_ARRAY, GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_CUBE_MAP, GL_TEXTURE_CUBE_MAP_ARRAY 之一。
可見它也是隱喻,同一個Vao,只能有一套這類Texture,所以才能用target來標志要操作哪個Texture。
glTextureParameter,則是用來處理用ID表示的Texture。這種方式,無疑更加合理,更加清晰。但是可惜,只有opengl 4.5以后才有。opengl es則沒有。
用glTexParameter,基本也就無法在創建后改變Texture參數了,找起來很麻煩。好在也沒多少這種需求。
然后,帶v的函數,大多是是用來處理一個四元數的。一個是顏色,GL_TEXTURE_BORDER_COLOR, 還有一個GL_TEXTURE_SWIZZLE_RGBA,用來表示顏色的重新排序。
對於border的顏色,glTexparameterIiv版本函數和glTexParameterfv函數,操作的是同一個顏色。f版的顏色,取值范圍是0到1之間,i版就把這個顏色值分布到0和Int的最大值之間。比如,f版設定的顏色是(0.1,0.2,0.3,0,4),I版的顏色值就是int的最大值乘以這四個數。
注意,glTexParameterIv函數(一個i),是特殊的。它是用特殊方式表示的浮點數。轉換公式是f=(2c+1)/(2^b-1)。這個函數就專門用於設置GL_TEXTURE_BORDER_COLOR,實際上也不需要用到它,很麻煩,跟另外兩個函數功能一樣的,屬於畫蛇添足的東西。
