Log inRegister an accountBrowse CSDbHelp & documentationFacts & StatisticsThe forumsAvailable RSS-feeds on CSDbSupport CSDb Commodore 64 Scene Database
You are not logged in - nap
CSDb User Forums


Forums > C64 Coding > Preventing flickering = double-buffering?
2017-06-11 19:30
Rudi
Account closed

Registered: May 2010
Posts: 125
Preventing flickering = double-buffering?

Hi,
do you use banks for "double buffering" or flicker-free drawing?

When I erase pixels I get flickering. I guess it does not only happen when the drawing is synched to the rasterbeam so I use banking for some kind of double buffering.

What do you guys use to prevent flickering?
Lets say you do dots or linedrawing and need to erase the pixels..

My idea is to draw in two banks and while showing one i erase and draw in the other. Then switch banks and do the same for the opposite bank and repeat.

The flicker should not occur when drawing is finished. I tried to sync $d012 to 252 and draw, but it still flickers.

	;----------------
	;double-buffering
	;----------------
	;try to draw when rasterbeam is away from screen
	;lda #252
	;cmp $d012	;raster
	;bne *-3

	lda IT0
	and #1
	beq drawjmp0
	jmp draw1
drawjmp0:	jmp draw0
draw1:
	#Line PX0, PY0, PX1, PY1, 0, 1	;draw (in bank 1)
	#Line QX0, QY0, QX1, QY1, 1, 0	;erase (in bank 0)

	;store old coordinates
	lda PX0
	sta RX0
	lda PY0
	sta RY0
	lda PX1
	sta RX1
	lda PY1
	sta RY1

	#SwitchBank bank4000			;switch to bank 1
jmp loop

draw0:

	#Line PX0, PY0, PX1, PY1, 0, 0	;draw (in bank 0)
	#Line RX0, RY0, RX1, RY1, 1, 1	;erase (in bank 1)

	;store old coordinates
	lda PX0
	sta QX0
	lda PY0
	sta QY0
	lda PX1
	sta QX1
	lda PY1
	sta QY1

	#SwitchBank bank0000			;switch to bank 0
jmp loop


Any ideas?
2017-06-11 20:09
Flavioweb

Registered: Nov 2011
Posts: 463
Maybe you should switch screens during VB, otherwise if the switch happen in the middle of the frame, some glitches appears...
2017-06-11 20:30
algorithm

Registered: May 2002
Posts: 705
What may come in useful is to put a dec $d020 at the beginning of a routine (such as your clear routine) if you use it. and then inc $d020 at the end.

When your program is running, that will tell you visually when the clear routine is running.
2017-06-11 20:32
Digger

Registered: Mar 2005
Posts: 437
As Flavio pointed out – you should be able to draw anytime when you use double-buffering, it's more crucial to switch the bank display at the right time.

Also erase and then draw should happen in the same bank (while the other is shown). From your code comments it looks like you've been erasing and drawing the the opposite banks, which would explain the flicker.
2017-06-11 20:39
Rudi
Account closed

Registered: May 2010
Posts: 125
yes, I was switching banks at the wrong time. such things happen when coding for too long, i dont see the obvious things. thanks for the replies anyhow.

It's solved now.
2017-06-12 05:23
Oswald

Registered: Apr 2002
Posts: 5094
waiting for vblank can be avoided by tripple buffering.

frame A is being drawn
frame B is on screen
frame C is ready to be shown when vblank is reached
2017-06-12 06:45
Mixer

Registered: Apr 2008
Posts: 452
Another way to avoid flicker is to run a circular coordinate buffer.

You have n dots on screen and you delete the oldest when you write a new one.

When you write a new dot, save the dot mem address to buffer, so you do not need to recalculate it when clearing.
RefreshSubscribe to this thread:

You need to be logged in to post in the forum.

Search the forum:
Search   for   in  
All times are CET.
Search CSDb
Advanced
Users Online
Dr.j/Delysid
Vent
wacek/arise
Guests online: 89
Top Demos
1 Next Level  (9.7)
2 13:37  (9.7)
3 Mojo  (9.7)
4 Coma Light 13  (9.6)
5 Edge of Disgrace  (9.6)
6 What Is The Matrix 2  (9.6)
7 The Demo Coder  (9.6)
8 Uncensored  (9.6)
9 Comaland 100%  (9.6)
10 Wonderland XIV  (9.6)
Top onefile Demos
1 Layers  (9.6)
2 No Listen  (9.6)
3 Cubic Dream  (9.6)
4 Party Elk 2  (9.6)
5 Copper Booze  (9.6)
6 Rainbow Connection  (9.5)
7 Dawnfall V1.1  (9.5)
8 Onscreen 5k  (9.5)
9 Morph  (9.5)
10 Libertongo  (9.5)
Top Groups
1 Performers  (9.3)
2 Booze Design  (9.3)
3 Oxyron  (9.3)
4 Triad  (9.3)
5 Censor Design  (9.3)
Top Organizers
1 Burglar  (9.9)
2 Sixx  (9.8)
3 hedning  (9.7)
4 Irata  (9.7)
5 Tim  (9.7)

Home - Disclaimer
Copyright © No Name 2001-2024
Page generated in: 0.041 sec.