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
[email protected]
http://lists.easysw.com/mailman/listinfo/fltk-opengl