title: LWJGL render text using slick-util
body: <p>I want to render a string of text on top of my openGL application using the slick-util's tutorial: http:// lwjgl.org/wiki/index.php?title=Slick-Util_Library_-_Part_3_-_TrueType_Fonts_for_LWJGL</p>
  
  <p>This is my init code:</p>
  
  <pre><code>private void init() {
  
      try {
          Display.setDisplayMode(new DisplayMode(640, 480));
          Display.setVSyncEnabled(true);
          Display.setTitle(this.windowTitle);
          Display.create();
  
          Keyboard.create();
  
      } catch (LWJGLException e) {
          Sys.alert("Error", "Initialization failed!\n\n" + e.getMessage());
          System.exit(0);
      }
  
      /* OpenGL */
      int width = Display.getDisplayMode().getWidth();
      int height = Display.getDisplayMode().getHeight();
  
      GL11.glViewport(0, 0, width, height); // Reset The Current Viewport
      GL11.glMatrixMode(GL11.GL_PROJECTION); // Select The Projection Matrix
      GL11.glLoadIdentity(); // Reset The Projection Matrix
      GLU.gluPerspective(45.0f, ((float) width / (float) height), 0.1f, 100.0f); // Calculate The Aspect Ratio Of The Window
      GL11.glMatrixMode(GL11.GL_MODELVIEW); // Select The Modelview Matrix
      GL11.glLoadIdentity(); // Reset The Modelview Matrix
  
      GL11.glEnable(GL11.GL_TEXTURE_2D);
      //GL11.glShadeModel(GL11.GL_SMOOTH); // Enables Smooth Shading
      GL11.glShadeModel(GL11.GL_FLAT);
      GL11.glClearColor(0.0f, 0.0f, 0.0f, 0.0f); // Black Background
      GL11.glClearDepth(1.0f); // Depth Buffer Setup
      GL11.glEnable(GL11.GL_DEPTH_TEST); // Enables Depth Testing
      GL11.glDepthFunc(GL11.GL_LEQUAL); // The Type Of Depth Test To Do
      GL11.glHint(GL11.GL_PERSPECTIVE_CORRECTION_HINT, GL11.GL_NICEST); // Really Nice Perspective Calculations
      //GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE); // Set The Blending Function For Translucency
      //GL11.glEnable(GL11.GL_BLEND);
  
  
      /* Set up the light */
      // Ambient Light
      lightAmbient.put(0, 1.0f);
      lightAmbient.put(1, 1.0f);
      lightAmbient.put(2, 1.0f);
      lightAmbient.put(3, 1.0f);
  
      // Diffuse Light
      lightDiffuse.put(0, 1.0f);
      lightDiffuse.put(1, 1.0f);
      lightDiffuse.put(2, 1.0f);
      lightDiffuse.put(3, 1.0f);
  
      // Light Position
      lightPosition.put(0, 25.0f);
      lightPosition.put(1, 0.0f);
      lightPosition.put(2, 0.0f);
      lightPosition.put(3, 1.0f);
  
      lightDir.put(0, 0.0f);
      lightDir.put(1, 0.0f);
      lightDir.put(2, 0.0f);
      lightDir.put(3, 1.0f);
  
      GL11.glLight(GL11.GL_LIGHT1, GL11.GL_AMBIENT, lightAmbient); // Setup The Ambient Light
      GL11.glLight(GL11.GL_LIGHT1, GL11.GL_DIFFUSE, lightDiffuse); // Setup The Diffuse Light
      GL11.glLight(GL11.GL_LIGHT1, GL11.GL_SPOT_DIRECTION, lightDir);
      GL11.glLight(GL11.GL_LIGHT1, GL11.GL_POSITION, lightPosition); // Position The Light
      GL11.glEnable(GL11.GL_LIGHT1); // Enable Light One
  
      if (light) // Enable/Disable Lighting
          GL11.glEnable(GL11.GL_LIGHTING);
      else
          GL11.glDisable(GL11.GL_LIGHTING);
  
      /* Initiating loader classes */
  
      new ColorList();
      new TextureManager();
      new TimersManager();
      lvLoader = new LevelLoader();
  
      GL11.glBindTexture(GL11.GL_TEXTURE_2D, TextureManager.getInstance().atlases[0].getTextureID());
  
      /* Initiating variables */
      lastFPS = getTime();
  
      /* Setting the spawn point */
      xpos = spawnPoint.x;
      zpos = spawnPoint.z;
  
      /* Loading a new level */
      loadLevel("testmap");
  
      /* Build static display lists */
      buildLists();   
  
      //create the font
      Font awtFont = new Font("Times New Roman", Font.BOLD, 24);
      font = new TrueTypeFont(awtFont, false);
  }
  </code></pre>
  
  <p>Render code:</p>
  
  <pre><code>private void render() {
  
      GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT); // Clear The Screen And The Depth Buffer
      GL11.glLoadIdentity(); // Reset The View
  
      GL11.glRotatef(lookupdown, 1.0f, 0, 0);
      GL11.glRotatef(360.0f - yrot, 0, 1.0f, 0);
  
      GL11.glTranslatef(-xpos, 0, -zpos);
  
      GL11.glCallList(blocksList);
      GL11.glCallList(tilesList);
      GL11.glCallList(roofList);
  
      TexCoords tc = null;
  
      drawS();
  
      GL11.glBindTexture(GL11.GL_TEXTURE_2D, TextureManager.getInstance().atlases[0].getTextureID());
  
      /*                   RENDERING BLOCKS                      */
      for (Block block : lvLoader.currentLevel.blocks)
      {
          if (block.created)
          {       
              if (!block.isStatic)
              {
                  if (block.texturePos != null)
                  {
                      tc = getTexCoords(block.texturePos);
                  }
                  else
                  {
                      tc = new TexCoords(new Vertex(1.0f, 0.875f, 0), new Vertex(0.75f, 0.875f, 0), new Vertex(0.75f, 1.0f, 0), new Vertex(1.0f, 1.0f, 0));
                  }
  
                  //GL11.glColor3b(block.color.getRedByte(), block.color.getGreenByte(), block.color.getBlueByte());
                  GL11.glColor4f(0.0f, 0.0f, 1.0f, 1.0f);
                  GL11.glBegin(GL11.GL_QUADS);
  
                  for (int i = 0; i &lt; 6; i++)
                  {
                      quadNormal(i);
                      for (int j = 0; j &lt; 4; j++)
                      {
                          Vertex coord = tc.coords[j];
                          GL11.glTexCoord2d(coord.x, coord.y);
  
                          GL11.glVertex3f(block.walls[i].vertices[j].x, block.walls[i].vertices[j].y, block.walls[i].vertices[j].z);
                      }
                  }
  
                  GL11.glEnd();
              }
          }
      }
  
  
      /*                   RENDERING TILES                      */
      for (Tile tile : lvLoader.currentLevel.tiles)
      {
          if (tile.created)
          {
              if (!tile.isStatic)
              {
                  if (tile.animation != null)
                  {
                      tile.texturePos = tile.animation.frames[tile.animation.currentFrame];
                      tc = getTexCoords(tile.texturePos);
                  }
                  else
                  {
                      if (tile.texturePos != null)
                      {
                          tc = getTexCoords(tile.texturePos);
                      }
                      else
                      {
                          tc = new TexCoords(new Vertex(1.0f, 0.875f, 0), new Vertex(0.75f, 0.875f, 0), new Vertex(0.75f, 1.0f, 0), new Vertex(1.0f, 1.0f, 0));
                      }
                  }
  
                  GL11.glColor3b(tile.color.getRedByte(), tile.color.getGreenByte(), tile.color.getBlueByte());
                  //GL11.glColor4f(0, 0, 1.0f, 1.0f);
                  GL11.glBegin(GL11.GL_QUADS);
  
                  quadNormal(5);
                  for (int jj = 0; jj &lt; 4; jj++)
                  {
                      Vertex coord = tc.coords[jj];
                      GL11.glTexCoord2f(coord.x, coord.y);
  
                      GL11.glVertex3f(tile.surface.vertices[jj].x, tile.surface.vertices[jj].y, tile.surface.vertices[jj].z);
                  }
  
  
  
                  GL11.glEnd();
              }
          }
      }
  
  
      /*                   RENDERING ROOF                      */ 
      for (Tile rTile : lvLoader.currentLevel.roof)
      {
          if (rTile != null)
          {
              if (rTile.created)
              {
                  if (!rTile.isStatic)
                  {
                      if (rTile.texturePos != null)
                      {
                          tc = getTexCoords(rTile.texturePos);
                      }
                      else
                      {
                          tc = new TexCoords(new Vertex(1.0f, 0.875f, 0), new Vertex(0.75f, 0.875f, 0), new Vertex(0.75f, 1.0f, 0), new Vertex(1.0f, 1.0f, 0));
                      }
                      GL11.glColor3ub(rTile.color.getRedByte(), rTile.color.getGreenByte(), rTile.color.getBlueByte());
                      GL11.glBegin(GL11.GL_QUADS);
  
                      quadNormal(4);
                      for (int k = 0; k &lt; 4; k++)
                      {
                          Vertex coord = tc.coords[k];
                          GL11.glTexCoord2f(coord.x, coord.y);
  
                          GL11.glVertex3f(rTile.surface.vertices[k].x, rTile.surface.vertices[k].y, rTile.surface.vertices[k].z);
                      }
  
                      GL11.glEnd();
                  }
              }
          }
      }
  }
  </code></pre>
  
  <p>Additional methods:</p>
  
  <pre><code>private void drawS()
  {
      // disable depth testing and enable orthographic view
      GL11.glDisable(GL11.GL_DEPTH_TEST);
     // GL11.glDepthMask(false);
      enableOrthoView();
  
      // draw the credits
      GL11.glDisable(GL11.GL_LIGHTING);
      font.drawString(20.0f, 20.0f, "Test string qqqqqqqqqqqqqqqqqqqq ", Color.green);
      GL11.glEnable(GL11.GL_LIGHTING);
  
      // go back to the model view
      GL11.glEnable(GL11.GL_DEPTH_TEST);
    //  GL11.glDepthMask(true);
      disableOrthoView();
  }
  
  /**
   * Enables orthographic view.
   */
  public static void enableOrthoView(){                // Set Up An Ortho View   
      GL11.glMatrixMode(GL11.GL_PROJECTION);      // Select Projection
      GL11.glPushMatrix();      // Push The Matrix
      GL11.glLoadIdentity();        // Reset The Matrix
      GL11.glOrtho( 0, 800 , 600 , 0, -1, 1 );  // Select Ortho Mode
      GL11.glMatrixMode(GL11.GL_MODELVIEW);  // Select Modelview Matrix
      GL11.glPushMatrix();    // Push The Matrix
      GL11.glLoadIdentity();    // Reset The Matrix
  }
  
  /**
   * Disables the orthographic view.
   */
  public static void disableOrthoView() {
      GL11.glMatrixMode( GL11.GL_PROJECTION ); // Select Projection
      GL11.glPopMatrix();    // Pop The Matrix
      GL11.glMatrixMode( GL11.GL_MODELVIEW );  // Select Modelview
      GL11.glPopMatrix();    // Pop The Matrix
  }
  </code></pre>
  
  <p>The output looks like this: <a href="http://imageshack.us/photo/my-images/831/notext.jpg/" rel="nofollow">image 1</a>  (It seems to be textured with my water texture)</p>
  
  <p>Or like this, if I disable texturing before drawing the text: <a href="http://imageshack.us/photo/my-images/684/notext2.jpg/" rel="nofollow">image 2</a></p>
  
  <p>What am I doing wrong?</p>