2012-05-06 3 views
1

Итак, я пытаюсь нарисовать текст на экране с помощью специального шрифта, который я сделал. Проблема возникает при одновременном использовании текстур.Проблемы с использованием шрифтов и текстур истинного типа LWJGL

загружаю мои текстуры, как это:

Int текстуры {

 try { 
      InputStream in = new FileInputStream(filelocation); 
      PNGDecoder decoder = new PNGDecoder(in); 
      ByteBuffer buffer = BufferUtils.createByteBuffer(4 
        * decoder.getWidth() * decoder.getHeight()); 
      decoder.decode(buffer, decoder.getWidth() * 4, Format.RGBA); 
      buffer.flip(); 
      in.close(); 
      //glBindTexture(GL_TEXTURE_2D, Texture); 
      glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, 
        GL_NEAREST); 
      glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, 
        GL_NEAREST); 
      glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, decoder.getWidth(), 
        decoder.getHeight(), 0, GL_RGBA, GL_UNSIGNED_BYTE, 
        buffer); 
      glBindTexture(GL_TEXTURE_2D, 0); 
     } catch (FileNotFoundException ex) { 
      System.err 
        .println("Textures are not in their correct location."); 
      Display.destroy(); 
      System.exit(1); 
     } catch (IOException ex) { 
      System.err 
        .println("Textures are not in their correct location."); 
      Display.destroy(); 
      System.exit(1); 
     } 
    } 

И мой шрифт как этот

государственной статической силы нагрузки (размер поплавка) {

try { 
     InputStream inputStream = ResourceLoader.getResourceAsStream(filelocation); 

     Font awtFont = Font.createFont(Font.TRUETYPE_FONT, inputStream); 
     awtFont = awtFont.deriveFont(size); 
     fontname = new TrueTypeFont(awtFont, true); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

Что происходит, так это то, как входные потоки стали «перепутаны», а текст, который я хочу, - это рисовать остроумием h текстуру, которую я загрузил.

Загружаю шрифт перед игровым циклом из Font.class и текстуры загружаются из класса, в котором они используются, который вызывается во время игрового цикла.

У меня проблема с googled и ничего не могу найти. Если вы можете понять меня, спасибо заранее.

ответ

0

Вместо того, чтобы вводить InputStreams, скорее всего, это привязки текстур. В вашем классе текстуры закомментирована следующая строка:

// glBindTexture (GL_TEXTURE_2D, Texture);

В результате изображение текстуры загружается в то, что ранее было привязано к GL_TEXTURE2D, заменяя предыдущую текстуру.

Вы должны связать текстуру, прежде чем вы можете загрузить изображение в него с glTexImage2D

+0

Я забыл раскомментировать код во мне пытается сгладить проблему из, извините. Знаете ли вы, как я могу исправить проблему, которую я имею? –

+0

Нам нужно видеть, что вы привязываете текстуры при рендеринге. Вы можете это показать? – Aaron

+0

Это список отображения: 'int buttonDisplayList = glGenLists (1); \t \t glNewList (кнопкаDisplayList, GL_COMPILE); \t \t { \t \t \t glBegin (GL_QUADS); \t \t \t glTexCoord2f (0, 0); \t \t \t glVertex2f (xlocation, ylocation); \t \t \t glTexCoord2f (1, 0); \t \t \t glVertex2f ((xlocation + width), ylocation); \t \t \t glTexCoord2f (1, 1); \t \t \t glVertex2f ((xlocation + ширина), (ylocation-height)); \t \t \t glTexCoord2f (0, 1); \t \t \t glVertex2f (xlocation, (ylocation-height)); \t \t \t glEnd(); \t \t} \t \t glEndList(); ' –