Jump to content
  • Advertisement
Sign in to follow this  

Textures and fonts

This topic is 4994 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

I was learning to display fonts in my program, but when I tried it, it didn't work that easily. The problem is that when I load the textures, fonts don't appear on the screen, and when I dont load the textures, fonts work well. At first, I load some textures to memory at the beginning of the program, like this:
  data = (unsigned char*) malloc(128*128*3*sizeof(unsigned char));
  if(!data) return 0;

  glGenTextures(1, &tekstuuri);
  glBindTexture(GL_TEXTURE_2D, tekstuuri);
  // Load .raw texture
  tiedosto = fopen("tekstuuri.raw", "rb");
  if(!tiedosto) return 0;
  fread(data, 3, 128*128, tiedosto);
  glTexImage2D(GL_TEXTURE_2D, 0, 3, 128, 128, 0, GL_RGB, GL_UNSIGNED_BYTE, data);

As you can see, I use .raw textures. And the code/function that makes the problem is glTexImage2D(....); I found that out by myself. The functions that deal with the fonts: (About the same code, as Nehe's tutorial 13)
void CreateFontti(void)
    HFONT font;
    HFONT oldfont;
    base = glGenLists(96);
    font = CreateFont(-24, 0, 0, 0, FW_BOLD, FALSE, FALSE, FALSE, 
                      ANTIALIASED_QUALITY, FF_DONTCARE | DEFAULT_PITCH, "Courier New");
    oldfont = (HFONT)SelectObject(hdc, font);
    wglUseFontBitmaps(hdc, 32, 96, base);
    SelectObject(hdc, oldfont);

void glPrint(char *text)
        glListBase(base - 32);
        glCallLists(strlen(text), GL_UNSIGNED_BYTE, text);

void KillFont(void)
    glDeleteLists(base, 96);

The question: How to make this working, with .raw textures?

Share this post

Link to post
Share on other sites
Ok, I managed to find out what was the problem. I called glEnable(GL_TEXTURE_2D);
when i had created the texture. And if I want to display some text, like my way, I need to disable texturing. So I think the problem is fixed if I call glEnable(GL_TEXTURE_2D); when i want to texture an object and after that i disable it, so i can display some text. Am I right, or totally wrong?

Share this post

Link to post
Share on other sites
Yes you are right. OpenGL is a state machine and therefore if you set something it will stay in that state until you set it to something different. Calling glEnable(GL_TEXTURE_2D) before you want texturing and glDisable(GL_TEXTURE_2D) before you want no texturing is the right thing to do.

Your fonts were probably rendering fine when you had texturing on but they just had the default texture co-ordinates and subsequently ended up the same colour as your background. You can texture map your fonts, as seen in Lesson 15.

Incidently a .raw file is not necessarily a texture, in fact it could be anything: it's just raw data, in this case the raw pixel data in RGB triplets. A .raw file could be a list of birthdays or distances to stars - it really doesn't matter :)

When you get further on with texturing you may want to have a look at some image file formats that allow for compression, this will obviously save you disk space. A nice basic one to start with is a Targa (.tga) file. I find the best place for file format information is Wotsit.

Hope some of this helped and happy coding! :)

Share this post

Link to post
Share on other sites
Sign in to follow this  

  • Advertisement

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!