1. 程式人生 > >OpenGL紋理

OpenGL紋理

void glGenTexture(GLsizei n, GLuint ids);*
建立n個紋理id

void glBindTexture(GLenum target, GLuint id);
把指定紋理物件與當前啟用的紋理單元以target的形式進行繫結
target為 GL_TEXTURE_1D、GL_TEXTURE_2D、GL_TEXTURE_3D。。。
例如要把當前的GL_TEXTURE_1D設為1號紋理,則:
glBindTexture(GL_TEXTURE_1D, 1);

注意:一個紋理物件可以繫結到多個紋理單元,也就是說同樣的紋理資料可以使用不同的取樣器取樣。

void glActiveTexture(GLenum texture);


選擇當前啟用的紋理單元
texture為GL_TEXTURE0,GL_TEXTURE1,GL_TEXTURE2。。。

void glDeleteTexture(GLsizei n, const GLuint textures);*
刪除紋理物件,紋理id可以被重新使用

接下來將紋理資料放入視訊記憶體,有兩種方法

  1. glTexStorage() + glTexSubImage()************不可改變的儲存
    void glTexStorage1D(GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width);
    先設定紋理在視訊記憶體中的儲存格式 internalFormat(內部格式)
    void glTexSubImage1D(GLenm target,GLint levels,GLint xoffset,GLsizei width,
    GLenum format,
    GLenum type,
    const void
    data);

    然後用data中的資料去替換紋理儲存位置的某一個區域
    這裡的format和type(外部格式)是data的格式,改格式是根據讀進來的資料決定的

2.glTexImage()************可改變的紋理分配函式(縮放、格式變化等)
void glTexImage1D( GLenum target, GLint levels, GLint internalFormat, GLsizei width,
GLsizei border,
GLenum format,
GLenum type,
const void
data);

注意:內部格式是紋理在視訊記憶體中的格式,由我們自己指定;外部格式是資料本身的格式(記憶體中的格式),由資料決定。

此外,還可以使用PixelUnpack快取讀入資料

或者從幀快取中拷貝資料