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 } }
/*---------------------------------------------------------------------- * 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 } }