【问题标题】:glGenTextures - is there a limit to the number of textures?glGenTextures - 纹理数量有限制吗?
【发布时间】:2017-12-05 19:07:07
【问题描述】:

在 OpenGL 中可以创建的纹理数量是否有限制 - 即使用 glGenTextures?

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

【问题讨论】:

    标签: opengl graphics


    【解决方案1】:

    glGenTextures 的唯一限制是纹理名称的位宽(GLint),即 32 位;事实上,纹理名称的数量可能非常多,以至于您在生成纹理名称时可能永远不会遇到问题。

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

    要检查错误,您应该使用 glGetError 查询 OpenGL 错误,如果操作未能分配所需的内存,则返回 GL_OUT_OF_MEMORY。 glGenTexturesglTexImage2D 等也可能返回此错误。

    这个错误最有可能由glTexImage2D等返回,因为纹理分配所需的内存远大于将纹理名称标记为已用所需的内存。

    【讨论】:

    • 此外,如果您想查看是否可以创建纹理,请在调用glTexImage 时使用GL_PROXY_TEXTURE_*D 进行某种试运行。这样做可以避免错误。这是否有价值,我不确定,因为我不认为 glTexImage 失败可能会导致任何严重问题,但仍然值得知道(特别是如果你想测试系统能力)。
    【解决方案2】:

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

    所以不要创建一堆纹理名称然后不使用它们。创造你需要的东西。

    【讨论】:

    • 并确保在完成后删除它们!否则你的代码会因为内存警告而崩溃,你不知道它是从哪里来的!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-10
    • 2015-05-31
    • 1970-01-01
    • 2021-08-07
    相关资源
    最近更新 更多