Hi, I met a problem with GLWindow. My aim is to use GLWindow to rendering Video( a serial image). the problem is redraw looks doesn't work as I thought. it became very slow and noneupdated.
Basically, my way is inherit a class glCanvas from GLWindow and override the function of draw_overlay and draw. then, I have a thread to continuely read image from network and call redraw_overlay. Finally,draw_overlay should be called to refresh the image on the window. But I just noticed that window refreshed only when window has focus and mouse event on them. And the performance looks really bad. Can anyone give me a clue? Thanks first. ==================my code ================== #include <stdlib.h> #include <assert.h> #include "VTGLCanvas.h" #include <fltk/gl.h> #include <fltk/draw.h> using namespace fltk; VTGLCanvas::VTGLCanvas(int w,int h,const char *l) :GlWindow(0,0,w,h,l) { //mode(mode()|fltk::RGB|fltk::NO_AUTO_SWAP|fltk::NO_ERASE_OVERLAY); m_nWidth=nWidth; m_nHeight=nHeight; m_nBitCount=nBitCount; m_pFrameData=new char[nFrameSize+1280+1024]; } VTGLCanvas::~VTGLCanvas() { } void VTGLCanvas::ThreadProcMain(void) { while (!m_bWantToStop) { mySleep(30); //////////////////// { CAVAutoLock lock(&m_CritSecList); m_pFrameData=readfromnetwork(); redraw_overlay(); } } } void VTGLCanvas::draw() { } void VTGLCanvas::draw_overlay() { // the valid() property may be used to avoid reinitializing your // GL transformation for each redraw: if (!valid()) { valid(1); glLoadIdentity(); glViewport(0,0,w(),h()); } // glBegin(); glClearColor(0,0,0,0); glClear(GL_COLOR_BUFFER_BIT); CAVAutoLock lock(&m_CritSecData); glDrawPixels(m_nWidth,m_nHeight,GL_BGR_EXT,GL_UNSIGNED_BYTE,m_pFrameData); swap_buffers(); // glEnd(); /* glTexSubImage2D(GL_TEXTURE_2D,0,0,0,m_nWidth,m_nHeight,GL_RGB,GL_UNSIGNED_BYTE,m_pFrameData); */ } _______________________________________________ fltk-opengl mailing list fltk-opengl@easysw.com http://lists.easysw.com/mailman/listinfo/fltk-opengl