У меня была странная проблема, когда я попытался отобразить текст на экране. Я следовал этому руководству Slick Util - TrueType Fonts for LWJGL. Текст был отображен правильно, но все остальное исчезло. Это происходит даже тогда, когда текст не отображается. И он вернется к норме, когда я удалю код для загрузки шрифта.LWJGL - все прошло после загрузки шрифта
Вот мой код: (Прямоугольник не будет отображаться, когда у меня есть эта строка кода: this.font = this.loadDefaultFont (30);)
import static org.lwjgl.opengl.GL11.GL_BLEND;
import static org.lwjgl.opengl.GL11.GL_COLOR_BUFFER_BIT;
import static org.lwjgl.opengl.GL11.GL_MODELVIEW;
import static org.lwjgl.opengl.GL11.GL_ONE_MINUS_SRC_ALPHA;
import static org.lwjgl.opengl.GL11.GL_PROJECTION;
import static org.lwjgl.opengl.GL11.GL_QUADS;
import static org.lwjgl.opengl.GL11.GL_SRC_ALPHA;
import static org.lwjgl.opengl.GL11.glBegin;
import static org.lwjgl.opengl.GL11.glBlendFunc;
import static org.lwjgl.opengl.GL11.glClear;
import static org.lwjgl.opengl.GL11.glClearColor;
import static org.lwjgl.opengl.GL11.glColor4f;
import static org.lwjgl.opengl.GL11.glEnable;
import static org.lwjgl.opengl.GL11.glEnd;
import static org.lwjgl.opengl.GL11.glLoadIdentity;
import static org.lwjgl.opengl.GL11.glMatrixMode;
import static org.lwjgl.opengl.GL11.glOrtho;
import static org.lwjgl.opengl.GL11.glVertex2i;
import java.awt.Font;
import org.lwjgl.LWJGLException;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;
import org.newdawn.slick.Color;
import org.newdawn.slick.TrueTypeFont;
public class TrueTypeFontDemo {
private TrueTypeFont font;
public TrueTypeFontDemo() {
try {
Display.setDisplayMode(new DisplayMode(800, 600));
Display.setTitle("TrueTypeFont Demo");
Display.create();
} catch (LWJGLException e) {
e.printStackTrace();
}
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, 800, 600, 0, 1, -1);
glMatrixMode(GL_MODELVIEW);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
this.font = this.loadDefaultFont(30);
while (!Display.isCloseRequested()) {
glClearColor(1.0f, 1.0f, 1.0f, 0.0f);
glClear(GL_COLOR_BUFFER_BIT);
this.font.drawString(100, 100, "Hello world", Color.red);
glColor4f(1.0f, 0.0f, 0.0f, 0.5f);
glBegin(GL_QUADS);
{
glVertex2i(500, 500);
glVertex2i(500, 50);
glVertex2i(600, 50);
glVertex2i(600, 500);
}
glEnd();
Display.update();
Display.sync(60);
}
Display.destroy();
}
private TrueTypeFont loadDefaultFont(int size) {
// load a default java font
Font awtFont = new Font("Times New Roman", Font.PLAIN, size);
return new TrueTypeFont(awtFont, false);
}
public static void main(String[] args) {
new TrueTypeFontDemo();
}
}
Возможно, что 'loadDefaultFont (...)' протекает некоторое состояние OpenGL. Вы можете попробовать: 'glPushAttrib (GL_ALL_ATTRIB_BITS)' перед вызовом его и 'glPopAttrib()' сразу же после этого, чтобы узнать, не изменилось ли это. –
@ AndonM.Coleman Просто попробовал glPushAttrib() и glPopAttrib(). Теперь все остальное появляется, но шрифт работает неправильно. Весь текст станет сплошным цветным прямоугольником. – MegaStupidMonkeys
По крайней мере, мы знаем, что это проблема государства сейчас. Не видя реализации для 'org.newdawn.slick.TrueTypeFont', я могу только догадываться, что ваша проблема связана с состоянием' GL_TEXTURE_2D'. –