Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- *
- */
- #include <time.h>
- #include <stdio.h>
- #include <windows.h>
- #include <GL/gl.h>
- #include <GL/glut.h>
- /* globals */
- time_t g_time;
- time_t g_begintime;
- //GLuint g_quad; // quad display list for screen "back buffer"
- GLuint g_tex; // texture for screen "back buffer" (FBO soon)
- GLuint g_width;
- GLuint g_height;
- unsigned char* g_screenpixels; // array of pixels on the screen
- #define NUMCHANNELS 4
- /* print errors from OpenGL */
- void printglerror( )
- {
- int error = glGetError();
- if (error != GL_NO_ERROR)
- printf("An OpenGL error has occured: %s\n", gluErrorString(error));
- }
- /* set the color of the pixels to red */
- void redpixels( void )
- {
- for( GLuint y=0; y<g_height; y++ )
- {
- for( GLuint x=0; x<g_width; x++ )
- {
- g_screenpixels[y*g_width*NUMCHANNELS+x*NUMCHANNELS+0]=255;
- g_screenpixels[y*g_width*NUMCHANNELS+x*NUMCHANNELS+1]=0;
- g_screenpixels[y*g_width*NUMCHANNELS+x*NUMCHANNELS+2]=0;
- g_screenpixels[y*g_width*NUMCHANNELS+x*NUMCHANNELS+3]=255;
- }
- }
- }
- /* create display lists here */
- //void buildlists( )
- //{
- // g_quad = glGenLists(1);
- //
- // // textured quad for screen
- // glNewList(g_quad,GL_COMPILE);
- // glLoadIdentity( );
- // glTranslatef( 0.0f,0.0f,0.0f );
- // glBegin(GL_QUADS);
- // glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 0.0f);
- // glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 0.0f);
- // glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f,-1.0f, 0.0f);
- // glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f,-1.0f, 0.0f);
- // glEnd();
- // glEndList();
- //}
- /* initialize variables and gl properties */
- void init ( )
- {
- // begin timer
- g_begintime = clock( );
- g_time = g_begintime;
- // gl preparations
- glShadeModel( GL_FLAT );
- glClearColor( 0.0f, 0.0f, 0.0f, 0.5f );
- glClearDepth( 1.0f );
- glEnable( GL_DEPTH_TEST );
- glDepthFunc( GL_LEQUAL );
- glEnable ( GL_COLOR_MATERIAL );
- glHint( GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST );
- // prepare backbuffer texture
- glEnable( GL_TEXTURE_2D );
- glGenTextures( 1, &g_tex );
- glBindTexture( GL_TEXTURE_2D, g_tex );
- glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT ); // tried here as well
- glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT );
- glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
- glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
- g_screenpixels = new unsigned char[g_width*g_height*NUMCHANNELS];
- redpixels( );
- glTexImage2D( GL_TEXTURE_2D, 0, NUMCHANNELS, g_width, g_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, g_screenpixels);
- }
- /* frame render */
- void display( void )
- {
- // update time
- double elapsed = difftime( clock( ),g_time )/1000.0;
- g_time = clock( );
- // clear the screen
- glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
- // draw the backbuffer quad
- glBindTexture( GL_TEXTURE_2D, g_tex );
- glLoadIdentity( );
- glTranslatef( 0.0f,0.0f,0.0f );
- glScalef( 0.5f, 0.5f, 0.5f );
- glBegin(GL_QUADS);
- glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f,-1.0f, 0.0f);
- glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 0.0f);
- glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 0.0f);
- glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f,-1.0f, 0.0f);
- glEnd();
- // swap to screen
- glutSwapBuffers( );
- }
- /* window resize */
- void reshape( int w, int h )
- {
- g_width = w;
- g_height = h;
- delete g_screenpixels;
- g_screenpixels = new unsigned char[g_width*g_height*NUMCHANNELS];
- redpixels( );
- glBindTexture( GL_TEXTURE_2D, g_tex );
- glTexImage2D( GL_TEXTURE_2D, 0, NUMCHANNELS, g_width, g_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, g_screenpixels);
- glViewport( 0, 0, w, h );
- glMatrixMode( GL_PROJECTION );
- glLoadIdentity( );
- gluOrtho2D(-1.0,1.0,-1.0,1.0);
- glMatrixMode( GL_MODELVIEW );
- glLoadIdentity( );
- }
- /* keyboard callback */
- void keyboard( unsigned char key, int x, int y )
- {
- switch( key ) {
- case VK_ESCAPE:
- exit ( 0 );
- default:
- break;
- }
- }
- /* arrow key callback */
- void arrow_keys( int a_keys, int x, int y ) // Create Special Function (required for arrow keys)
- {
- switch( a_keys ) {
- case GLUT_KEY_UP:
- glutFullScreen( );
- break;
- case GLUT_KEY_DOWN:
- g_width = 512;
- g_height = 512;
- glutReshapeWindow( g_width, g_height );
- break;
- default:
- break;
- }
- }
- /* main is main */
- int main ( int argc, char** argv )
- {
- g_width = 512;
- g_height = 512;
- glutInit( &argc, argv );
- init( );
- glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE );
- glutInitWindowSize( g_width, g_height );
- glutCreateWindow( "TahoeVis" );
- //buildlists( );
- glutDisplayFunc( display );
- glutIdleFunc( display );
- glutReshapeFunc( reshape );
- glutKeyboardFunc( keyboard );
- glutSpecialFunc( arrow_keys );
- glutMainLoop( );
- return 0;
- }
Add Comment
Please, Sign In to add comment