2013-09-13 3 views
2

У меня была странная проблема, когда я попытался отобразить текст на экране. Я следовал этому руководству 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(); 
    } 
} 
+1

Возможно, что 'loadDefaultFont (...)' протекает некоторое состояние OpenGL. Вы можете попробовать: 'glPushAttrib (GL_ALL_ATTRIB_BITS)' перед вызовом его и 'glPopAttrib()' сразу же после этого, чтобы узнать, не изменилось ли это. –

+0

@ AndonM.Coleman Просто попробовал glPushAttrib() и glPopAttrib(). Теперь все остальное появляется, но шрифт работает неправильно. Весь текст станет сплошным цветным прямоугольником. – MegaStupidMonkeys

+0

По крайней мере, мы знаем, что это проблема государства сейчас. Не видя реализации для 'org.newdawn.slick.TrueTypeFont', я могу только догадываться, что ваша проблема связана с состоянием' GL_TEXTURE_2D'. –

ответ

0

Если у вас есть Slick-Util как библиотеки, попробуйте добавить TextureImpl.bindNone(); после каждого вызова для рендеринга текста.

Смежные вопросы