BlackBerryForums.com : Your Number One BlackBerry Community
     

»Sponsored Links


BlackBerryApps.com Best Sellers



Reply
 
LinkBack Thread Tools
  (#1 (permalink)) Old
cristisor Offline
Knows Where the Search Button Is
 
Posts: 15
Join Date: Jul 2009
Model: 8800
PIN: N/A
Carrier: Vodafone
Default How to implement double buffering? - 09-22-2009, 07:37 AM

Hi,
I'm porting a game from MIDP to the BB API but the Screen classes' double buffering doesn't work like in GameCanvas. I can't do all the painting in the paint(g) method so I created an auxiliary buffer and in paint I draw the buffer, but I still get the flickerings:

Code:
theBuffer = new Bitmap(screenWidth, screenHeight);
theGraphics = Graphics.create(theBuffer);

protected void paint(Graphics graphics) {
    super.paint(graphics);
    graphics.pushContext(new XYRect(0, 0, screenWidth, screenHeight), 0, 0);
    graphics.drawBitmap(0, 0, theBuffer.getWidth(), theBuffer.getHeight(), theBuffer, 0, 0);
    graphics.popContext();
}
I draw everything in "theGraphics".
   
Reply With Quote
Sponsored Links
Please Login or Register to Remove these Advertisements!

  (#2 (permalink)) Old
ptys Offline
Knows Where the Search Button Is
 
Posts: 26
Join Date: Jul 2008
Model: none
PIN: N/A
Carrier: none
Default 09-22-2009, 08:37 PM

Have you tried the midp version of this game on BB? If you haven't, then it may be just that hardware you're on, and not the lack of buffering. BB's cpu's are much slower than the competition's and it's much harder to get comparable frame rates.

Try avoiding full screen repaints if possible. Instead of buffering the whole screen, try buffering sections of the screen and paint only what's changed, etc. Profile your code.

Quote:
Originally Posted by cristisor View Post
Hi,
I'm porting a game from MIDP to the BB API but the Screen classes' double buffering doesn't work like in GameCanvas. I can't do all the painting in the paint(g) method so I created an auxiliary buffer and in paint I draw the buffer, but I still get the flickerings:

Code:
theBuffer = new Bitmap(screenWidth, screenHeight);
theGraphics = Graphics.create(theBuffer);

protected void paint(Graphics graphics) {
    super.paint(graphics);
    graphics.pushContext(new XYRect(0, 0, screenWidth, screenHeight), 0, 0);
    graphics.drawBitmap(0, 0, theBuffer.getWidth(), theBuffer.getHeight(), theBuffer, 0, 0);
    graphics.popContext();
}
I draw everything in "theGraphics".
   
Reply With Quote
  (#3 (permalink)) Old
cristisor Offline
Knows Where the Search Button Is
 
Posts: 15
Join Date: Jul 2009
Model: 8800
PIN: N/A
Carrier: Vodafone
Default 09-23-2009, 03:27 AM

The MIDP version is double buffered. After some research I found a way to do the double buffering: I make a secondary buffer, theBuffer, upon which I call the drawing method inside a "invokeAndWait()" and invalidate after this. In the paint method I paint only the buffer on the screen, like in the paint method posted on the first post.

Code:
UiApplication.getUiApplication().invokeAndWait(
        new Runnable() {
            public void run() {
                draw();
                invalidate();
            }
        }
);
   
Reply With Quote
Reply


Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On





Copyright © 2004-2009 BlackBerryFAQ.com, BlackBerryForums.com.
The names RIM © and BlackBerry © are registered Trademarks of Research In Motion Limited.