【问题标题】:OpenGL Unbind textureOpenGL解绑纹理
【发布时间】:2013-11-15 04:10:59
【问题描述】:

我有一个庞大的 2D 纹理列表,每次加载地图时都会加载这些纹理(取决于地图及其内容)。我正在寻找一种方法来解除绑定纹理以减少内存使用。绑定纹理功能完美无缺,只是看不到任何取消绑定某些或全部 id 的功能。

【问题讨论】:

    标签: c# opengl opentk


    【解决方案1】:

    试试

    glDeleteTextures(1, &texID)
    

    这应该会从内存中删除纹理。在调用之前,请务必通过简单地调用来取消绑定当前纹理:

    glBindTexture(target, 0) // << default texture object
    

    glDeleteTextures spec

    【讨论】:

    • 所以&lt;&lt; default texture object 你的意思是把我的纹理ID 代替0?另一件事是我使用的是 C#,而不是 C++,但它具有这些功能。
    • 0 表示 OGL 将取消绑定您的纹理 ID。这样做是为了不删除活动纹理(例如,在绘制时使用的纹理)。请在那里传递0,而不是你的textureID。
    • OpenGL 规范说删除纹理对象会隐式解除绑定。然而,它没有做的是将它们从 FBO 的连接点移除。 GL 将立即释放纹理 ID 以供重复使用并在您删除对象时取消绑定它,但由于 FBO 仍可能引用原始纹理对象,因此在删除所有引用之前不会释放纹理使用的内存。
    • @111WARLOCK111:不要将“解除绑定”与“释放内存”混淆。一次只绑定一个纹理 - 将其视为当前活动的纹理。绑定一个纹理会取消绑定任何先前的纹理 - 它是一个单一的全局变量。如果在执行 draw.. 调用时绑定了一个,则使用它。绑定 0 的目的是确保在以后的任何绘制中没有纹理处于活动状态。 “删除”就是释放内存。
    • 另外,您是说在调用 delete with 纹理 ID(您刚刚解除绑定)之前运行该操作 现在将不受约束-这令人困惑。你的意思是真的你在上面说的话,还是你的意思是别的……?
    猜你喜欢
    • 2015-02-26
    • 2013-09-07
    • 1970-01-01
    • 2011-07-13
    • 2013-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多