//================================================================= // showppm.cpp //================================================================= // #include "stdafx.h" #include #include #include #include "showPPM.h" GLubyte *FBuffer; int Width, Height; void TexturePPM(char* PPMfileName) // Doesn't read ascii ppm files (P3) yet { // LOAD FROM A BINARY .PPM FILE int Color; int NumComponents; char Buffer[100]; if(PPMfileName == NULL) { fprintf(stderr, "ERROR: No file name\n"); exit(1); } FILE* FilePtr = fopen(PPMfileName, "rb"); if (FilePtr==NULL) { fprintf(stderr, "ERROR: unable to open %s!\n",PPMfileName); exit(1); } fgets(Buffer,99,FilePtr); if(Buffer[0] != 'P' || Buffer[1] != '6') { fprintf(stderr, "Not a binary ppm file: %s\n", PPMfileName); exit(1); } if(Buffer[2] == 'A') NumComponents = 4; // Special type of PPM file. No relevant to us. else NumComponents = 3; // This is our case Buffer[0] = getc(FilePtr); while(Buffer[0] == '#' || Buffer[0] == '\n') { ungetc(Buffer[0], FilePtr); fgets(Buffer,99,FilePtr); Buffer[0] = getc(FilePtr); } ungetc(Buffer[0], FilePtr); fscanf(FilePtr, "%d %d %d\n", &Width, &Height, &Color); if(Color != 255) { fprintf(stderr, "File does not have True color?\n"); exit(1); } printf("Reading %dx%d image (%d Component) from [%s]. . .\n", Width, Height, NumComponents, PPMfileName); int LineWidth = Width*NumComponents; int NumBytes = Width*Height*NumComponents; GLubyte* fBuffer = new GLubyte[NumBytes]; fread(fBuffer, NumBytes, 1, FilePtr); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, Width, Height, 0, GL_RGB, GL_UNSIGNED_BYTE, fBuffer); fclose(FilePtr); return; }