freeglut_display.c
上传用户:gb3593
上传日期:2022-01-07
资源大小:3028k
文件大小:3k
源码类别:

游戏引擎

开发平台:

Visual C++

  1. /*
  2.  * freeglut_display.c
  3.  *
  4.  * Display message posting, context buffer swapping.
  5.  *
  6.  * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.
  7.  * Written by Pawel W. Olszta, <olszta@sourceforge.net>
  8.  * Creation date: Fri Dec 3 1999
  9.  *
  10.  * Permission is hereby granted, free of charge, to any person obtaining a
  11.  * copy of this software and associated documentation files (the "Software"),
  12.  * to deal in the Software without restriction, including without limitation
  13.  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
  14.  * and/or sell copies of the Software, and to permit persons to whom the
  15.  * Software is furnished to do so, subject to the following conditions:
  16.  *
  17.  * The above copyright notice and this permission notice shall be included
  18.  * in all copies or substantial portions of the Software.
  19.  *
  20.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  21.  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  22.  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
  23.  * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
  24.  * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  25.  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  26.  */
  27. #include <GL/freeglut.h>
  28. #include "freeglut_internal.h"
  29. /* -- INTERFACE FUNCTIONS -------------------------------------------------- */
  30. /*
  31.  * Marks the current window to have the redisplay performed when possible...
  32.  */
  33. void FGAPIENTRY glutPostRedisplay( void )
  34. {
  35.     FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutPostRedisplay" );
  36.     FREEGLUT_EXIT_IF_NO_WINDOW ( "glutPostRedisplay" );
  37.     fgStructure.CurrentWindow->State.Redisplay = GL_TRUE;
  38. }
  39. /*
  40.  * Swaps the buffers for the current window (if any)
  41.  */
  42. void FGAPIENTRY glutSwapBuffers( void )
  43. {
  44.     FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSwapBuffers" );
  45.     FREEGLUT_EXIT_IF_NO_WINDOW ( "glutSwapBuffers" );
  46.     /*
  47.      * "glXSwapBuffers" already performs an implicit call to "glFlush". What
  48.      * about "SwapBuffers"?
  49.      */
  50.     glFlush( );
  51.     if( ! fgStructure.CurrentWindow->Window.DoubleBuffered )
  52.         return;
  53. #if TARGET_HOST_POSIX_X11
  54.     glXSwapBuffers( fgDisplay.Display, fgStructure.CurrentWindow->Window.Handle );
  55. #elif TARGET_HOST_MS_WINDOWS
  56.     SwapBuffers( fgStructure.CurrentWindow->Window.Device );
  57. #endif
  58.     /* GLUT_FPS env var support */
  59.     if( fgState.FPSInterval )
  60.     {
  61.         GLint t = glutGet( GLUT_ELAPSED_TIME );
  62.         fgState.SwapCount++;
  63.         if( fgState.SwapTime == 0 )
  64.             fgState.SwapTime = t;
  65.         else if( t - fgState.SwapTime > fgState.FPSInterval )
  66.         {
  67.             float time = 0.001f * ( t - fgState.SwapTime );
  68.             float fps = ( float )fgState.SwapCount / time;
  69.             fprintf( stderr,
  70.                      "freeglut: %d frames in %.2f seconds = %.2f FPSn",
  71.                      fgState.SwapCount, time, fps );
  72.             fgState.SwapTime = t;
  73.             fgState.SwapCount = 0;
  74.         }
  75.     }
  76. }
  77. /*
  78.  * Mark appropriate window to be displayed
  79.  */
  80. void FGAPIENTRY glutPostWindowRedisplay( int windowID )
  81. {
  82.     SFG_Window* window;
  83.     FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutPostWindowRedisplay" );
  84.     window = fgWindowByID( windowID );
  85.     freeglut_return_if_fail( window );
  86.     window->State.Redisplay = GL_TRUE;
  87. }
  88. /*** END OF FILE ***/