Search code examples
c++opengltexturesglutbmp

How to load a bmp on GLUT to use it as a texture?


I've been searching all around for a simple solution to add sprites to my OpenGl GLUT simple moon lander game in c++ and it appears I must use bmp's since they're easiest to load and use them as textures on a rectangle.

How exactly can I load the bmp's as textures though?


Solution

  • Look my simple c implementation function to load texture.

    GLuint LoadTexture( const char * filename )
    {
      GLuint texture;
      int width, height;
      unsigned char * data;
    
      FILE * file;
      file = fopen( filename, "rb" );
    
      if ( file == NULL ) return 0;
      width = 1024;
      height = 512;
      data = (unsigned char *)malloc( width * height * 3 );
      //int size = fseek(file,);
      fread( data, width * height * 3, 1, file );
      fclose( file );
    
      for(int i = 0; i < width * height ; ++i)
      {
        int index = i*3;
        unsigned char B,R;
        B = data[index];
        R = data[index+2];
    
        data[index] = R;
        data[index+2] = B;
      }
    
      glGenTextures( 1, &texture );
      glBindTexture( GL_TEXTURE_2D, texture );
      glTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE,GL_MODULATE );
      glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST );
    
      glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,GL_LINEAR );
      glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S,GL_REPEAT );
      glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T,GL_REPEAT );
      gluBuild2DMipmaps( GL_TEXTURE_2D, 3, width, height,GL_RGB, GL_UNSIGNED_BYTE, data );
      free( data );
    
      return texture;
    }
    

    Above function returns the texture data. Store the texture data in variable

    GLuint texture;
    texture= LoadTexture( "your_image_name.bmp" );
    

    Now you can bind the texture using glBindTexture

    glBindTexture (GL_TEXTURE_2D, texture);