1
0
mirror of https://github.com/XProger/OpenLara.git synced 2025-08-01 02:40:43 +02:00

#368 GBA apply changes to transformRoomUW

This commit is contained in:
XProger
2022-12-05 00:57:05 +03:00
parent dd05e19d9f
commit f1c1d835fc

View File

@@ -35,7 +35,7 @@ maxXY .req vz
tmp .req vy
dx .req vz
dy .req tmp
dy .req vy
dz .req vz
fog .req vz
@@ -62,7 +62,6 @@ transformRoomUW_asm:
ldr res, =gVerticesBase
ldr res, [res]
add res, #VERTEX_G
ldr tmp, =viewportRel
ldmia tmp, {spMinXY, spMaxXY}
@@ -75,8 +74,6 @@ transformRoomUW_asm:
stmfd sp!, {spMinXY, spMaxXY, spRandLUT, spFrame, spCaustLUT}
mov mask, #0xFF
ldr m, =gMatrixPtr
ldr m, [m]
fiq_on
@@ -85,30 +82,23 @@ transformRoomUW_asm:
asr mw1, #FIXED_SHIFT
fiq_off
ldmia m, {mx2, my2, mz2, mw2}
asr mw2, #FIXED_SHIFT
asr mw2, #(FIXED_SHIFT + OT_SHIFT)
.loop:
// unpack vertex
ldmia vertices!, {v}
ldr v, [vertices], #4
and vz, mask, v, lsr #16
and vy, mask, v, lsr #8
mov mask, #0xFF
and vx, mask, v
and vy, mask, v, lsr #8
and vz, mask, v, lsr #16
mov vg, v, lsr #(24 + 3)
// transform z
mul z, mx2, vx
mla z, my2, vy, z
mla z, mz2, vz, z
add z, mw2, z, asr #(FIXED_SHIFT - 8)
// skip if vertex is out of z-range
add z, #VIEW_OFF
cmp z, #(VIEW_OFF + VIEW_OFF + VIEW_MAX)
movhi vg, #(CLIP_NEAR + CLIP_FAR)
bhi .skip
mov vg, v, lsr #24
sub z, #VIEW_OFF
add z, mw2, z, asr #(FIXED_SHIFT - 8 + OT_SHIFT)
fiq_on
// transform y
@@ -133,28 +123,24 @@ transformRoomUW_asm:
and rand, #(MAX_CAUSTICS - 1)
ldr caust, [sp, #SP_CAUST]
ldr caust, [caust, rand, lsl #2]
add vg, caust, asr #5
add vg, caust, asr #8
// fog
subs fog, z, #FOG_MIN
addgt vg, fog, lsr #4
// vg 0..255 -> 0..31
lsr vg, #3
cmp vg, #31
subs fog, z, #(FOG_MIN >> OT_SHIFT)
addgt vg, fog, lsr #(3 + FOG_SHIFT - OT_SHIFT)
cmpgt vg, #31
movgt vg, #31
// z clipping
cmp z, #VIEW_MIN
movle z, #VIEW_MIN
cmp z, #(VIEW_MIN >> OT_SHIFT)
movle z, #(VIEW_MIN >> OT_SHIFT)
orrle vg, #CLIP_NEAR
cmp z, #VIEW_MAX
movge z, #VIEW_MAX
cmp z, #(VIEW_MAX >> OT_SHIFT)
movge z, #(VIEW_MAX >> OT_SHIFT)
orrge vg, #CLIP_FAR
// project
add dz, z, z, lsr #2
lsr dz, #4
divLUT tmp, dz
mul dx, x, tmp
mul dy, y, tmp
@@ -186,13 +172,10 @@ transformRoomUW_asm:
orrhi vg, #CLIP_FRAME
// store the result
strh x, [res, #-6]
strh y, [res, #-4]
strh z, [res, #-2]
mov mask, #0xFF
.skip:
strh vg, [res], #8
strh x, [res], #2
strh y, [res], #2
strh z, [res], #2
strh vg, [res], #2
subs count, #1
bne .loop