glGenTextures(GLsizei n, GLuint *textures)函数说明

转载 2014年12月29日 16:12:10


glGenTextures(GLsizei n, GLuint *textures)函数说明
           n:用来生成纹理名字的数量
textures:存储纹理名称数组的第一个元素指针

备注说明:
glGenTextures函数根据纹理参数返回n个纹理名称。纹理名称集合不必是一个连续的整数集合。因此,可能在先前调用的glGenTextures的时候没有名称集合被返回。产生纹理函数假定目标纹理的面积是由glBindTexture函数限制的。先前调用glGenTextures产生的纹理名称集不会由后面调用的glGenTextures得到,除非他们首先被glDeleteTextures删除。
你不可以在显示列表中包含glGenTextures。

使用时注意:

void glGenTextures(GLsizein, GLuint *texture);

该函数用来产生纹理名称。这里纹理名称GLuint *texture是整型的,因此也可以理解为这个函数为这n个纹理指定了n个不同的ID。

在用GL渲染的时候,纹理是很常见的东西。使用纹理之前,必须执行这句命令为你的texture分配一个ID,然后绑定这个纹理,加载纹理图像,这之后,这个纹理才可以使用。加载纹理的代码如下:

BOOL LoadTextures(IplImage *pImage, GLuint *pTexture)
{
    int Status=FALSE;
    if(pImage != NULL)
    {
        Status=TRUE;

        glGenTextures(1, &pTexture[0]); //注意这里
        glBindTexture(GL_TEXTURE_2D, pTexture[0]);
        glTexImage2D(GL_TEXTURE_2D, 0, 3,
                     pImage->width, pImage->height,
                     0, GL_BGR, GL_UNSIGNED_BYTE, (unsigned char *)pImage->imageData);
        glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
        glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
    }
    return Status;
}

    使用上面这个函数时需要小心,这个函数只能放在循环外面使用!如果你想在循环中重复利用这个texture[0],给它加载不同的纹理(比如,你想在窗口中显示序列图像),而把这个函数放在循环内部调用的话,那么当程序循环足够多次之后,你的电脑将变得巨慢无比,甚至导致死机。原因就是反复地调用glGenTextures(1, &pTexture[0])。

OpenGL入门(二):绘制一个点

GLuint vbo;//存储顶点缓冲区句柄static void renderSenceCB(){ glClear(GL_COLOR_BUFFER_BIT);//使用设置的清除缓存帧颜色清除...
  • u013566648
  • u013566648
  • 2016-06-24 11:34:42
  • 384

OpenGL 数据类型

OpenGL 数据类型首先我们要讨论的是OpenGL的数据类型。因为OpenGL是一个跨平台的API,数据类型的大小会随使用的编程语言以及处理器(64位,32位,16位)等的不同而不同,所以OpenG...
  • xiaoquanhuang
  • xiaoquanhuang
  • 2011-07-15 14:12:25
  • 7000

VS2008 1>c:\program files (x86)\microsoft visual studio 9.0\vc\atlmfc\include\afx.h(24) : fatal erro

工程->属性- >配置属性->c++->命令行 结尾加上 /D "_AFXDLL"
  • qq_26280519
  • qq_26280519
  • 2016-08-08 10:43:02
  • 3340

【OpenGL】详解第一个OpenGL程序

OpenGL能做的事情太多了!很多程序也看起来很复杂。但是!所有O
  • candycat1992
  • candycat1992
  • 2014-11-26 16:00:34
  • 64871

Opengl函数(5)

1.void glGenTextures(GLsizei n,GLuint* textures) 在数组textures中返回n个用于纹理对象的当前没有使用的名称。Textures中返回的名称不一定...
  • SHIYUEDYX
  • SHIYUEDYX
  • 2017-03-03 17:46:19
  • 319

加载纹理与使用glGenTextures时应注意的一点(解决吃内存)[转]

加载纹理与使用glGenTextures时应注意的一点(解决吃内存)[转] glGenTextures   glGenTextures(GLsizei n, GLuint *te...
  • lovehota
  • lovehota
  • 2012-03-29 15:41:20
  • 7466

《高效学习OpenGL》 之 纹理对象 glGenTextures(),glIsTexture(),glBindTexture(),glDeleteTextures()

命名纹理对象: void glGenTextures (GLsizei n, GLuint *textures); //在数组textures中返回n个当期未使用的值,表示纹理对象的名称...
  • huangbangqing12
  • huangbangqing12
  • 2014-02-28 11:25:08
  • 4433

OpenGL ES glGenTextures返回值为0

最近在Android的一个项目要用到OpenGL ES,自己对于图形引擎这块又不了解,顶多就是看过点DirectX,不过也是挺久以前的了,早忘完了。 想着这下完了,肯定又得掉坑。 坑确实多,不过大...
  • u011810659
  • u011810659
  • 2017-07-30 20:06:53
  • 509

OpenGL绘制纹理时,glGenTextures()函数带来的内存泄露,使程序被杀死。

项目中,我需要定时的去更换纹理图片,贴到指定的位置。我就理所当然的写了一个函数,然后定时去执行一次该函数。 函数中有代码:             glPixelStorei(GL_UNPACK_...
  • gagabook
  • gagabook
  • 2016-09-02 13:58:55
  • 2070

opengl glBindTexture为何失败

半年没有写点东西总结下了。有时候脑中想法很多,却又感觉文字功底着实有限,无法把自由散漫的思想分门别类地记下来,好在可以与人交流,掏空自己,然后吸收些新东西;有时候却什么都不想,就翻翻书,享受前人的精神...
  • C__Allen
  • C__Allen
  • 2013-12-31 10:32:50
  • 2925
收藏助手
不良信息举报
您举报文章:glGenTextures(GLsizei n, GLuint *textures)函数说明
举报原因:
原因补充:

(最多只允许输入30个字)