Java 文本不为'时纹理解除绑定;t拉拔(LWJGL/Slick util)
我一直在和LWJGL一起做游戏,遇到了一个奇怪的问题。每次我决定隐藏文本时,我的纹理似乎都会解除绑定。下面是所有被嵌入的代码 下面是我的文本类中的代码Java 文本不为'时纹理解除绑定;t拉拔(LWJGL/Slick util),java,opengl,lwjgl,Java,Opengl,Lwjgl,我一直在和LWJGL一起做游戏,遇到了一个奇怪的问题。每次我决定隐藏文本时,我的纹理似乎都会解除绑定。下面是所有被嵌入的代码 下面是我的文本类中的代码 public void draw() { for (TextData textData : textList) { drawString(textData.getX(), textData.getY(), textData.getText()); } } void drawStri
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();
}
这就是结果
当绘制文本时,图像一定会绘制文本,我猜通常lwjgl/slick会在绘制文本时保存当前纹理,然后重新绑定。我猜这可能是一个bug,当隐藏时它不会重新绑定纹理,但仍然绑定另一个纹理?仔细考虑我的代码后,我发现我的实体类正在调用
glBindTexture(GL\u texture\u 2D,0)代码>在绘制和绘制文本时,再次启用它。添加glBindTexture(GL_TEXTURE_2D,1)代码>在实体图形代码的末尾修复了该问题。感谢这些帮助我解决问题的评论。你确定它会解开纹理吗?我怀疑这可能是通过使用固定的函数管道实现的,drawString(…)
的实现有一个副作用,即启用(并保持启用)GL\u TEXTURE\u 2D
,这在代码的其他地方被禁用。如果不调用drawString(…)
GL\u TEXTURE\u 2D
可能永远不会重新启用。这完全是直觉/推测,因为我不知道这些代码实际上与底层OpenGL API调用有何关联。它几乎肯定与绑定纹理无关,而是与其他纹理相关的状态。