mirror of
https://github.com/irmen/prog8.git
synced 2024-11-26 11:49:22 +00:00
gfx2.clear_screen and monogfx.clear_screen() now have color parameter to clear the screen with
this is much faster than filling a rectangle of the full screen size with a color.
This commit is contained in:
parent
ee81da14d6
commit
433832b329
@ -70,21 +70,23 @@ gfx2 {
|
|||||||
|
|
||||||
active_mode = mode
|
active_mode = mode
|
||||||
if bpp
|
if bpp
|
||||||
clear_screen()
|
clear_screen(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
sub clear_screen() {
|
sub clear_screen(ubyte color) {
|
||||||
position(0, 0)
|
position(0, 0)
|
||||||
when active_mode {
|
when active_mode {
|
||||||
1 -> {
|
1 -> {
|
||||||
; lores 256c
|
; lores 256c
|
||||||
repeat 240/2
|
repeat 240/2
|
||||||
cs_innerloop640()
|
cs_innerloop640(color)
|
||||||
}
|
}
|
||||||
2 -> {
|
2 -> {
|
||||||
; highres 4c
|
; highres 4c
|
||||||
|
ubyte[] colors = [%00000000, %01010101, %10101010, %11111111]
|
||||||
|
color = colors[color&3]
|
||||||
repeat 480/4
|
repeat 480/4
|
||||||
cs_innerloop640()
|
cs_innerloop640(color)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
position(0, 0)
|
position(0, 0)
|
||||||
@ -104,6 +106,8 @@ gfx2 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
sub fillrect(uword xx, uword yy, uword rwidth, uword rheight, ubyte color) {
|
sub fillrect(uword xx, uword yy, uword rwidth, uword rheight, ubyte color) {
|
||||||
|
; Draw a filled rectangle of the given size and color.
|
||||||
|
; To fill the whole screen, use clear_screen(color) instead - it is much faster.
|
||||||
if rwidth==0
|
if rwidth==0
|
||||||
return
|
return
|
||||||
repeat rheight {
|
repeat rheight {
|
||||||
@ -784,17 +788,17 @@ skip:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
asmsub cs_innerloop640() clobbers(Y) {
|
asmsub cs_innerloop640(ubyte color @A) clobbers(Y) {
|
||||||
%asm {{
|
%asm {{
|
||||||
ldy #80
|
ldy #80
|
||||||
- stz cx16.VERA_DATA0
|
- sta cx16.VERA_DATA0
|
||||||
stz cx16.VERA_DATA0
|
sta cx16.VERA_DATA0
|
||||||
stz cx16.VERA_DATA0
|
sta cx16.VERA_DATA0
|
||||||
stz cx16.VERA_DATA0
|
sta cx16.VERA_DATA0
|
||||||
stz cx16.VERA_DATA0
|
sta cx16.VERA_DATA0
|
||||||
stz cx16.VERA_DATA0
|
sta cx16.VERA_DATA0
|
||||||
stz cx16.VERA_DATA0
|
sta cx16.VERA_DATA0
|
||||||
stz cx16.VERA_DATA0
|
sta cx16.VERA_DATA0
|
||||||
dey
|
dey
|
||||||
bne -
|
bne -
|
||||||
rts
|
rts
|
||||||
|
@ -26,7 +26,7 @@ monogfx {
|
|||||||
cx16.VERA_L1_TILEBASE = 0
|
cx16.VERA_L1_TILEBASE = 0
|
||||||
width = 320
|
width = 320
|
||||||
height = 240
|
height = 240
|
||||||
clear_screen()
|
clear_screen(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
sub hires() {
|
sub hires() {
|
||||||
@ -40,7 +40,7 @@ monogfx {
|
|||||||
cx16.VERA_L1_TILEBASE = %00000001
|
cx16.VERA_L1_TILEBASE = %00000001
|
||||||
width = 640
|
width = 640
|
||||||
height = 480
|
height = 480
|
||||||
clear_screen()
|
clear_screen(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
sub textmode() {
|
sub textmode() {
|
||||||
@ -50,17 +50,17 @@ monogfx {
|
|||||||
cx16.VERA_DC_VIDEO = (cx16.VERA_DC_VIDEO & %11111000) | cx16.r15L
|
cx16.VERA_DC_VIDEO = (cx16.VERA_DC_VIDEO & %11111000) | cx16.r15L
|
||||||
}
|
}
|
||||||
|
|
||||||
sub clear_screen() {
|
sub clear_screen(ubyte color) {
|
||||||
stipple(false)
|
stipple(false)
|
||||||
position(0, 0)
|
position(0, 0)
|
||||||
when width {
|
when width {
|
||||||
320 -> {
|
320 -> {
|
||||||
repeat 240/2/8
|
repeat 240/2/8
|
||||||
cs_innerloop640()
|
cs_innerloop640(color)
|
||||||
}
|
}
|
||||||
640 -> {
|
640 -> {
|
||||||
repeat 480/8
|
repeat 480/8
|
||||||
cs_innerloop640()
|
cs_innerloop640(color)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
position(0, 0)
|
position(0, 0)
|
||||||
@ -84,6 +84,8 @@ monogfx {
|
|||||||
}
|
}
|
||||||
|
|
||||||
sub fillrect(uword xx, uword yy, uword rwidth, uword rheight, bool draw) {
|
sub fillrect(uword xx, uword yy, uword rwidth, uword rheight, bool draw) {
|
||||||
|
; Draw a filled rectangle of the given size and color.
|
||||||
|
; To fill the whole screen, use clear_screen(color) instead - it is much faster.
|
||||||
if rwidth==0
|
if rwidth==0
|
||||||
return
|
return
|
||||||
repeat rheight {
|
repeat rheight {
|
||||||
@ -765,17 +767,20 @@ skip:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
asmsub cs_innerloop640() clobbers(Y) {
|
asmsub cs_innerloop640(ubyte color @A) clobbers(Y) {
|
||||||
%asm {{
|
%asm {{
|
||||||
ldy #80
|
cmp #0
|
||||||
- stz cx16.VERA_DATA0
|
beq +
|
||||||
stz cx16.VERA_DATA0
|
lda #255
|
||||||
stz cx16.VERA_DATA0
|
+ ldy #80
|
||||||
stz cx16.VERA_DATA0
|
- sta cx16.VERA_DATA0
|
||||||
stz cx16.VERA_DATA0
|
sta cx16.VERA_DATA0
|
||||||
stz cx16.VERA_DATA0
|
sta cx16.VERA_DATA0
|
||||||
stz cx16.VERA_DATA0
|
sta cx16.VERA_DATA0
|
||||||
stz cx16.VERA_DATA0
|
sta cx16.VERA_DATA0
|
||||||
|
sta cx16.VERA_DATA0
|
||||||
|
sta cx16.VERA_DATA0
|
||||||
|
sta cx16.VERA_DATA0
|
||||||
dey
|
dey
|
||||||
bne -
|
bne -
|
||||||
rts
|
rts
|
||||||
|
@ -78,7 +78,8 @@ main {
|
|||||||
}
|
}
|
||||||
|
|
||||||
sys.wait(60)
|
sys.wait(60)
|
||||||
gfx2.clear_screen()
|
gfx2.clear_screen(2)
|
||||||
|
gfx2.clear_screen(0)
|
||||||
|
|
||||||
ubyte radius
|
ubyte radius
|
||||||
|
|
||||||
|
@ -189,7 +189,8 @@ main {
|
|||||||
}
|
}
|
||||||
|
|
||||||
sys.wait(60)
|
sys.wait(60)
|
||||||
monogfx.clear_screen()
|
monogfx.clear_screen(1)
|
||||||
|
monogfx.clear_screen(0)
|
||||||
|
|
||||||
ubyte radius
|
ubyte radius
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user