LWJGL Медленный рендеринг

Я сделал простую программу LWJGL, в которой она отображает и отображает текст на экране. Я визуализирую текст с помощью Slick-util, кстати.

Итак, мой вопрос: почему перед загрузкой требуется пара секунд черного экрана (или любого другого чистого цвета). Есть ли способ исправить это? Могу ли я скрыть дисплей, пока все не отобразится? Ну это мои вопросы. Вот мой код:

package com.survivalpixel.kopis;

import static org.lwjgl.opengl.GL11.GL_MODELVIEW;
import static org.lwjgl.opengl.GL11.GL_PROJECTION;
import static org.lwjgl.opengl.GL11.GL_TEXTURE_2D;
import static org.lwjgl.opengl.GL11.glEnable;
import static org.lwjgl.opengl.GL11.glMatrixMode;
import static org.lwjgl.opengl.GL11.*;
import static org.lwjgl.opengl.GL11.glPopMatrix;
import static org.lwjgl.opengl.GL11.glPushMatrix;

import java.awt.Font; 

import org.lwjgl.LWJGLException;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;
import org.lwjgl.opengl.GL11;
import org.newdawn.slick.TrueTypeFont;
public class Menu {
private int WIDTH = 1080,HEIGHT = 720;
Font font;
TrueTypeFont gamefont;
public static void main(String args[]){
    new Menu();
}
public Menu(){
    try {
        Display.setDisplayMode(new DisplayMode(WIDTH,HEIGHT));
        Display.setResizable(false);
        Display.setTitle("Kopis V.01");
        Display.create();
    } catch (LWJGLException e) {

    }

    initGL();
    init();


    while(!Display.isCloseRequested()){
        glPopMatrix();

        glClear(GL11.GL_COLOR_BUFFER_BIT);

        drawString("This is a test",100,100);

        Display.update();
        Display.sync(100);
        glPushMatrix();
    }
    Display.destroy();
    System.exit(0);
}
private void initGL() {
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0, 1080, 720, 0, -1, 1);
    glMatrixMode(GL_MODELVIEW);
    glClearColor(0, 0, 0, 0);
    glEnable(GL_BLEND);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);


}
private void init() {

    font = new Font("times new roman", Font.BOLD,12);
    gamefont = new TrueTypeFont(font, false);


}
public void drawString(String s,int x, int y){
    gamefont.drawString(x, y, s);
}
}

person 36redsoxfan    schedule 18.05.2012    source источник
comment
Не глотайте исключения. Я думаю, вы поменяли местами glPushMatrix/glPopMatrix. TrueTypeFont кажется устаревшим - возможно, поэтому.   -  person Piotr Praszmo    schedule 19.05.2012


Ответы (1)


Как упомянул Бантар, glPushMatrix/glPopMatrix находятся в неправильном порядке. В вашем примере они даже не нужны, так что можете смело их удалять.

Что касается шрифта, кажется, UnicodeFont теперь правильный:

textFont = new UnicodeFont(new Font("Times New Roman", Font.PLAIN, 18));
textFont.addAsciiGlyphs();
textFont.getEffects().add(new ColorEffect(java.awt.Color.WHITE));
textFont.loadGlyphs();

Я также попробовал ваш код без какой-либо оптимизации, и он работает правильно, несмотря на проблему с порядком матрицы. Да, есть небольшое время инициализации. Но здесь он очень короткий, около секунды. Либо ваше оборудование, как правило, очень старое, либо у вас плохой графический драйвер.

person Robert Kühne    schedule 14.09.2012