{
case 16:
if (DDPixelFormat->u2.dwStencilBitDepth == 1) return WINED3DFMT_S1_UINT_D15_UNORM;
- WARN("Unknown depth stenil format: 16 z bits, %u stencil bits\n",
+ WARN("Unknown depth stencil format: 16 z bits, %u stencil bits.\n",
DDPixelFormat->u2.dwStencilBitDepth);
return WINED3DFMT_UNKNOWN;
case 32:
if (DDPixelFormat->u2.dwStencilBitDepth == 8) return WINED3DFMT_D24_UNORM_S8_UINT;
else if (DDPixelFormat->u2.dwStencilBitDepth == 4) return WINED3DFMT_S4X4_UINT_D24_UNORM;
- WARN("Unknown depth stenil format: 32 z bits, %u stencil bits\n",
+ WARN("Unknown depth stencil format: 32 z bits, %u stencil bits.\n",
DDPixelFormat->u2.dwStencilBitDepth);
return WINED3DFMT_UNKNOWN;
default:
- WARN("Unknown depth stenil format: %u z bits, %u stencil bits\n",
+ WARN("Unknown depth stencil format: %u z bits, %u stencil bits.\n",
DDPixelFormat->u1.dwZBufferBitDepth, DDPixelFormat->u2.dwStencilBitDepth);
return WINED3DFMT_UNKNOWN;
}
return WINED3DFMT_UNKNOWN;
}
+static float colour_to_float(DWORD colour, DWORD mask)
+{
+ if (!mask)
+ return 0.0f;
+ return (float)(colour & mask) / (float)mask;
+}
+
+BOOL wined3d_colour_from_ddraw_colour(const DDPIXELFORMAT *pf, const struct ddraw_palette *palette,
+ DWORD colour, struct wined3d_color *wined3d_colour)
+{
+ if (pf->dwFlags & DDPF_ALPHA)
+ {
+ DWORD size, mask;
+
+ size = pf->u1.dwAlphaBitDepth;
+ mask = size < 32 ? (1u << size) - 1 : ~0u;
+ wined3d_colour->r = 0.0f;
+ wined3d_colour->g = 0.0f;
+ wined3d_colour->b = 0.0f;
+ wined3d_colour->a = colour_to_float(colour, mask);
+ return TRUE;
+ }
+
+ if (pf->dwFlags & DDPF_FOURCC)
+ {
+ WARN("FourCC formats not supported.\n");
+ goto fail;
+ }
+
+ if (pf->dwFlags & DDPF_PALETTEINDEXED8)
+ {
+ PALETTEENTRY entry;
+
+ colour &= 0xff;
+ if (!palette || FAILED(wined3d_palette_get_entries(palette->wined3d_palette, 0, colour, 1, &entry)))
+ {
+ wined3d_colour->r = 0.0f;
+ wined3d_colour->g = 0.0f;
+ wined3d_colour->b = 0.0f;
+ }
+ else
+ {
+ wined3d_colour->r = entry.peRed / 255.0f;
+ wined3d_colour->g = entry.peGreen / 255.0f;
+ wined3d_colour->b = entry.peBlue / 255.0f;
+ }
+ wined3d_colour->a = colour / 255.0f;
+ return TRUE;
+ }
+
+ if (pf->dwFlags & DDPF_RGB)
+ {
+ wined3d_colour->r = colour_to_float(colour, pf->u2.dwRBitMask);
+ wined3d_colour->g = colour_to_float(colour, pf->u3.dwGBitMask);
+ wined3d_colour->b = colour_to_float(colour, pf->u4.dwBBitMask);
+ if (pf->dwFlags & DDPF_ALPHAPIXELS)
+ wined3d_colour->a = colour_to_float(colour, pf->u5.dwRGBAlphaBitMask);
+ else
+ wined3d_colour->a = 0.0f;
+ return TRUE;
+ }
+
+ if (pf->dwFlags & DDPF_ZBUFFER)
+ {
+ wined3d_colour->r = colour_to_float(colour, pf->u3.dwZBitMask);
+ if (pf->dwFlags & DDPF_STENCILBUFFER)
+ wined3d_colour->g = colour_to_float(colour, pf->u4.dwStencilBitMask);
+ else
+ wined3d_colour->g = 0.0f;
+ wined3d_colour->b = 0.0f;
+ wined3d_colour->a = 0.0f;
+ return TRUE;
+ }
+
+ FIXME("Unhandled pixel format.\n");
+ DDRAW_dump_pixelformat(pf);
+
+fail:
+ wined3d_colour->r = 0.0f;
+ wined3d_colour->g = 0.0f;
+ wined3d_colour->b = 0.0f;
+ wined3d_colour->a = 0.0f;
+
+ return FALSE;
+}
+
/*****************************************************************************
* Various dumping functions.
*