All pastes #508700 Raw Edit

mcnasty

public text v1 · immutable
·published 2007-05-25 03:37 UTC
rendered paste body
 
      4 #include <GL/gl.h>
      5 #include <GL/glut.h> 
      6 #include <cstdlib>
      7 #include <stdio.h>
      8 //variable declaration
      9 GLuint texture;
     10 
     11 
     12 //end variable declaration
     13 //function to load raw file
     14 GLuint LoadTexture(const char * filename, int width, int height)
     15 {
     16         GLuint texture;
     17         unsigned char * data;
     18         FILE * file;
     19 
     20         //the following code will read IN our RAW file
     21         file = fopen("texture.raw", "rb");
     22         if(file == NULL) return 0;
     23         data = (unsigned char *)malloc(width * height * 3);
     24         fread(data, width * height * 3, 1, file);
     25         fclose(file);
     26         
     27         glGenTextures(1, &texture); //generate the texture with the loaded data
     28         glBindTexture(GL_TEXTURE_2D, texture); //bind the texture to its array
     29         glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_MODULATE); //set texture env parameters
     30 
     31         //here we set what textures to use and when, the MIN filter is which quality to show
     32         //when the texture is near the view, and the MAG filter is which quality to show
     33         //when the texture is far from view
     34 
     35         //the qualities are
     36         //GL_NEAREST , GL_LINEAR , GL_LINEAR_MIPMAP_NEAREST , GL_LINEAR_MIPMAP_LINEAR
     37         //and if you use extensions you can use anisotropic filtering
     38         glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
     39         glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
     40 
     41         //here set the parameter to repeat the texture instead of clamping it
     42         glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
     43         glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
     44 
     45         //generate the texture
 glTexImage2D(GL_TEXTURE_2D,0,GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
     47         free(data); //free the data, and memory...
     48         return texture; //return whether it was successfull or not
     49 }
     50 
     51 void FreeTexture(GLuint texture)
     52 {
     53         glDeleteTextures(1, &texture);
     54 }
     55 
     56 
     57 void square()
     58 {
     59         glBindTexture(GL_TEXTURE_2D, texture); //bind texture to our shape
     60         glBegin(GL_QUADS);
     61         glTexCoord2d(0.0,0.0); glVertex2d(-1.0,-1.0);
     62         glTexCoord2d(1.0,0.0); glVertex2d(+1.0, -1.0);
     63         glTexCoord2d(1.0,1.0); glVertex2d(+1.0,+1.0);
     64         glTexCoord2d(0.0,1.0); glVertex2d(-1.0, +1.0);
     65         glEnd();
     66 }
     67 
     68 
     69 void keyboard(unsigned char key, int x, int y)
     70 {
     71         if(key == 27)
     72         {
     73                 exit(0);
     74         }
     75 }
     76 
     77 //our display function, sets color, clears, color buffer, load identity matrix,// , set view and finally render the o        utput to the screen.
     78 void display(void)
     79 {
     80         glClearColor(0.0,0.0,0.0,1.0); //clear the color of the window
     81         glClear(GL_COLOR_BUFFER_BIT); //clear the color buffer
     82         glLoadIdentity(); //load the identity matrix
     83         gluLookAt(0.0,0.0,5.0,0.0,0.0,0.0,0.0,1.0,0.0); //set the view
     84         square();
     85         glFlush(); //flush rendering to the screen
     86 }
     88 //our reshape function scales our screen, and images, to the correct size format
     89 void reshape(int w, int h)
     90 {
     91         glViewport(0,0,(GLsizei)w,(GLsizei)h); //set viewport
     92         glMatrixMode(GL_PROJECTION); //select matrix mode
     93         glLoadIdentity(); //now load the matrix
     94         gluPerspective(60,(GLfloat)w/(GLfloat)h,1.0,100.0); //angle, aspect of ration, min view distance, max view di        stance
     95         glMatrixMode(GL_MODELVIEW);
     96 }
     97 
     98 
     99 //Main function
    100 int main(int argc, char **argv)
    101 {
    102         glutInit(&argc, argv); //initialize the program
    103         glutInitDisplayMode(GLUT_SINGLE); //set up a basic single  display buffer
    104         glutInitWindowSize(500,500); //set the width and height of the window
    105         glutInitWindowPosition(100,100); //set the position of the window
    106         glutCreateWindow("A basic Opengl Window"); //set the caption for the window
    107         glutDisplayFunc(display);//call the display function to draw our world
    108         glutIdleFunc(display);
    109         glutKeyboardFunc(keyboard);
    110         glutReshapeFunc(reshape);
    111         //load texture
    112         texture = LoadTexture("texture.raw", 256,256);
    113         glutMainLoop(); //initialize the Opengl loop cycle
    114         FreeTexture(texture);
    115         return 0;
    116 }