1.void glGenTextures(GLsizei n,GLuint* textures) 在數組textures中返回n個用于紋理對象的當前沒有使用的名稱。Textures中返回的名稱不一定是整數的連續集合。 標記textures中的名稱為被使用,它們只有在第一次綁定的時候,才能獲取到紋理狀態和維數(例如1D,2D或者3D). 0是保留的紋理名,從來不會被glGenTextures()返回。
2.void glBindTexture(GLenum target,GLuint texture) glBindTexture()做三件事。第一,當第一次使用無符號整數值texture而不是0時,創建一個新的紋理對象并賦給那個名稱。第二,當綁定先前創建的紋理對象時,將激活這個紋理對象。第三,當綁定texture值為0時,OpenGL將刪除與激活的紋理單元特定目標關聯的所有的綁定,不留下任何綁定。 當紋理對象初始被綁定的時候,假設目標(target)的維數必須是以下之一:GL_TEXTURE_1D,GL_TEXTURE_2D,GL_TEXTURE_3D,GL_TEXTURE_1D_ARRAY,GL_TEXTURE_2D_ARRAY,GL_TEXTURE_RECTANGLE,GL_TEXTURE_BUFFER,GL_TEXTURE_CUBE_MAP,GL_TEXTURE_CUBE_MAP_ARRAY,GL_TEXTURE_2D_MULTISAMPLE和GL_TEXTURE_2D_MULTISAMPLE_ARRAY. 初始綁定后,紋理對象的狀態重置為特定目標的默認狀態。在初始狀態中,紋理和采樣器屬性,例如邊界截取(wrapping)模式和最小或最大濾波將設置為默認值,這些可以在OpenGL規范的狀態表中找到。 如果texture或者glGenTextures()先前創建的名稱不是零,那么將生成GL_INVALID_OperaTION錯誤。如果texture是已經存在的紋理對象的名稱(例如它已經被綁定到任意目標),并且如果texture的維數與target的維數不匹配,那么將生成GL_INVALID_OPERATION錯誤。
3.void glActiveTexture(GLenum texture) 選擇當前被紋理函數改變的紋理單元。texture是形式為GL_TEXTUREi的符號常量,其中i在0到k-1范圍內,其中k是紋理單元的最大數目。GL_TEXTUREi的值等于GL_TEXTURE0+i.
4.GLboolean gllsTexture(GLuint texture) 如果texture是已經被綁定的紋理的名稱并且還沒有被刪除,將返回GL_TRUE,如果texture是零或者是一個已經不存在的紋理的名稱的非零值,將返回GL_FALSE.
5.void glDeleteTextures(GLsizei n,const GLuint* textures); 刪除n個使用數組textures的元素來命名的紋理對象,被釋放的紋理名可以重新使用(例如,被glGenTextures()釋放) 如果刪除當前綁定的紋理, 那么綁定變為默認紋理,即使glBindTexture()使用texture的值為零時被調用。在刪除不存在的紋理名稱或者紋理的名稱為零時,這些嘗試將被忽略而不生成錯誤。
6.void glTexStorage1D(GLenum target,GLsizei levels,GLenum internalFormat,GLsizei width) void glTexStorage2D(GLenum target,GLsizei levels,GLenum internalFormat,GLsizei width,GLsizei height); void glTexStorage3D(GLenum target,GLsizei levels,GLenum internalFromat,GLsizei width,GLsizei height,GLsizei depth) 為當前綁定到target的紋理對象設置(immutable)紋理存儲。用glTexStorage1D()為1維紋理設置存儲,對于這個函數,target必須是GL_TEXTURE_1D.用glTexStorage2D()來設置存儲,如果target必須是GL_TEXTURE_1D_ARRAY,則為1維紋理數組設置存儲,如果target是GL_TEXTURE_2D,則為2維紋理設置存儲。對于1維紋理數組,width設置紋理的范圍,而height設置數組中切片的數目。對于2維紋理,width和height設置紋理大小。用glTexStorage3D()來設置存儲存儲,如果target是GL_TEXTURE_2D_ARRAY,則為2維數組紋理設置存儲,如果target是GL_TEXTURE_3D,則為3維紋理設置存儲。對于2維數組紋理,width和height為每個切片設置大小,depth設置數組中切片的數目。對于3維紋理,width,height和depth為紋素數組設置大小。
7.void glTexStorage2DMultisample(GLenum target,GLsizei samples,GLenum internalFormat,GLsizei width,GLsizei height,GLboolean fixedsamplelocations) void glTexStorage3DMultisample(GLenum target,GLsizei samples,GLenum internalFormat,GLsizei width,GLsizei height,GLsizei depth,GLboolean fixedsample locations); 為當前綁定到target的多重采樣紋理對象設置紋理存儲。對于glTexStorage2DMultisample(),target必須是GL_TEXTURE_2D_MULTISAMPLE,它被用來設置2維多重采樣紋理的存儲。Width和height設置紋理的大小。 用glTexStorage3D()來為2維多重采樣數組紋理設置存儲。target必須是GL_TEXTURE_2D_MULTISAMPLE_ARRAY.對于2維多重采樣數組紋理,width和height設置每個切片的大小,depth設置數組中切片的數目。在這兩個函數中,samples設置紋理采樣的數目。如果fixedsamplelocations是GL_TRUE,那么OpenGL為紋理中每個紋素的相同樣本使用相同的子紋素位置。如果是GL_FALSE,那么OpenGL為每個紋素給定的樣本選擇空間變化的位置。
8.void glTexImage1D(GLenum target,Glint level,Glint internalFormat,GLsizei width,GLsizei border,GLenum format,GLenum type,const void* data) void glTexImage2D(GLenum target,Glint level,Glint internalFormat,GLsizei width,GLsizei height,Glint border,GLenum format,GLenum type,const void* data); void glTexImage3D(GLenum target,Glint level,Glint internalFormat,GLsizei width,GLsizei height,GLsizei depth,Glint border,GLenum format,GLenum type,const void* data); 函數glTexImage1D()、glTexImage2D()和glTexImage3D()用來設置可變的存儲,也可以分別為1D、2D或者3D紋理的一個mipmap級選擇性的提供初始圖像數據。另外,glTexImage2D()和glTexImage3D()也可以用來為1D或者2D數組紋理的一個mipmap級設置存儲的圖像數據。 參數width、height和depth(如果提供)設置紋素中紋素數組的寬度、高度和深度。對于數組紋理,height設置ID數組紋理中切片的數目,depth設置2D數組紋理中切片的數目。 internalFormat設置OpenGL用來存儲紋理中紋素使用的格式。Data設置內存中初始紋素數據的位置。如果將一個緩沖綁定到GL_PIXEL_UNPACK_BUFFER綁定點,則從這個緩沖對象讀出紋素數據,data被解釋為從緩沖對象讀取數據的偏移。如果沒有緩存綁定到GL_PIXEL_UNPACK_BUFFER,那么data被解釋為應用程序內存中的數據指針,如果它為空指針,這種情況下紋理的初始內容是未定義的。初始紋素數據的格式用format和type的組合來指定。OpenGL將把設置的數據從這個格式轉換為internalFormat設置的內部格式。
9.void glTexImage3DMultisample(GLenum target,GLenum samples,Glint internalFormat,GLsizei width,GLsizei height,GLsizei depth,GLboolean fixedsamplelocations); void glTexImage2DMultisample(GLenum target,GLenum samples,Glint internalFormat,GLsizei width,GLsizei height,GLboolean fixedsamplelocations) 函數glTexImage2DMultisample()和glTexImage3DMultisample()分別為2維和2維數組多重采樣紋理設置存儲。對于glTexImage2DMultisample(),target必須是GL_TEXTURE_2D_MULTISAMPLE.對于glTexImage3DMultisample(),target必須是GL_TEXTURE_2D_MULTISAMPLE_ARRAY.與非多重采樣紋理不同的是,不需要為多重采樣紋理設置初始數據,并且多重采樣紋理沒有mipmap.width和height設置紋理的寬度和高度。對于glTexImage3DMultisample()設置的2維數組紋理,depth設置數組中切片的數目。 如果fixedsamlelocations是GL_TURE,那么每個紋素中的樣本位置對于給定的樣本數量通常是相同的,不隨紋素數組的位置而變化。如果fixedsamlelocaions是GL_FALSE,那么OpenGL對于紋素中樣本基于數組中的位置或者一些其他的準則將使用一組不同的位置。
10.void glTexSubImage1D(GLenum target,Glint level,Glint xoffset,GLsizei width,GLenum format,GLenum type,const void* data) void glTexSubImage2D(GLenum target,Glint level,Glint xoffset,Glint yoffset,GLsizei width,GLsizei height,GLenum format,GLenum type,const void* data); void glTexSubImage3D(GLenum target,Glint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLenum type,const void* data) 用data中設置的新數據替換紋理的一個區域。參數level,format和type與glTexImage1D()到glTexImage3D()中的參數有相同的含義。Level是mipmap級數。Format和type描述指針data指向的紋理圖像數據的格式和類型。 data包含子圖像的紋理數據。width、height和depth(如果有)是將要替換當前紋理圖像的全部或者部分區域的大小。xcoffset,yoffset和zoffset分別表示x,y,z方向上的紋素偏移。target表示紋理對象已經綁定的紋理目標。如果target表示一維數組紋理,那么target是2維數組紋理、cubemap映射或者cubemap映射數組紋理,那么zoffset和depth分別表示將要更新的第一層和層數,否則他們被看做紋素坐標。 設置的區域可能不包括在原來定義的紋理數組的范圍之外的任意紋素。
11.void glCopyTexImage1D(GLenum target,GLint level,GLint internalFormat,Glint x,Glint y,GLsizei width,GLint border) void glCopyTexImage2D(GLenum target,GLint level,GLint internalFormat,GLint x,GLint y,GLsizei width,GLsizei height,GLint border) 從當前幀緩存中拷貝綁定到激活的紋理單元target的紋理的紋素。x和y設置從幀緩存中拷貝源區域的水平和垂直偏移。width和height(如果有)分別設置為區域的高度和寬度。internalFormat設置結果紋素存儲使用的格式。border是保留值,必須是零。
12.void glCopyTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLint x,GLint y,GLsizei width) void glCopyTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint x,GLint y,GLsizei width,GLsizei height) void glCopyTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLint x,GLint y,GLint y,GLsizei width,GLsizei height) 使用來自幀緩存的圖像數據替換全部或者部分當前存在的,在綁定到激活紋理單元的target紋理對象的紋理圖像連續的子區域。x和y設置幀緩存中要拷貝的區域的x,y偏移。width和height(如果有)分別要設置拷貝的區域高度和寬度。xoffset,yoffset和zoffset(如果有)設置目標紋理中目標區域的原點。如果target是1維數組紋理,那么yoffset是紋素的1維區域將寫入紋理的層數,否則它是目標區域原點的y坐標。如果目標是2維數組、立方體貼圖或者立方體貼圖數組紋理,那么zoffset是包括目標區域的紋理層數的索引,否則是3維紋理中目標區域的z坐標。
13.void vglLoadImage(const char* filename,vglImageData* image) void vglUnloadImage(vglImageData* image) vglLoadImage()從磁盤的一個文件里載入一個圖像。Filename設置要加載的文件的名字。Image是vglImageData結構的地址。如果成功,將用圖像的參數來填充。如果失敗,將清除圖像。vglInloadImage()應該用來釋放前面成功調用vglLoadImage()占用的所有資源。 struct vglImageMipData { GLsizei width; //mipmap級的寬度 GLsizei height; //mipmap級的高度 GLsizei depth; //mipmap級的深度 GLsizeiptr mipStride; //內存中mipmap級之間的距離 GLvoid* data; //數據的指針 }; struct vglImageData { GLenum target; //紋理目標(2D、立方體映射等) GLenum internalFormat; //推薦的內部格式 GLenum format; //內存中的格式 GLenum type; //內存中的類型 GLenum swizzle[4]; //RGB的swizzle特性 GLsizei mipLevels; //mipmap級的數目 GLsizei slices; //切片的數目 GLsizeiptr sliceStride; //數組紋理中切片之間的距離 GLSizeiptr totalDataSize; //為紋理分配的所有數據 vglImageMipData mip[MAX_TEXTURE_MIPS]; //實際的mipmap數據 }
14.GLuint vglLoadTexture(const char* filename,GLuint texture,vglImageData* image) 從磁盤載入紋理并且放進OpenGL紋理對象。Filename是要加載的文件名字。Texture是加載數據的紋理對象名稱。如果texture是零,那么vglLoadTexture()將創建一個新的紋理對象來放置數據。Image是用來返回圖像的信息,圖像數據不會被釋放。應用程序使用vglUnloadmage()來釋放與圖像關聯的任意資源。如果image是NULL,則將使用內部數據結構來加載圖像,并且結果的圖像數據將被自動釋放。如果成功,vglLoadTexture()將返回被加載進紋理圖像的紋理對象。如果texture不是零,那么返回值將等于texture,否則是新創建的紋理對象。如果失敗,vglLoadTexture()返回零。
15.void glGenTexImage(GLenum target,GLint lod,GLenum format,GLenum type,GLvoid* image) 從綁定到target的紋理中獲取紋理圖像。Target必須是GL_TEXTURE_1D、GL_TEXTURE_2D、GL_TEXTURE_3D、GL_TEXTURE_1D_ARRAY、GL_TEXTURE_2D_ARRAY、GL_TEXTURE_CUBE_MAP_ARRAY,或者GL_TEXTURE_RECTANGLE。另外,目標GL_TEXTURE_CUBE_MAP_POSITIVE_X、GL_TEXTURE_CUBE_MAP_NEGTIVE_X、GL_TEXTURE_CUBE_MAP_POSITIVE_Y、GL_TEXTURE_CUBE_MAP_NEGTIVE_Y、GL_TEXTURE_CUBE_MAP_POSITIVE_Z和GL_TEXTURE_CUBE_MAP_NEGIVE_Z可以用來指示一個cubemap映射紋理的對應面。Lod是層次細節數。format和type是需要的數據像素格式和類型。Image可以解釋為圖像數據將存放的內存中的地址。如果將一個緩存綁定到GL_PIXEL_PACK_BUFFER目標,那么image解釋為圖像數據存放在緩存中的偏移。
16.void glPixelStorei(GLenum pname,GLint param) void glPixelStoref(GLenum pname,GLfloat param) 像素存儲參數pname設置為param設置的值。Pname必須是Pixel Unpacking參數名(GL_UNPACK_ROW_LENGTH,GL_UNPACK_SWAP_BYTES,GL_UNPACK_SKIP_PIXELS,GL_UNPACK_SKIP_ROWS,GL_UNPACK_SKIP_IMAGES,GL_UNPACK_ALIGNMENT,GL_UNPACK_IMAHGE_HEIGHT,或者GL_UNPACK_LSB_FIRST)之一,或者是像素packing參數名(GL_PACK_ROW_LENGTH,GL_PACK_SWAO_BYTES,GL_PACK_SKIP_PIXELS,GL_PACK_SKIP_ROWS,GL_PACK_SKIP_IMAGES,GL_PACK_ALIGNMENT,GL_PACK_IMAGE_HEIGHT,或者GL_PACK_LSB_FIRST)之一。
17.void glGenSamplers(GLsizei count,GLuint* samplers) 為數組samplers中的采樣器對象返回count個目前沒有使用的名稱。Samplers中返回的名稱沒有必要時連續的整數。 samplers中的名稱標為被使用,但是當它們第一次被綁定的時候,需要采樣器狀態。 零是保留值,永遠不會被glGenSamplers()返回
18.void glBindSampler(GLuint uint,GLuint samplers) 將名為sampler的采樣器對象綁定到下標用unit給定的采樣器單元。如果sampler是零,任何當前綁定到采樣器單元的采樣器對象被解除綁定并且沒有對象綁定在它的位置。
19.GLboolean gllsSampler(GLenum id) 如果id是已經存在的采樣器對象的名稱,則返回GL_TRUE,否則返回GL_FALSE.
20.void glSamplerParameter{fi}(GLuint sampler,GLenum pname,Type param) void glSamplerParameter{fi}v(GLuint sampler,GLenum pname,const Type* param) void glSamplerParameter{I,ui}v(GLuint sampler,GLenum pname,const Type* param); 設置名稱用sampler指定的采樣器對象的pname給出的參數值為param給出的值。對于glSamplerParameteri(),param是一個整數。對于glSamplerParameterf(),param是一個浮點數。對于glSamplerParameteriv(),param是整數數組的地址。對于glSamplerParameterfv(),param是浮點數組的地址。
21.void glTexParameter{fi}(GLenum target,GLenum pname,Type param); void glTexParameter{fi}v(GLenum target,GLenum pname,const Type* param); void glTexParameterl{i ui}v(GLenum target,GLenum pname,const Type* param) 為當前綁定到激活(active)紋理單元的target紋理對象設置參數pname為param給定的值。對于glTexParameteri(),param是一個整數;對于glTexParameterf(),param是浮點值;對于glTexPartameteriv()和glTexParameterliv(),param是整數數組的地址;對于glTexParameterfv(),param是浮點數組的地址,最后,對于glTexParameterluiv(),param是無符號整數的數組地址。如果pname表示采樣器對象的參數之一,那么訪問紋理內部默認采樣器對象。
22.void glDeleteSamplers(GLsizei count,const GLuint* samplers) 刪除count個存儲在數組samplers中的采樣器名稱。刪除后,不再使用samplers中的名稱,可能再后面的glGenSamplers()調用中返回。
23.Gvec4 texture(gsampler1D tex,float P[,float bias]); Gvec4 texture(gsampler2D tex,vec2 P[,float bias]); Gvec4 texture(gsampler3D tex,vec3 P[,float bias]); Gvec4 texture(gsamplerCube tex,vec3 P[,float bias]); Gvec4 texture(gsampler1D Array tex,vec2 P[,float bias]); Gvec4 texture(gsampler2D Array tex,vec3 P[,float bias]); Gvec4 texture(gsampler2DRect tex,vec2 P[,float bias]); Gvec4 texture(gsamplerCubeArray tex,vec4 P[,float bias]); tex表示的采樣器以P表示的紋理坐標來采樣紋素。如果啟用mipmapping并且提供bias,它用來偏移確定采樣mipmap的細節層次計算。返回值是包括采樣的紋理數據的向量。
新聞熱點
疑難解答