trunk/src/mame/video/midvunit.c
| r26029 | r26030 | |
| 120 | 120 | |
| 121 | 121 | void midvunit_renderer::render_tex(INT32 scanline, const extent_t &extent, const midvunit_object_data &objectdata, int threadid) |
| 122 | 122 | { |
| 123 | | UINT16 pixdata = objectdata.pixdata & 0xff00; |
| 123 | UINT16 pixdata = objectdata.pixdata; |
| 124 | 124 | const UINT8 *texbase = objectdata.texbase; |
| 125 | 125 | int xstep = objectdata.dither + 1; |
| 126 | 126 | UINT16 *dest = objectdata.destbase + scanline * 512; |
| r26029 | r26030 | |
| 148 | 148 | /* general case; render every pixel */ |
| 149 | 149 | for (x = startx; x < stopx; x += xstep) |
| 150 | 150 | { |
| 151 | | dest[x] = pixdata | texbase[((v >> 8) & 0xff00) + (u >> 16)]; |
| 151 | dest[x] = pixdata + texbase[((v >> 8) & 0xff00) + (u >> 16)]; |
| 152 | 152 | u += dudx; |
| 153 | 153 | v += dvdx; |
| 154 | 154 | } |
| r26029 | r26030 | |
| 157 | 157 | |
| 158 | 158 | void midvunit_renderer::render_textrans(INT32 scanline, const extent_t &extent, const midvunit_object_data &objectdata, int threadid) |
| 159 | 159 | { |
| 160 | | UINT16 pixdata = objectdata.pixdata & 0xff00; |
| 160 | UINT16 pixdata = objectdata.pixdata; |
| 161 | 161 | const UINT8 *texbase = objectdata.texbase; |
| 162 | 162 | int xstep = objectdata.dither + 1; |
| 163 | 163 | UINT16 *dest = objectdata.destbase + scanline * 512; |
| r26029 | r26030 | |
| 187 | 187 | { |
| 188 | 188 | UINT8 pix = texbase[((v >> 8) & 0xff00) + (u >> 16)]; |
| 189 | 189 | if (pix != 0) |
| 190 | | dest[x] = pixdata | pix; |
| 190 | dest[x] = pixdata + pix; |
| 191 | 191 | u += dudx; |
| 192 | 192 | v += dvdx; |
| 193 | 193 | } |
| r26029 | r26030 | |
| 306 | 306 | /* make the vertices inclusive of right/bottom points */ |
| 307 | 307 | make_vertices_inclusive(vert); |
| 308 | 308 | |
| 309 | | /* handle flat-shaded quads here */ |
| 309 | /* set the palette base */ |
| 310 | UINT16 pixdata = m_state.m_dma_data[1]; |
| 311 | |
| 310 | 312 | render_delegate callback; |
| 311 | 313 | bool textured = ((m_state.m_dma_data[0] & 0x300) == 0x100); |
| 314 | |
| 315 | /* handle flat-shaded quads here */ |
| 312 | 316 | if (!textured) |
| 317 | { |
| 313 | 318 | callback = render_delegate(FUNC(midvunit_renderer::render_flat), this); |
| 314 | | |
| 319 | pixdata += (m_state.m_dma_data[0] & 0x00ff); |
| 320 | } |
| 315 | 321 | /* handle textured quads here */ |
| 316 | 322 | else |
| 317 | 323 | { |
| 318 | | /* if textured, add the texture info */ |
| 324 | /* add the texture info */ |
| 319 | 325 | vert[0].p[0] = (float)(m_state.m_dma_data[10] & 0xff) * 65536.0f + 32768.0f; |
| 320 | 326 | vert[0].p[1] = (float)(m_state.m_dma_data[10] >> 8) * 65536.0f + 32768.0f; |
| 321 | 327 | vert[1].p[0] = (float)(m_state.m_dma_data[11] & 0xff) * 65536.0f + 32768.0f; |
| r26029 | r26030 | |
| 327 | 333 | |
| 328 | 334 | /* handle non-masked, non-transparent quads */ |
| 329 | 335 | if ((m_state.m_dma_data[0] & 0xc00) == 0x000) |
| 336 | { |
| 330 | 337 | callback = render_delegate(FUNC(midvunit_renderer::render_tex), this); |
| 331 | | |
| 338 | } |
| 332 | 339 | /* handle non-masked, transparent quads */ |
| 333 | 340 | else if ((m_state.m_dma_data[0] & 0xc00) == 0x800) |
| 341 | { |
| 334 | 342 | callback = render_delegate(FUNC(midvunit_renderer::render_textrans), this); |
| 335 | | |
| 343 | } |
| 336 | 344 | /* handle masked, transparent quads */ |
| 337 | 345 | else if ((m_state.m_dma_data[0] & 0xc00) == 0xc00) |
| 346 | { |
| 338 | 347 | callback = render_delegate(FUNC(midvunit_renderer::render_textransmask), this); |
| 339 | | |
| 340 | | /* handle masked, non-transparent quads */ |
| 348 | pixdata += (m_state.m_dma_data[0] & 0x00ff); |
| 349 | } |
| 350 | /* handle masked, non-transparent quads (invalid?) */ |
| 341 | 351 | else |
| 352 | { |
| 342 | 353 | callback = render_delegate(FUNC(midvunit_renderer::render_flat), this); |
| 354 | pixdata += (m_state.m_dma_data[0] & 0x00ff); |
| 355 | } |
| 343 | 356 | } |
| 344 | 357 | |
| 345 | 358 | /* set up the object data for this triangle */ |
| 346 | 359 | midvunit_object_data &objectdata = object_data_alloc(); |
| 347 | 360 | objectdata.destbase = &m_state.m_videoram[(m_state.m_page_control & 4) ? 0x40000 : 0x00000]; |
| 348 | 361 | objectdata.texbase = (UINT8 *)m_state.m_textureram.target() + (m_state.m_dma_data[14] * 256); |
| 349 | | objectdata.pixdata = m_state.m_dma_data[1] | (m_state.m_dma_data[0] & 0x00ff); |
| 362 | objectdata.pixdata = pixdata; |
| 350 | 363 | objectdata.dither = ((m_state.m_dma_data[0] & 0x2000) != 0); |
| 351 | 364 | |
| 352 | 365 | /* render as a quad */ |