mirror of
https://github.com/XProger/OpenLara.git
synced 2025-08-20 03:41:33 +02:00
#370 3DO save 14 ticks per vertex for projectVertices func
This commit is contained in:
@@ -8,20 +8,20 @@
|
||||
EXPORT projectVertices_asm
|
||||
|
||||
vCount RN r0
|
||||
mx RN r0
|
||||
mx RN vCount
|
||||
my RN r1
|
||||
mz RN r2
|
||||
x RN r3
|
||||
y RN r4
|
||||
z RN r5
|
||||
dz RN r6
|
||||
minX RN dz
|
||||
minY RN r7
|
||||
maxX RN r8
|
||||
minX RN r7
|
||||
minY RN r8
|
||||
maxX RN r9
|
||||
maxY RN r12
|
||||
last RN r9
|
||||
m RN r10
|
||||
vp RN m
|
||||
m RN minX
|
||||
vp RN minX
|
||||
last RN r10
|
||||
vertex RN r11
|
||||
divLUT RN lr
|
||||
|
||||
@@ -36,7 +36,7 @@ CLIP_FAR EQU (1 << 4)
|
||||
CLIP_NEAR EQU (1 << 5)
|
||||
|
||||
DIV_TABLE_END EQU (1025 - 1)
|
||||
VIEW_DIST EQU (1024 * 10)
|
||||
VIEW_DIST EQU (1024 * 10) ; max = DIV_TABLE_END << PROJ_SHIFT
|
||||
VIEW_MIN EQU (256 << CLIP_SHIFT)
|
||||
VIEW_MAX EQU (VIEW_DIST << CLIP_SHIFT)
|
||||
|
||||
@@ -61,6 +61,7 @@ projectVertices_asm
|
||||
ldmia m, {mx, my, mz} ; get view space offset from matrix
|
||||
ldr divLUT, =divTable
|
||||
ldr vp, =viewportRel
|
||||
ldmia vp, {minX, minY, maxX, maxY}
|
||||
|
||||
loop ldmia vertex, {x, y, z} ; read unpacked vertex
|
||||
|
||||
@@ -79,17 +80,14 @@ loop ldmia vertex, {x, y, z} ; read unpacked vertex
|
||||
orrgt z, z, #CLIP_FAR
|
||||
|
||||
; projection
|
||||
mov dz, z, lsr #(PROJ_SHIFT + CLIP_SHIFT)
|
||||
cmp dz, #DIV_TABLE_END
|
||||
movge dz, #DIV_TABLE_END
|
||||
mov dz, z, lsr #(PROJ_SHIFT + CLIP_SHIFT) ; z is positive
|
||||
ldr dz, [divLUT, dz, lsl #2]
|
||||
mul x, dz, x
|
||||
mul y, dz, y
|
||||
mov x, x, asr #12
|
||||
mov y, y, asr #12
|
||||
mov x, x, asr #(16 - PROJ_SHIFT)
|
||||
mov y, y, asr #(16 - PROJ_SHIFT)
|
||||
|
||||
; check xy clipping
|
||||
ldmia vp, {minX, minY, maxX, maxY}
|
||||
cmp x, minX
|
||||
orrlt z, z, #CLIP_LEFT
|
||||
cmp y, minY
|
||||
|
Reference in New Issue
Block a user