BlackBerry Forums Support Community
              

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

Please Login to Remove!

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".
Offline  
Old 09-22-2009, 07:37 PM   #2
ptys
Knows Where the Search Button Is
 
Join Date: Jul 2008
Model: none
PIN: N/A
Carrier: none
Posts: 26
Default

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".
Offline  
Old 09-23-2009, 02:27 AM   #3
cristisor
Knows Where the Search Button Is
 
Join Date: Jul 2009
Model: 8800
PIN: N/A
Carrier: Vodafone
Posts: 15
Default

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();
            }
        }
);
Offline  
Closed Thread


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

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


Electric AC/DC Voltage Detector Pen Tester 6-380V Voltmeter Ammeter Circuit 8in1 picture

Electric AC/DC Voltage Detector Pen Tester 6-380V Voltmeter Ammeter Circuit 8in1

$7.69



Voltage Electric Tester Volt Detector Test Pen AC DC Non-Contact Sensor 12-1000V picture

Voltage Electric Tester Volt Detector Test Pen AC DC Non-Contact Sensor 12-1000V

$8.50



12V Digital LED Display Voltmeter Voltage Gauge Panel Meter Car Motorcycle  picture

12V Digital LED Display Voltmeter Voltage Gauge Panel Meter Car Motorcycle

$7.49



12V Digital LED Display Voltmeter Voltage Gauge Panel Meter Car Motorcycle  picture

12V Digital LED Display Voltmeter Voltage Gauge Panel Meter Car Motorcycle

$7.49



Contactless Voltage Electricity Tester Volt Detector Test Pen AC Sensor 12-1000V picture

Contactless Voltage Electricity Tester Volt Detector Test Pen AC Sensor 12-1000V

$8.49



12~250V AC/DC Non-Contact LCD Digital Electric Voltage Tester Pen Detector Test picture

12~250V AC/DC Non-Contact LCD Digital Electric Voltage Tester Pen Detector Test

$8.96







Copyright 2004-2016 BlackBerryForums.com.
The names RIM and BlackBerry are registered Trademarks of BlackBerry Inc.