nanogui: regarding banner lagging


Previous by date: 6 Feb 2006 10:42:40 +0000 Re: Images not drawn (FLTK+nxlib app with nano-X), Martin Kajdas
Next by date: 6 Feb 2006 10:42:40 +0000 Re: Images not drawn (FLTK+nxlib app with nano-X), Martin Kajdas
Previous in thread: 6 Feb 2006 10:42:40 +0000 regarding banner lagging, sai baba
Next in thread:

Subject: Re: [nanogui] regarding banner lagging
From: Michael Bogaerts ####@####.####
Date: 6 Feb 2006 10:42:40 +0000
Message-Id: <1139222272.7920.16.camel@ENGLINUX.tokheim.com>

Hi,

as far as i can see you keep onloading the images all the time.

what i would do i create an offscreen pixmap for each image(keeping it
in memory) and copy it onto the screen when required. the copying
doesn't not take that much time. i beleive that the image loading is
causing the lag

Regards

Michael

On Mon, 2006-02-06 at 00:36 -0800, sai baba wrote:
> hi ,
>   i have implemented banner with u r idea of 2
> offscreen buffers .Now i have lagging problem with the
> banner application when i am loading the buffer with
> the below given loop.
> 
> Here is the buffer fill up routine i implemented(for
> scrolling the bmp image from left to right). 
> 
> 
> 
> GR_IMAGE_ID image_id;
> 	GR_IMAGE_INFO info;
> 	GR_IMAGE_ID p;
> 	int x;//for showing how much buffer filled when the
> image is completed
> 	if ( fileptr > nofiles ) //fileptr for keeping track
> of the bmp file name
> 		fileptr = 0 ; //if it ends start from first
> 	
> 	
> 	if ( partial == 1 )  { //partial for image is loaded
> partial into buffer or full
> 		if ( fileptr > nofiles ) 
> 			fileptr = 0 ;
> 							image_id = GrLoadImageFromFile(filenames [
> fileptr ] ,0);
> 							GrGetImageInfo(image_id, &info);
> 							p = GrNewPixmap(info.width,h,0);
> 							if ( width >=  w  ) {
> 
> 									if ( width == w ) { //w,h are the width and
> height of the banner window in nanox
> 											partial = 0;
> 											fileptr ++;
> 									}
> 									GrDrawImageToFit( p , gc,0,0,info.width,h,
> image_id);// image to be scaled to h  
> 									GrCopyArea(offscreen, gc, 0,0,w,h,
> p,width-w,0,MWROP_SRCCOPY);
> 									width -= w;
> 									GrDestroyWindow(p);
> 									GrFreeImage(image_id);
> 									return;
> 							}
> 							else { 
> 									GrDrawImageToFit( p , gc,0,0,info.width,h,
> image_id);
> 									GrCopyArea(offscreen, gc,w-width ,0,width,h,
> p,0,0,MWROP_SRCCOPY);
> 
> 									GrFreeImage(image_id);
> 									x =  width ;
> 									fileptr ++;
> 									partial = 0 ;
> 									width = 0;
> 									GrDestroyWindow(p); // new code on 02/02
> 
> 									while ( x <= w ) {
> 											if ( fileptr > nofiles )
> 													fileptr = 0 ;
> 											image_id = GrLoadImageFromFile(filenames [
> fileptr ] ,0);
> 										//	GrDrawImageToFit( p ,
> gc,0,0,info.width,h, image_id);
> 											GrGetImageInfo(image_id, &info);
> 									        p=GrNewPixmap(info.width,h,0); // new
> code on 02/02
> 										
> GrDrawImageToFit(p,gc,0,0,info.width,h,image_id);
> 
> 											if (info.width >= ( w - x ) ) {
> 													GrCopyArea(offscreen, gc,0 ,0, w - x ,h,
> p,info.width-(w-x),0,MWROP_SRCCOPY);
> 													if ( info.width > ( w - x ) ) {
> 															partial = 1;
> 															width = info.width - (w - x) ;
> 													}									
> 													else
> 														fileptr ++;
> 
> 													GrDestroyWindow(p);
> 													GrFreeImage(image_id);
> 													return;
> 											}
> 											else {
> 
> 													GrCopyArea(offscreen, gc,w-(x+info.width)
> ,0,info.width,h, p,0,0,MWROP_SRCCOPY);
> 													GrFreeImage(image_id);
> 													x += info.width; 
> 													fileptr ++;
> 													GrDestroyWindow(p);
> 											}
> 									}
> 							}
> 	}
> 	else if ( partial == 0 ) { 
> 			
> 		if ( fileptr > nofiles ) 
> 			fileptr = 0 ;
> 							image_id = GrLoadImageFromFile(filenames [
> fileptr ] ,0);
> 							GrGetImageInfo(image_id, &info);
> 							p = GrNewPixmap(info.width,h,0);
> 							if (info.width >=  w ) {
> 
> 									if ( info.width > w ) {
> 											partial = 1;
> 											width = info.width - w;
> 									}
> 									else 
> 										fileptr++;
> 									
> 									GrDrawImageToFit( p , gc,0,0,info.width,h,
> image_id);// image to be scaled to h  
> 									GrCopyArea(offscreen, gc, 0,0,w,h,
> p,width,0,MWROP_SRCCOPY);
> 									GrDestroyWindow(p);
> 									GrFreeImage(image_id);
> 									return;
> 							}
> 							else { 
> 									GrDrawImageToFit( p , gc,0,0,info.width,h,
> image_id);
> 									GrCopyArea(offscreen, gc,w-info.width
> ,0,info.width ,h, p,0,0,MWROP_SRCCOPY);
> 									GrFreeImage(image_id);
> 									x = info.width ;
> 									fileptr ++;
> 									GrDestroyWindow(p); // new code on 02/02
> 
> 									while ( x <= w ) {
> 											if ( fileptr > nofiles )
> 													fileptr = 0 ;
> 											image_id = GrLoadImageFromFile(filenames [
> fileptr ] ,0);
> 											//GrDrawImageToFit( p ,
> gc,0,0,info.width,h, image_id);
> 											GrGetImageInfo(image_id, &info);
> 											p=GrNewPixmap(info.width,h,0); // new code
> on 02/02
> 											GrDrawImageToFit(p , gc , 0 , 0
> ,info.width,h,image_id);
> 
> 											if (info.width >= ( w - x ) ) {
> 													GrCopyArea(offscreen, gc,0 ,0, w - x ,h,
> p,info.width-(w-x),0,MWROP_SRCCOPY);
> 													if ( info.width > ( w - x ) ) {
> 															partial = 1;
> 															width = info.width - ( w - x ) ;
> 													}
> 													else 
> 														fileptr++;
> 													GrDestroyWindow(p);
> 													GrFreeImage(image_id);
> 													return;
> 											}
> 											else {
> 
> 													GrCopyArea(offscreen, gc,w-(x+info.width)
> ,0,  info.width,h, p,0,0,MWROP_SRCCOPY);
> 													GrFreeImage(image_id);
> 													x += info.width; 
> 													fileptr ++;
> 													GrDestroyWindow(p);
> 											}
> 	}
>    }
>  }
> }
> 	  
>   
> 
> Is there any other way of implementing this with some
> less processing .
> 
> Thanking you
> 
> __________________________________________________
> Do You Yahoo!?
> Tired of spam?  Yahoo! Mail has the best spam protection around 
> http://mail.yahoo.com 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: ####@####.####
> For additional commands, e-mail: ####@####.####
> 


Previous by date: 6 Feb 2006 10:42:40 +0000 Re: Images not drawn (FLTK+nxlib app with nano-X), Martin Kajdas
Next by date: 6 Feb 2006 10:42:40 +0000 Re: Images not drawn (FLTK+nxlib app with nano-X), Martin Kajdas
Previous in thread: 6 Feb 2006 10:42:40 +0000 regarding banner lagging, sai baba
Next in thread:


Powered by ezmlm-browse 0.20.