void QGLRenderThread::run()
{
    GLFrame->makeCurrent();
    GLInit();
    //LoadShader("../1_1_Waves_Geometry_Shader/Basic.vsh", "../1_1_Waves_Geometry_Shader/Basic.fsh");
    LoadShader("../1_1_Waves_Geometry_Shader/Basic.vsh","../1_1_Waves_Geometry_Shader/Basic.fsh","../1_1_Waves_Geometry_Shader/Basic.gsh");

    while (doRendering)
        {
        if(doResize)
            {
            GLResize(w, h);
            doResize = false;
            }

        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        glEnable(GL_DEPTH_TEST);
        glEnable(GL_CULL_FACE);
        glShadeModel(GL_SMOOTH);
        glEnable(GL_LIGHTING);
        glEnable(GL_LIGHT0);
        glEnable(GL_COLOR_MATERIAL);        
        glLightfv(GL_LIGHT0, GL_POSITION, lightPosition);
        glLoadIdentity();

        paintGL(); // render actual frame

        FrameCounter++;
        GLFrame->swapBuffers();

        msleep(16); // wait 16ms => about 60 FPS
        }
}
Beispiel #2
0
/*----------------------------------------------------------------------
 * FrameResizedCallback (generic callback)
 * is called when a frame is resized
 * params:
 *   + int frame : the resized frame id
 *   + int new_width, int new_height : the new frame dimension
 * return:
 *   + true if the frame has been redisplayed
 *   + false if not
 ----------------------------------------------------------------------*/
ThotBool FrameResizedCallback (int frame, int new_width, int new_height)
{
  /* check if the frame is valide */
  if (new_width <= 0 ||
      new_height <= 0 || 
      frame == 0 ||
      frame > MAX_FRAME ||
      FrameTable[frame].FrDoc == 0 ||
      documentDisplayMode[FrameTable[frame].FrDoc - 1] == NoComputedDisplay)
    /* frame should not be displayed */
    return FALSE;
  else if ( (FrameTable[frame].FrWidth - new_width == new_height - FrameTable[frame].FrHeight)
            || (abs(FrameTable[frame].FrWidth - new_width) == FrameTable[frame].WdScrollH->GetSize().GetHeight()) 
            || (abs(FrameTable[frame].FrHeight - new_height) == FrameTable[frame].WdScrollV->GetSize().GetWidth())
            )
    {
      /* prevent an infinite loop */
      ComputeScrollBar = FALSE;
    }
  else
    ComputeScrollBar = TRUE;
  TTALOGDEBUG_3( TTA_LOG_DIALOG, _T("FrameResizedCallback: new_width=%d new_height=%d (ComputeScrollBar=%s)"),
                 new_width, new_height, ComputeScrollBar ? _T("TRUE") : _T("FALSE"));

  /* store new frame size */
  FrameTable[frame].FrWidth  = new_width;
  FrameTable[frame].FrHeight = new_height;

  /* redraw */
  if (GL_prepare (frame))
    {
      /* prevent flickering*/
      GLResize (new_width, new_height, 0, 0);
      DefClip (frame, -1, -1, -1, -1);
      FrameRedraw (frame, new_width, new_height);
      GL_SwapEnable (frame);
      GL_Swap (frame);

      //#if !defined(_MACOS) && !defined(_WINDOWS)
      // we need to recalculate the glcanvas after the RESIZE event
      // because GTK&GL clear automaticaly the GL canvas just after the frame is resized.
      // (it appends only on some hardware opengl implementations on Linux)
      //g_NeedRedisplayAllTheFrame[frame] = TRUE;
      //#endif /* !defined(_MACOS) && !defined(_WINDOWS) */
    }
  /* Ok now allow next UpdateScrollbar to hide/show scrollbars 
   * At this point, UpdateScrollbar is not more called, so infinite loop cannot apend */
  ComputeScrollBar = TRUE;
  return TRUE;
}
void MyRenderThread::run()
{
    GLFrame->makeCurrent();
    GLInit();

    while (doRendering)
        {
        if (doResize)
            {
            GLResize(w, h);
            doResize = false;
            }
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        glLoadIdentity();

        paintGL(); // render actual frame

        FrameCounter++;
        GLFrame->swapBuffers();

        msleep(16); // wait 16ms => about 60 FPS
        }
}