FLTK logo

Re: Program becomes very slow after some time running

FLTK matrix user chat room
(using Element browser app)   FLTK gitter user chat room   GitHub FLTK Project   FLTK News RSS Feed  
  FLTK Apps      FLTK Library      Forums      Links     Login 
 All Forums  |  Back to fltk.opengl  ]
 
Previous Message ]New Message | Reply ]Next Message ]

Re: Program becomes very slow after some time running yin Jan 15, 2012  
 
//VideoGLWin.cpp
#include "StdAfx.h"
#include "VideoGLWin.h"

bool VideoGlWin::initOpenGL(void)
{
	if(m_openGLInitialized)
		return false;

	//initialize matrices
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	gluOrtho2D(0,1,0,1);

	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();
	glViewport(0,0,w(),h());

	m_openGLInitialized=true;

	return m_openGLInitialized;
}
void VideoGlWin::ShowAppMessage(void)
{
	glDisable(GL_TEXTURE_2D);
	glColor3f(0.618,0.618,0.618);
	glRasterPos2f(-0.75,0.75);
	gl_font(1,42);
	gl_draw("Video Player 1.0");	 
	
	const GLubyte* OpenGLVersion =glGetString(GL_VERSION);
	const GLubyte* OpenGLMaker = glGetString(GL_VENDOR); 
	const GLubyte* OpenGLRender = glGetString(GL_RENDERER); 
	char str[255];

	gl_font(1,14);

	//OpenGL information
	sprintf(str,"OpenGL Version: %s",OpenGLVersion);
	glRasterPos2f(-1.0,-0.5);gl_draw(str);	 

	sprintf(str,"OpenGL Maker: %s",OpenGLMaker);
	glRasterPos2f(-1.0,-0.55);gl_draw(str);	 
	
	sprintf(str,"OpenGL Render: %s",OpenGLRender);
	glRasterPos2f(-1.0,-0.60);gl_draw(str);	 

    //FLTK information
	//sprintf(str,"FLTK Version:
%d.%d.%d",FL_MAJOR_VERSION,FL_MINOR_VERSION,FL_PATCH_VERSION);
	sprintf(str,"FLTK Version: %4.3f",Fl::version());
	glRasterPos2f(-1.0,-0.70);gl_draw(str);

	//OpenCV version
	const char* opencv_libraries = 0;
	const char* addon_modules = 0;
	cvGetModuleInfo( 0, &opencv_libraries,&addon_modules );
	sprintf(str,"OpenCV: %s",opencv_libraries);
	glRasterPos2f(-1.0,-0.80);gl_draw(str);
	sprintf(str,"Add-on Modules: %s\n",addon_modules);
	glRasterPos2f(-1.0,-0.85);gl_draw(str);

}


///////////////////////////////////////////////////
// use texture to display a picture
///////////////////////////////////////////////////
bool VideoGlWin::upload_iplimage (const IplImage *img,GLuint& tex)
{
    GLint format, type;

    /* Set pixel format */
    switch(img->nChannels)
    {
        case 1:
            format = GL_LUMINANCE;
            break;
        case 3:
            format = GL_BGR_EXT;
            break;
        case 4:
            format = GL_BGRA_EXT;
        default:
            return 0;
    }

    /* Set pixel type */
    switch(img->depth)
    {
        case IPL_DEPTH_8U:
            type = GL_UNSIGNED_BYTE;
            break;
        case IPL_DEPTH_8S:
            type = GL_BYTE;
            break;
        case IPL_DEPTH_16U:
            type = GL_UNSIGNED_SHORT;
            break;
        case IPL_DEPTH_16S:
            type = GL_SHORT;
            break;
        case IPL_DEPTH_32S:
            type = GL_INT;
            break;
        case IPL_DEPTH_32F:
            type = GL_FLOAT;
            break;
        case IPL_DEPTH_64F:
            /* Not supported by OpenGL */
        default:
            return 0;
    }

	/* Create texture object */
    glGenTextures(1, &tex);
    glBindTexture(GL_TEXTURE_2D, tex);

	/* If necessary, specify texture parameters here */	
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);


    /* Now upload pixels */
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA,
                img->width, img->height, 0,
                format, type, img->imageData);

    return true;
}


void VideoGlWin::draw()
{
// the valid() property may be used to avoid reinitializing your
// GL transformation for each redraw:
  if (!valid()) {
    valid(1);
	glClear(GL_COLOR_BUFFER_BIT);
  }

  if(!m_processedImage)  
	  ShowAppMessage();
  else
  {
	  double ox,oy;
	  double x1,y1,x2,y2,x3,y3,x4,y4;
	  ox=xpan_ratio*(1.0+zoom_ratio); oy=-ypan_ratio*(1.0+zoom_ratio);
	  x1=ox-zoom_ratio; y1=oy-zoom_ratio;
	  x2=ox+zoom_ratio; y2=oy-zoom_ratio;
	  x3=ox+zoom_ratio; y3=oy+zoom_ratio;
	  x4=ox-zoom_ratio; y4=oy+zoom_ratio;

	  glEnable(GL_TEXTURE_2D);
	  upload_iplimage(m_processedImage,textureName);
	  glBindTexture(GL_TEXTURE_2D, textureName);  
	  glBegin( GL_QUADS );
	    glTexCoord2d(0.0,0.0); glVertex2d(x1,y1);
	    glTexCoord2d(1.0,0.0); glVertex2d(x2,y2);
	    glTexCoord2d(1.0,1.0); glVertex2d(x3,y3);
  	    glTexCoord2d(0.0,1.0); glVertex2d(x4,y4);
	  glEnd();
  }



}
Direct Link to Message ]
 
     
Previous Message ]New Message | Reply ]Next Message ]
 
 

Comments are owned by the poster. All other content is copyright 1998-2024 by Bill Spitzak and others. This project is hosted by The FLTK Team. Please report site problems to 'erco@seriss.com'.