Skip to content

Commit 2e68e66

Browse files
committed
Rearrange triangle rasterization formulas
1 parent a9156a6 commit 2e68e66

File tree

1 file changed

+16
-16
lines changed

1 file changed

+16
-16
lines changed

src/main/scala/graphics/Graphics.scala

+16-16
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,13 @@ class Graphics extends Module {
2424
val dx1 = x2 - x1
2525
val dx2 = x0 - x2
2626

27-
val dy0 = y1 - y0
28-
val dy1 = y2 - y1
29-
val dy2 = y0 - y2
27+
val dy0 = y0 - y1
28+
val dy1 = y1 - y2
29+
val dy2 = y2 - y0
3030

31-
val re0 = x0 * dy0 - y0 * dx0
32-
val re1 = x1 * dy1 - y1 * dx1
33-
val re2 = x2 * dy2 - y2 * dx2
31+
val re0 = dx0 * y0 + dy0 * x0
32+
val re1 = dx1 * y1 + dy1 * x1
33+
val re2 = dx2 * y2 + dy2 * x2
3434

3535
val eWidth = signedBitLength(2 * (VgaTiming.width - 1) * (VgaTiming.height - 1))
3636
val e0 = RegInit(re0.S(eWidth.W))
@@ -51,14 +51,14 @@ class Graphics extends Module {
5151
val valid = row < Tile.nrRows.U
5252
tileBuffer.io.inReq.valid := valid
5353
when (valid && tileBuffer.io.inReq.ready) {
54-
e0 := e0 - (Tile.size * dy0).S
55-
e1 := e1 - (Tile.size * dy1).S
56-
e2 := e2 - (Tile.size * dy2).S
54+
e0 := e0 - (dy0 * Tile.size).S
55+
e1 := e1 - (dy1 * Tile.size).S
56+
e2 := e2 - (dy2 * Tile.size).S
5757
col := col + 1.U
5858
when (col === (Tile.nrCols - 1).U) {
59-
e0 := e0 + (Tile.size * ((Tile.nrCols - 1) * dy0 + dx0)).S
60-
e1 := e1 + (Tile.size * ((Tile.nrCols - 1) * dy1 + dx1)).S
61-
e2 := e2 + (Tile.size * ((Tile.nrCols - 1) * dy2 + dx2)).S
59+
e0 := e0 + ((dy0 * (Tile.nrCols - 1) - dx0) * Tile.size).S
60+
e1 := e1 + ((dy1 * (Tile.nrCols - 1) - dx1) * Tile.size).S
61+
e2 := e2 + ((dy2 * (Tile.nrCols - 1) - dx2) * Tile.size).S
6262
col := 0.U
6363
row := row + 1.U
6464
}
@@ -67,10 +67,10 @@ class Graphics extends Module {
6767

6868
for (i <- 0 until Tile.size) {
6969
for (j <- 0 until Tile.size) {
70-
val pe0 = e0 + (i * dx0 - j * dy0).S
71-
val pe1 = e1 + (i * dx1 - j * dy1).S
72-
val pe2 = e2 + (i * dx2 - j * dy2).S
73-
val visible = pe0 < 0.S && pe1 < 0.S && pe2 < 0.S
70+
val pe0 = e0 - (dx0 * i + dy0 * j).S
71+
val pe1 = e1 - (dx1 * i + dy1 * j).S
72+
val pe2 = e2 - (dx2 * i + dy2 * j).S
73+
val visible = pe0 >= 0.S && pe1 >= 0.S && pe2 >= 0.S
7474
tileBuffer.io.inReq.bits(i)(j).r := Mux(visible, 255.U, 0.U)
7575
tileBuffer.io.inReq.bits(i)(j).g := Mux(visible, 255.U, 0.U)
7676
tileBuffer.io.inReq.bits(i)(j).b := Mux(visible, 255.U, 0.U)

0 commit comments

Comments
 (0)