Intel i86W Manual page 193

Table of Contents

Advertisement

PROGRAMMING EXAMPLES
II
RENDERING PROCEDURE
II
16-bit pixels. 16-bit Z-buffer
and
3.
Xl.
Ra
II
Determine alignment of starting-point
acc_init
Ra. Rb. Rc. Rd. Fa. Fah
II
Initialize accumulators
subs
4.
Ra.
Rb
II
4 - alignment
subs
dX.
Rb.
dX
II
Adjust dX by Xl alignment
II
If dX
<=
0. then right end is in same set as left end
and
3.
dX.
Rb
II
Determine alignment of right end
zmask
Ra. Rb. Rc. Rd
II
Prepare both left- and right-end masks
left_end::
II
Handle boundary conditions
d.faddz
aZ.
iZ3.
aZ
II
Interpolate 2 even Z values
adds
-8.
FBP.
FBP
II
Anticipate autoincrement
d.faddz
aZ.
iZl.
aZ
II
Interpolate 2 odd Z values
adds
-8.
ZBP.
ZBP
II
Anticipate autoincrement
d.form
lZmask. newz
II
Mask 4 new Z values
fld.d
8CZBP). oldz
II
Fetch 4 old Z values
d.faddp
aBo
iB.
aB
II
Interpolate 4 blue intensities
mov
-4.
Ra
II
Loop increment: 4 pixels
d.faddp
aGo
iG.
aG
II
Interpolate 4 green intensities
adds
-4.
dX.
dX
II
Prepare dX for bla at end of loop
d.faddp
aR.
iR.
aR
II
Interpolate 4 red intensities
bla
Ra.
dX.
Ll
II
Initial ize LCC
d.form
f0.
newi
II
Move 4 new pixels to 64-bit reg
adds
5.
dX.
r0
II
Are there any whole sets CdX
<
-5)?
Ll: d.fzchks
oldz.
newz.
newz
II
Mark closer points in PM[7 .. 4]
bc
short_segment
II
Get out now if no whole set
d.fnop
II
fld.d
16CZBP).
oldz
II
Fetch 4 old Z values
inner_loop::
II
Handle all interior points
d.faddz
aZ.
iZ3.
aZ
II
Interpolate 2 even Z values
nop
II
d.faddz
aZ.
iZl.
at
II
Interpolate 2 odd Z values
fst·d
newz.
8CZBP)++
II
Update Z buf from prior loop
d.form
f0.
newz
II
Move 4 new Z values to 64-bit reg
nop
II
d.fzchks
f0.
f0.
f0
II
Shift PM[7 .. 4] to PM[3 .. 0]
mov
- 5 . · Rb
II
-5 mod 4
=
3. aligned right end
d.faddp
aBo
iB.
aB
II
Interpolate 4 blue intensities
pst.d
newi.
8CFBP)++
II
Store pixels indicated by PM [3 .. 0]
d.faddp
aGo
iG.
aG
II
Interpolate 4 green intensities
xor
Rb.
dX.
r0
II
Are we at an aligned right end?
d.faddp
aR.
iR.
aR
II
Interpolate 4 red intensities
bc
aligned_end
II
Taken if at an aligned right end
-->
d.form
f0.
newi
II
Move 4 new pixels to 64-bit reg
bla
Ra. dX.
inner~loop
II
Loop if not at end of line segment
d.fzchks
oldz.
newz.
newz
II
Mark closer points in PM[7 .. 4]
fld·d
16CZBP).
oldz
II
Fetch 4 old Z values for next loop
II
End of inner_loop.
Right end not aligned
Example 9-21. 3-D Rendering (1 of 2)
9-31

Advertisement

Table of Contents
loading

Table of Contents