Previous 199869 Revisions Next

r26030 Wednesday 6th November, 2013 at 23:55:34 UTC by Phil Bennett
05356: offroadc: Off Road Challenge and clones have wrong color in some textures [Phil Bennett]
04947: offroadc: Missing selection indicator within service mode [Phil Bennett]

midvunit.c - Fixed polygon pixel color selection [Phil Bennett]
[src/mame/video]midvunit.c

trunk/src/mame/video/midvunit.c
r26029r26030
120120
121121void midvunit_renderer::render_tex(INT32 scanline, const extent_t &extent, const midvunit_object_data &objectdata, int threadid)
122122{
123   UINT16 pixdata = objectdata.pixdata & 0xff00;
123   UINT16 pixdata = objectdata.pixdata;
124124   const UINT8 *texbase = objectdata.texbase;
125125   int xstep = objectdata.dither + 1;
126126   UINT16 *dest = objectdata.destbase + scanline * 512;
r26029r26030
148148   /* general case; render every pixel */
149149   for (x = startx; x < stopx; x += xstep)
150150   {
151      dest[x] = pixdata | texbase[((v >> 8) & 0xff00) + (u >> 16)];
151      dest[x] = pixdata + texbase[((v >> 8) & 0xff00) + (u >> 16)];
152152      u += dudx;
153153      v += dvdx;
154154   }
r26029r26030
157157
158158void midvunit_renderer::render_textrans(INT32 scanline, const extent_t &extent, const midvunit_object_data &objectdata, int threadid)
159159{
160   UINT16 pixdata = objectdata.pixdata & 0xff00;
160   UINT16 pixdata = objectdata.pixdata;
161161   const UINT8 *texbase = objectdata.texbase;
162162   int xstep = objectdata.dither + 1;
163163   UINT16 *dest = objectdata.destbase + scanline * 512;
r26029r26030
187187   {
188188      UINT8 pix = texbase[((v >> 8) & 0xff00) + (u >> 16)];
189189      if (pix != 0)
190         dest[x] = pixdata | pix;
190         dest[x] = pixdata + pix;
191191      u += dudx;
192192      v += dvdx;
193193   }
r26029r26030
306306   /* make the vertices inclusive of right/bottom points */
307307   make_vertices_inclusive(vert);
308308
309   /* handle flat-shaded quads here */
309   /* set the palette base */
310   UINT16 pixdata = m_state.m_dma_data[1];
311
310312   render_delegate callback;
311313   bool textured = ((m_state.m_dma_data[0] & 0x300) == 0x100);
314
315   /* handle flat-shaded quads here */
312316   if (!textured)
317   {
313318      callback = render_delegate(FUNC(midvunit_renderer::render_flat), this);
314
319      pixdata += (m_state.m_dma_data[0] & 0x00ff);
320   }
315321   /* handle textured quads here */
316322   else
317323   {
318      /* if textured, add the texture info */
324      /* add the texture info */
319325      vert[0].p[0] = (float)(m_state.m_dma_data[10] & 0xff) * 65536.0f + 32768.0f;
320326      vert[0].p[1] = (float)(m_state.m_dma_data[10] >> 8) * 65536.0f + 32768.0f;
321327      vert[1].p[0] = (float)(m_state.m_dma_data[11] & 0xff) * 65536.0f + 32768.0f;
r26029r26030
327333
328334      /* handle non-masked, non-transparent quads */
329335      if ((m_state.m_dma_data[0] & 0xc00) == 0x000)
336      {
330337         callback = render_delegate(FUNC(midvunit_renderer::render_tex), this);
331
338      }
332339      /* handle non-masked, transparent quads */
333340      else if ((m_state.m_dma_data[0] & 0xc00) == 0x800)
341      {
334342         callback = render_delegate(FUNC(midvunit_renderer::render_textrans), this);
335
343      }
336344      /* handle masked, transparent quads */
337345      else if ((m_state.m_dma_data[0] & 0xc00) == 0xc00)
346      {
338347         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?) */
341351      else
352      {
342353         callback = render_delegate(FUNC(midvunit_renderer::render_flat), this);
354         pixdata += (m_state.m_dma_data[0] & 0x00ff);
355      }
343356   }
344357
345358   /* set up the object data for this triangle */
346359   midvunit_object_data &objectdata = object_data_alloc();
347360   objectdata.destbase = &m_state.m_videoram[(m_state.m_page_control & 4) ? 0x40000 : 0x00000];
348361   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;
350363   objectdata.dither = ((m_state.m_dma_data[0] & 0x2000) != 0);
351364
352365   /* render as a quad */

Previous 199869 Revisions Next


© 1997-2024 The MAME Team