[<<] [<] Page 1 of 1 [>] [>>] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Subject:
regarding banner lagging
From: sai baba ####@####.#### Date: 6 Feb 2006 08:36:57 +0000 Message-Id: <20060206083653.25398.qmail@web35914.mail.mud.yahoo.com> 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
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: ####@####.#### > | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
[<<] [<] Page 1 of 1 [>] [>>] |