Load bmp image openGL C++. Window pops up with y axis and x axis but image does not display. Not sure if it is not being called or what?
#include <iostream>
//#include <math.h>
#include <GL/glut.h> // include GLUT library
#include <GL/gl.h>
#include <GL/glu.h>
#include <stdlib.h>
#include <Windows.h>
#include "RGBpixmap.h"
using namespace std;
//***********************************************************************************
void drawAxis()
{
//axis labels
glColor3f(0, 0, 0);
glRasterPos2i(159, 0);
glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_10, 'X');
glRasterPos2i(0, 159);
glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_10, 'Y');
glBegin(GL_LINES);
// draw line for x axis
glColor3f(0.0, 0.0, 0.0);
glVertex3f(-155.0, 0.0, 0.0);
glVertex3f(155.0, 0.0, 0.0);
// draw line for y axis
glColor3f(0.0, 0.0, 0.0);
glVertex3f(0.0, 155.0, 0.0);
glVertex3f(0.0, -155.0, 0.0);
glEnd();
}
GLuint loadBMP_custom(const char* imagepath)
{
GLuint loadBMP_custom(const char* imagepath);
GLuint image = loadBMP_custom("./Man.bmp");
// Data read from the header of the BMP file
unsigned char header[54]; // Each BMP file begins by a 54-bytes header
unsigned int dataPos; // Position in the file where the actual data begins
unsigned int width, height;
unsigned int imageSize; // = width*height*3
// Actual RGB data
unsigned char* data;
// Open the file
FILE* file = fopen(imagepath, "rb");
if (!file) { printf("Image could not be opened\n"); return 0; }
if (fread(header, 1, 54, file) != 54) { // If not 54 bytes read : problem
printf("Not a correct BMP file\n");
return false;
}
if (header[0] != 'B' || header[1] != 'M') {
printf("Not a correct BMP file\n");
return 0;
}
// Read ints from the byte array
dataPos = *(int*) & (header[0x0A]);
imageSize = *(int*) & (header[0x22]);
width = *(int*) & (header[0x12]);
height = *(int*) & (header[0x16]);
// Some BMP files are misformatted, guess missing information
if (imageSize == 0) imageSize = width * height * 3; // 3 : one byte for each Red, Green and Blue component
if (dataPos == 0) dataPos = 54; // The BMP header is
// Create a buffer
data = new unsigned char[imageSize];
// Read the actual data from the file into the buffer
fread(data, 1, imageSize, file);
//Everything is in memory now, the file can be closed
fclose(file);
// Create one OpenGL texture
GLuint textureID;
glGenTextures(1, &textureID);
// "Bind" the newly created texture : all future texture functions will modify this texture
glBindTexture(GL_TEXTURE_2D, textureID);
// Give the image to OpenGL
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_BGR_EXT, GL_UNSIGNED_BYTE, data);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
GLuint Texture = loadBMP_custom("Man.bmp");
}
//***********************************************************************************
void myInit()
{
glClearColor(1, 1, 1, 0); // specify a background clor: white
gluOrtho2D(-200, 200, -200, 200); // specify a viewing area
glPointSize(1); // change point size back to 1
}
//***********************************************************************************
void myDisplayCallback()
{
glClear(GL_COLOR_BUFFER_BIT); // draw the background
drawAxis();
glFlush(); // flush out the buffer contents
}
//***********************************************************************************
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitWindowSize(400, 400); // specify a window size
glutInitWindowPosition(100, 0); // specify a window position
glutCreateWindow("Drawing Window"); // create a titled window
myInit(); // setting up
GLuint loadBMP_custom(const char* imagepath);
glutDisplayFunc(myDisplayCallback); // register a callback
glutMainLoop(); // get into an infinite loop
return 0;
}