Guest User

Untitled

a guest
Apr 24th, 2018
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.70 KB | None | 0 0
  1. /*
  2.  *
  3.  */
  4.  
  5. #include <time.h>
  6. #include <stdio.h>
  7. #include <windows.h>
  8.  
  9. #include <GL/gl.h>
  10. #include <GL/glut.h>
  11.  
  12. /* globals */
  13. time_t g_time;
  14. time_t g_begintime;
  15.  
  16. //GLuint g_quad; // quad display list for screen "back buffer"
  17. GLuint g_tex; // texture for screen "back buffer" (FBO soon)
  18.  
  19. GLuint g_width;
  20. GLuint g_height;
  21.  
  22. unsigned char* g_screenpixels; // array of pixels on the screen
  23.  
  24. #define NUMCHANNELS     4
  25.  
  26. /* print errors from OpenGL */
  27. void printglerror( )
  28. {
  29.     int error = glGetError();
  30.     if (error != GL_NO_ERROR)
  31.         printf("An OpenGL error has occured: %s\n", gluErrorString(error));
  32. }
  33.  
  34. /* set the color of the pixels to red */
  35. void redpixels( void )
  36. {
  37.     for( GLuint y=0; y<g_height; y++ )
  38.     {
  39.         for( GLuint x=0; x<g_width; x++ )
  40.         {
  41.             g_screenpixels[y*g_width*NUMCHANNELS+x*NUMCHANNELS+0]=255;
  42.             g_screenpixels[y*g_width*NUMCHANNELS+x*NUMCHANNELS+1]=0;
  43.             g_screenpixels[y*g_width*NUMCHANNELS+x*NUMCHANNELS+2]=0;
  44.             g_screenpixels[y*g_width*NUMCHANNELS+x*NUMCHANNELS+3]=255;
  45.         }
  46.     }
  47. }
  48.  
  49. /* create display lists here */
  50. //void buildlists( )
  51. //{
  52. //  g_quad = glGenLists(1);
  53. //
  54. //  // textured quad for screen
  55. //  glNewList(g_quad,GL_COMPILE);
  56. //      glLoadIdentity( );
  57. //      glTranslatef( 0.0f,0.0f,0.0f );
  58. //      glBegin(GL_QUADS);
  59. //          glTexCoord2f(0.0f, 1.0f);   glVertex3f(-1.0f, 1.0f, 0.0f);
  60. //          glTexCoord2f(1.0f, 1.0f);   glVertex3f( 1.0f, 1.0f, 0.0f);
  61. //          glTexCoord2f(1.0f, 0.0f);   glVertex3f( 1.0f,-1.0f, 0.0f);
  62. //          glTexCoord2f(0.0f, 0.0f);   glVertex3f(-1.0f,-1.0f, 0.0f);
  63. //      glEnd();
  64. //  glEndList();
  65. //}
  66.  
  67. /* initialize variables and gl properties */
  68. void init ( )
  69. {
  70.     // begin timer
  71.     g_begintime = clock( );
  72.     g_time = g_begintime;
  73.    
  74.     // gl preparations
  75.     glShadeModel( GL_FLAT );
  76.     glClearColor( 0.0f, 0.0f, 0.0f, 0.5f );
  77.     glClearDepth( 1.0f );
  78.     glEnable( GL_DEPTH_TEST );
  79.     glDepthFunc( GL_LEQUAL );
  80.     glEnable ( GL_COLOR_MATERIAL );
  81.     glHint( GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST );
  82.    
  83.     // prepare backbuffer texture
  84.     glEnable( GL_TEXTURE_2D );
  85.     glGenTextures( 1, &g_tex );
  86.     glBindTexture( GL_TEXTURE_2D, g_tex );
  87.     glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT ); // tried here as well
  88.     glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT );
  89.     glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
  90.     glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
  91.  
  92.     g_screenpixels = new unsigned char[g_width*g_height*NUMCHANNELS];
  93.     redpixels( );
  94.  
  95.     glTexImage2D( GL_TEXTURE_2D, 0, NUMCHANNELS, g_width, g_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, g_screenpixels);
  96. }
  97.  
  98. /* frame render */
  99. void display( void )
  100. {
  101.     // update time
  102.     double elapsed = difftime( clock( ),g_time )/1000.0;
  103.     g_time = clock( );
  104.  
  105.     // clear the screen
  106.     glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
  107.  
  108.     // draw the backbuffer quad
  109.     glBindTexture( GL_TEXTURE_2D, g_tex );
  110.     glLoadIdentity( );
  111.     glTranslatef( 0.0f,0.0f,0.0f );
  112.     glScalef( 0.5f, 0.5f, 0.5f );
  113.     glBegin(GL_QUADS);
  114.         glTexCoord2f(0.0f, 0.0f);   glVertex3f(-1.0f,-1.0f, 0.0f);
  115.         glTexCoord2f(0.0f, 1.0f);   glVertex3f(-1.0f, 1.0f, 0.0f);
  116.         glTexCoord2f(1.0f, 1.0f);   glVertex3f( 1.0f, 1.0f, 0.0f);
  117.         glTexCoord2f(1.0f, 0.0f);   glVertex3f( 1.0f,-1.0f, 0.0f);
  118.     glEnd();
  119.  
  120.     // swap to screen
  121.     glutSwapBuffers( );
  122. }
  123.  
  124. /* window resize */
  125. void reshape( int w, int h )
  126. {
  127.     g_width = w;
  128.     g_height = h;
  129.  
  130.     delete g_screenpixels;
  131.     g_screenpixels = new unsigned char[g_width*g_height*NUMCHANNELS];
  132.     redpixels( );
  133.  
  134.     glBindTexture( GL_TEXTURE_2D, g_tex );
  135.     glTexImage2D( GL_TEXTURE_2D, 0, NUMCHANNELS, g_width, g_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, g_screenpixels);
  136.  
  137.     glViewport( 0, 0, w, h );
  138.     glMatrixMode( GL_PROJECTION );
  139.     glLoadIdentity( );
  140.     gluOrtho2D(-1.0,1.0,-1.0,1.0);
  141.     glMatrixMode( GL_MODELVIEW );
  142.     glLoadIdentity( );
  143. }
  144.  
  145. /* keyboard callback */
  146. void keyboard( unsigned char key, int x, int y )
  147. {
  148.     switch( key ) {
  149.         case VK_ESCAPE:
  150.             exit ( 0 );
  151.         default:
  152.             break;
  153.     }
  154. }
  155.  
  156. /* arrow key callback */
  157. void arrow_keys( int a_keys, int x, int y ) // Create Special Function (required for arrow keys)
  158. {
  159.     switch( a_keys ) {
  160.         case GLUT_KEY_UP:
  161.             glutFullScreen( );
  162.             break;
  163.         case GLUT_KEY_DOWN:
  164.             g_width = 512;
  165.             g_height = 512;
  166.             glutReshapeWindow( g_width, g_height );
  167.             break;
  168.         default:
  169.             break;
  170.     }
  171. }
  172.  
  173. /* main is main */
  174. int main ( int argc, char** argv )
  175. {
  176.     g_width = 512;
  177.     g_height = 512;
  178.  
  179.     glutInit( &argc, argv );
  180.     init( );
  181.    
  182.     glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE );
  183.     glutInitWindowSize( g_width, g_height );
  184.     glutCreateWindow( "TahoeVis" );
  185.     //buildlists( );
  186.  
  187.     glutDisplayFunc( display );
  188.     glutIdleFunc( display );
  189.     glutReshapeFunc( reshape );
  190.     glutKeyboardFunc( keyboard );
  191.     glutSpecialFunc( arrow_keys );
  192.     glutMainLoop( );
  193.  
  194.     return 0;
  195. }
Add Comment
Please, Sign In to add comment