summaryrefslogtreecommitdiffstatshomepage
path: root/src/osd
diff options
context:
space:
mode:
author therealmogminer@gmail.com <therealmogminer@gmail.com>2016-10-24 19:15:34 +0200
committer therealmogminer@gmail.com <therealmogminer@gmail.com>2016-10-24 19:15:46 +0200
commite01bcfd2096f0cc78e0ed0a4560e1557c88d8e02 (patch)
tree38663e437884a3b8b494811c84857b46b8ed326d /src/osd
parent97ad7e31fff16e0c6c5b3b999ebe34eac7de03a3 (diff)
Fix visual corruption introduced a few changelists ago by me, nw
Diffstat (limited to 'src/osd')
-rw-r--r--src/osd/modules/render/drawd3d.cpp36
1 files changed, 25 insertions, 11 deletions
diff --git a/src/osd/modules/render/drawd3d.cpp b/src/osd/modules/render/drawd3d.cpp
index 1dfb88cc222..b149ed5c755 100644
--- a/src/osd/modules/render/drawd3d.cpp
+++ b/src/osd/modules/render/drawd3d.cpp
@@ -2202,12 +2202,19 @@ static inline void copyline_palettea16(uint32_t *dst, const uint16_t *src, int w
// copyline_rgb32
//============================================================
-static inline void copyline_rgb32_palette(uint32_t *dst, const uint32_t *src, int width, const rgb_t *palette)
+static inline void copyline_rgb32(uint32_t *dst, const uint32_t *src, int width, const rgb_t *palette)
{
- for (int x = 0; x < width; x++)
+ if (palette != nullptr)
+ {
+ for (int x = 0; x < width; x++)
+ {
+ rgb_t srcpix = *src++;
+ *dst++ = palette[0x200 + srcpix.r()] | palette[0x100 + srcpix.g()] | palette[srcpix.b()];
+ }
+ }
+ else
{
- rgb_t srcpix = *src++;
- *dst++ = palette[0x200 + srcpix.r()] | palette[0x100 + srcpix.g()] | palette[srcpix.b()];
+ memcpy(dst, src, sizeof(uint32_t) * width);
}
}
@@ -2216,12 +2223,19 @@ static inline void copyline_rgb32_palette(uint32_t *dst, const uint32_t *src, in
// copyline_argb32
//============================================================
-static inline void copyline_argb32_palette(uint32_t *dst, const uint32_t *src, int width, const rgb_t *palette)
+static inline void copyline_argb32(uint32_t *dst, const uint32_t *src, int width, const rgb_t *palette)
{
- for (int x = 0; x < width; x++)
+ if (palette != nullptr)
+ {
+ for (int x = 0; x < width; x++)
+ {
+ rgb_t srcpix = *src++;
+ *dst++ = (srcpix & 0xff000000) | palette[0x200 + srcpix.r()] | palette[0x100 + srcpix.g()] | palette[srcpix.b()];
+ }
+ }
+ else
{
- rgb_t srcpix = *src++;
- *dst++ = (srcpix & 0xff000000) | palette[0x200 + srcpix.r()] | palette[0x100 + srcpix.g()] | palette[srcpix.b()];
+ memcpy(dst, src, sizeof(uint32_t) * width);
}
}
@@ -2343,7 +2357,7 @@ void texture_info::set_data(const render_texinfo *texsource, uint32_t flags)
// loop over Y
int tex_format = PRIMFLAG_GET_TEXFORMAT(flags);
- if ((tex_format == TEXFORMAT_RGB32 || tex_format == TEXFORMAT_ARGB32) && texsource->palette == nullptr)
+ if ((tex_format == TEXFORMAT_RGB32 || tex_format == TEXFORMAT_ARGB32) && texsource->palette == nullptr && texsource->width == texsource->rowpixels)
{
memcpy((BYTE *)rect.pBits, texsource->base, sizeof(uint32_t) * texsource->width * texsource->height);
}
@@ -2362,11 +2376,11 @@ void texture_info::set_data(const render_texinfo *texsource, uint32_t flags)
break;
case TEXFORMAT_RGB32:
- copyline_rgb32_palette((uint32_t *)dst, (uint32_t *)texsource->base + y * texsource->rowpixels, texsource->width, texsource->palette);
+ copyline_rgb32((uint32_t *)dst, (uint32_t *)texsource->base + y * texsource->rowpixels, texsource->width, texsource->palette);
break;
case TEXFORMAT_ARGB32:
- copyline_argb32_palette((uint32_t *)dst, (uint32_t *)texsource->base + y * texsource->rowpixels, texsource->width, texsource->palette);
+ copyline_argb32((uint32_t *)dst, (uint32_t *)texsource->base + y * texsource->rowpixels, texsource->width, texsource->palette);
break;
case TEXFORMAT_YUY16: