【问题标题】:Textures unbinding when text isn't drawn (LWJGL/Slick-util)未绘制文本时的纹理解除绑定 (LWJGL/Slick-util)
【发布时间】:2013-11-02 19:08:53
【问题描述】:

我一直在使用 LWJGL 开发一款游戏,但遇到了一个奇怪的问题。每次我决定隐藏文本时,我的纹理似乎都解除了绑定。这是所有涉及的代码

下面是我的 Text 类中的代码。

public void draw() {
        for (TextData textData : textList) {
            drawString(textData.getX(), textData.getY(), textData.getText());
        }
    }

void drawString(int x, int y, String text) {
        for (String line : text.split("\n"))
            ttf.drawString( x, y += ttf.getHeight(), line);
    }

现在是主类中的代码

if (Keyboard.isKeyDown(Keyboard.KEY_H)) {
                hideText = !hideText;
        }

if (!hideText) {
            text.draw();
        }

这是结果

http://i.stack.imgur.com/4Y9fk.png

http://i.stack.imgur.com/SUoOf.png

【问题讨论】:

  • 你确定它解绑了纹理吗?我怀疑这可能是使用固定功能管道完成的,drawString (...) 的实现具有启用(并保持启用)GL_TEXTURE_2D 的副作用,它在代码的其他地方被禁用。如果不调用 drawString (...) GL_TEXTURE_2D 可能永远不会重新启用。这都是直觉/推测,因为我不知道这段代码的 ANY 是如何与底层 OpenGL API 调用相关的。它几乎可以肯定与绑定的纹理无关,而是与其他一些纹理相关的状态。

标签: java opengl lwjgl


【解决方案1】:

当绘制文本时,图像必然会绘制文本,我猜测通常 lwjgl/slick 在绘制文本时会保存当前纹理,然后再重新绑定它。我猜这可能是一个错误,隐藏时它不会重新绑定纹理但仍然绑定另一个纹理?

【讨论】:

    【解决方案2】:

    仔细考虑我的代码后,我发现我的实体类在绘制时调用了glBindTexture(GL_TEXTURE_2D, 0);,并且绘制文本再次启用它。在我的实体绘图代码末尾添加glBindTexture(GL_TEXTURE_2D, 1); 解决了这个问题。感谢 cmets 帮我解决问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-09
      • 1970-01-01
      • 1970-01-01
      • 2020-09-08
      • 1970-01-01
      相关资源
      最近更新 更多