Opengl glGenTextures-纹理的数量有限制吗?

Opengl glGenTextures-纹理的数量有限制吗?,opengl,graphics,Opengl,Graphics,OpenGL中可以创建的纹理数量有限制吗?也就是说,使用glGenTextures 我知道GL施加了一些限制,例如,可以在片段着色器中使用的纹理数量。但是,我还没有找到任何关于可用整数“纹理名称”总数的文档。可以生成的纹理名称数量没有限制。然而,纹理内存是有限制的,因此实现仍然可能由于内存限制而导致glGenTextures调用失败 所以不要创建一堆纹理名称,然后不使用它们。创建所需内容。glGenTextures的唯一限制是纹理名称(GLint)的位宽度,即32位;实际上,纹理名称的数量可能非

OpenGL中可以创建的纹理数量有限制吗?也就是说,使用glGenTextures


我知道GL施加了一些限制,例如,可以在片段着色器中使用的纹理数量。但是,我还没有找到任何关于可用整数“纹理名称”总数的文档。

可以生成的纹理名称数量没有限制。然而,纹理内存是有限制的,因此实现仍然可能由于内存限制而导致glGenTextures调用失败


所以不要创建一堆纹理名称,然后不使用它们。创建所需内容。

glGenTextures的唯一限制是纹理名称(GLint)的位宽度,即32位;实际上,纹理名称的数量可能非常多,因此在生成纹理名称时可能永远不会出现问题

纹理的限制是图形系统的内存限制。OpenGL实现仅在应用程序使用glTexImage2D(以及其他glTexImage*函数,如果可用)提交纹理数据时才知道纹理大小和格式,该函数指定宽度、高度和内部纹理格式:通过这些参数,可以确定存储纹理数据所需的内存

要检查错误,应该使用glGetError查询OpenGL错误,如果操作未能分配所需内存,它将返回GL_OUT_OF_内存。glGenTextures和glTexImage2D等也可以返回此错误


由于纹理分配所需的内存远远大于标记使用的纹理名称所需的内存,因此此错误很可能由GLTEXAGE2D等返回。

此外,如果您想查看是否可以创建纹理,调用
glTexImage
时,请使用
GL\u PROXY\u TEXTURE\ud
进行某种试运行。这样做可以避免错误。这是否有价值,我不确定,因为我不认为
glTexImage
失败可能会导致任何严重的问题,但值得知道(特别是如果您想测试系统功能的话)。并且确保在完成后删除它们!否则,您的代码将崩溃并出现内存警告,您不知道它来自何处!