diff options
author | Angelo Salese <angelosa@users.noreply.github.com> | 2011-08-22 22:16:44 +0000 |
---|---|---|
committer | Angelo Salese <angelosa@users.noreply.github.com> | 2011-08-22 22:16:44 +0000 |
commit | 99f925a60fd026f9d397e31b7db9984bb491cc6a (patch) | |
tree | 64461c39fcdcd321deea88ef44f7bc028c47cc7e /src/mame | |
parent | c0d1aaf1a39dc43c75fac48294d88b95a176f66a (diff) |
Implemented command skipped by previous commit, it's for goraud shaded triangles
Diffstat (limited to 'src/mame')
-rw-r--r-- | src/mame/video/taitojc.c | 28 |
1 files changed, 26 insertions, 2 deletions
diff --git a/src/mame/video/taitojc.c b/src/mame/video/taitojc.c index d753975dfe8..e2c1eaf6ca4 100644 --- a/src/mame/video/taitojc.c +++ b/src/mame/video/taitojc.c @@ -679,9 +679,33 @@ void taitojc_render_polygons(running_machine &machine, UINT16 *polygon_fifo, int ptr += 6; break; } - case 0x01: // Landing Gear + case 0x01: // Landing Gear, Goraud Shaded Triangle { - ptr += 12; + poly_extra_data *extra = (poly_extra_data *)poly_get_extra_data(state->m_poly); + + extra->zbuffer = state->m_zbuffer; + + for (i=0; i < 3; i++) + { + vert[i].p[1] = polygon_fifo[ptr++]; + vert[i].y = (INT16)(polygon_fifo[ptr++]); + vert[i].x = (INT16)(polygon_fifo[ptr++]); + vert[i].p[0] = (UINT16)(polygon_fifo[ptr++]); + } + + if (vert[0].p[0] < 0x8000 && vert[1].p[0] < 0x8000 && vert[2].p[0] < 0x8000) + { + if (vert[0].p[1] == vert[1].p[1] && + vert[1].p[1] == vert[2].p[1]) + { + // optimization: all colours the same -> render solid + poly_render_triangle(state->m_poly, state->m_framebuffer, &machine.primary_screen->visible_area(), render_solid_scan, 2, &vert[0], &vert[1], &vert[2]); + } + else + { + poly_render_triangle(state->m_poly, state->m_framebuffer, &machine.primary_screen->visible_area(), render_shade_scan, 2, &vert[0], &vert[1], &vert[2]); + } + } break; } default: |