可以在OpenGL中创建的纹理数量是否有限制 - 也就是说,使用glGenTextures?
我知道GL有一些限制,例如。可以在片段着色器中使用的纹理数。但是,我无法找到任何可用的整数“纹理名称”总数的文档。
答案 0 :(得分:18)
glGenTextures的唯一限制是由纹理名称( GLint )的位宽给出,它是32位;实际上,纹理名称的数量可以很大,以至于在生成纹理名称时可能永远不会出现问题。
纹理的限制是图形系统内存的限制。仅当应用程序使用 glTexImage2D (和其他glTexImage *函数,如果可用)提交纹理数据时,OpenGL实现才知道纹理大小和格式,它指定宽度,高度和内部纹理格式:具有这些参数可以确定存储纹理数据所需的内存。
要检查错误,您应该使用 glGetError 查询OpenGL错误,如果操作无法分配所需的内存,则会返回GL_OUT_OF_MEMORY。 glGenTextures 和 glTexImage2D 等也可以返回此错误。
glTexImage2D 等最有可能返回此错误,因为纹理分配所需的内存远大于标记使用的纹理名称所需的内存。
答案 1 :(得分:3)
您可以生成的纹理名称数量没有限制。然而,纹理内存存在限制,因此由于内存限制,实现仍然可能会失败glGenTextures调用。
因此,不要创建一堆纹理名称,然后不要使用它们。创建您所需的。