Вложений: 1
Sprite Renderer optimized
При известном количестве плоскостей можно сэкономить ещё около 8 тысяч CPU states на полный экран. Зааттачил рендерер для 2х плоскостей. Вроде шустро, но всё равно есть visual glitches при скроллинге. Будем всё-ж делать framebuffer.
StkMvUp Macro _rp
IFIDN <'&_rp'>,<'d'>
pop d
mov m,e
inr l
mov m,d
ELSE
pop b
mov m,c
inr l
mov m,b
ENDIF
EndM
StkMvDn Macro _rp
IFIDN <'&_rp'>,<'d'>
pop d
mov m,e
dcr l
mov m,d
ELSE
pop b
mov m,c
dcr l
mov m,b
ENDIF
EndM
SpMvUp Macro _rp,_count
Rept (_count SHR 1) - 1
StkMvUp _rp
inr l
EndM
StkMvUp _rp
EndM
SpMvDn Macro _rp,_count
Rept (_count SHR 1) - 1
StkMvDn _rp
dcr l
EndM
StkMvDn _rp
EndM
CSEG
PUBLIC Spt216
; Non-reentrable
; Needs disabled interrupts
; <HL> - sprite address
; <DE> - screen address
Spt216: shld ldSpr+1
lxi h,0
dad sp
xchg ; <HL> - screen address, <DE> - return address
ldSpr: lxi sp,0
sp16lp: SpMvUp b,16
inr h
SpMvDn b,16
mov a,h
adi 20h
mov h,a
SpMvUp b,16
dcr h
SpMvDn b,16
xchg
sphl
ret
End
Вложений: 1
Frame-Buffered Rendering (первый блин).
Собственно вот.
Аппликуха содержит 2 рендерера, чтоб их было проще сравнивать и охаить :D
1. Обычный рендерер (оранжевый цвет уровня)
2. Frame-Buffered рендерер (красный цвет уровня)
Переключнение между рендерами - пробелом.
Остальное-как раньше - стрелки, плюс - rendering на весь экран, минус - во viewport. Заранее прошу извинить за глюк - после переключения vieport-fullscreen возможен пустой экран и часто будет необходимо нажать какую-нить клавишу-стрелку для отрисовки.
АР-2 (esc) - выход в МикроДОС.
Разница между рендерерами особенно заметна на полном экране.
Мне лично больше нравится рендеринг с фрэйм буфером. Он хоть и *слегка* помедленнее, зато у него отсутствуют глюки ОХЛ при строчной развёртке. В общем, рад буду вашим комментам.
Следующий этап:
- поточить frame-buffered renderer на предмет плавности (всё определяется кодом в ISR, его количеством и стабильным числом тактов в ней)
- вывод оверлеев. Чувствую, это будет отдельная песня.