wined3d: Move get_dc palette updates to ddraw.
This commit is contained in:
parent
caeecfa223
commit
fd0189bbfa
|
@ -575,6 +575,13 @@ void DDSD2_to_DDSD(const DDSURFACEDESC2 *in, DDSURFACEDESC *out) DECLSPEC_HIDDEN
|
||||||
|
|
||||||
void multiply_matrix(D3DMATRIX *dst, const D3DMATRIX *src1, const D3DMATRIX *src2) DECLSPEC_HIDDEN;
|
void multiply_matrix(D3DMATRIX *dst, const D3DMATRIX *src1, const D3DMATRIX *src2) DECLSPEC_HIDDEN;
|
||||||
|
|
||||||
|
static inline BOOL format_is_paletteindexed(const DDPIXELFORMAT *fmt)
|
||||||
|
{
|
||||||
|
DWORD flags = DDPF_PALETTEINDEXED1 | DDPF_PALETTEINDEXED2 | DDPF_PALETTEINDEXED4
|
||||||
|
| DDPF_PALETTEINDEXED8 | DDPF_PALETTEINDEXEDTO8;
|
||||||
|
return !!(fmt->dwFlags & flags);
|
||||||
|
}
|
||||||
|
|
||||||
/* Used for generic dumping */
|
/* Used for generic dumping */
|
||||||
struct flag_info
|
struct flag_info
|
||||||
{
|
{
|
||||||
|
|
|
@ -1798,10 +1798,7 @@ static HRESULT WINAPI d3d_device2_GetCurrentViewport(IDirect3DDevice2 *iface, ID
|
||||||
|
|
||||||
static BOOL validate_surface_palette(struct ddraw_surface *surface)
|
static BOOL validate_surface_palette(struct ddraw_surface *surface)
|
||||||
{
|
{
|
||||||
return !(surface->surface_desc.u4.ddpfPixelFormat.dwFlags
|
return !format_is_paletteindexed(&surface->surface_desc.u4.ddpfPixelFormat)
|
||||||
& (DDPF_PALETTEINDEXED1 | DDPF_PALETTEINDEXED2
|
|
||||||
| DDPF_PALETTEINDEXED4 | DDPF_PALETTEINDEXED8
|
|
||||||
| DDPF_PALETTEINDEXEDTO8))
|
|
||||||
|| surface->palette;
|
|| surface->palette;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -461,8 +461,7 @@ static HRESULT ddraw_surface_set_palette(struct ddraw_surface *surface, IDirectD
|
||||||
return DDERR_INVALIDSURFACETYPE;
|
return DDERR_INVALIDSURFACETYPE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(surface->surface_desc.u4.ddpfPixelFormat.dwFlags & (DDPF_PALETTEINDEXED1 | DDPF_PALETTEINDEXED2
|
if (!format_is_paletteindexed(&surface->surface_desc.u4.ddpfPixelFormat))
|
||||||
| DDPF_PALETTEINDEXED4 | DDPF_PALETTEINDEXED8 | DDPF_PALETTEINDEXEDTO8)))
|
|
||||||
return DDERR_INVALIDPIXELFORMAT;
|
return DDERR_INVALIDPIXELFORMAT;
|
||||||
|
|
||||||
wined3d_mutex_lock();
|
wined3d_mutex_lock();
|
||||||
|
@ -2017,6 +2016,22 @@ static HRESULT WINAPI ddraw_surface7_GetDC(IDirectDrawSurface7 *iface, HDC *hdc)
|
||||||
hr = ddraw_surface_update_frontbuffer(surface, NULL, TRUE);
|
hr = ddraw_surface_update_frontbuffer(surface, NULL, TRUE);
|
||||||
if (SUCCEEDED(hr))
|
if (SUCCEEDED(hr))
|
||||||
hr = wined3d_surface_getdc(surface->wined3d_surface, hdc);
|
hr = wined3d_surface_getdc(surface->wined3d_surface, hdc);
|
||||||
|
|
||||||
|
if (SUCCEEDED(hr) && format_is_paletteindexed(&surface->surface_desc.u4.ddpfPixelFormat))
|
||||||
|
{
|
||||||
|
const struct ddraw_palette *palette;
|
||||||
|
|
||||||
|
if (surface->palette)
|
||||||
|
palette = surface->palette;
|
||||||
|
else if (surface->ddraw->primary)
|
||||||
|
palette = surface->ddraw->primary->palette;
|
||||||
|
else
|
||||||
|
palette = NULL;
|
||||||
|
|
||||||
|
if (palette)
|
||||||
|
wined3d_palette_apply_to_dc(palette->wineD3DPalette, *hdc);
|
||||||
|
}
|
||||||
|
|
||||||
wined3d_mutex_unlock();
|
wined3d_mutex_unlock();
|
||||||
switch(hr)
|
switch(hr)
|
||||||
{
|
{
|
||||||
|
|
|
@ -83,6 +83,12 @@ HRESULT CDECL wined3d_palette_get_entries(const struct wined3d_palette *palette,
|
||||||
return WINED3D_OK;
|
return WINED3D_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CDECL wined3d_palette_apply_to_dc(const struct wined3d_palette *palette, HDC dc)
|
||||||
|
{
|
||||||
|
if (SetDIBColorTable(dc, 0, 256, palette->colors) != 256)
|
||||||
|
ERR("Failed to set DIB color table.\n");
|
||||||
|
}
|
||||||
|
|
||||||
HRESULT CDECL wined3d_palette_set_entries(struct wined3d_palette *palette,
|
HRESULT CDECL wined3d_palette_set_entries(struct wined3d_palette *palette,
|
||||||
DWORD flags, DWORD start, DWORD count, const PALETTEENTRY *entries)
|
DWORD flags, DWORD start, DWORD count, const PALETTEENTRY *entries)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1378,7 +1378,7 @@ static void gdi_surface_realize_palette(struct wined3d_surface *surface)
|
||||||
/* Tell the swapchain to update the screen. */
|
/* Tell the swapchain to update the screen. */
|
||||||
if (surface->swapchain && surface == surface->swapchain->front_buffer)
|
if (surface->swapchain && surface == surface->swapchain->front_buffer)
|
||||||
{
|
{
|
||||||
SetDIBColorTable(surface->hDC, 0, 256, palette->colors);
|
wined3d_palette_apply_to_dc(palette, surface->hDC);
|
||||||
x11_copy_to_screen(surface->swapchain, NULL);
|
x11_copy_to_screen(surface->swapchain, NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3122,31 +3122,6 @@ HRESULT CDECL wined3d_surface_getdc(struct wined3d_surface *surface, HDC *dc)
|
||||||
surface_load_location(surface, WINED3D_LOCATION_DIB);
|
surface_load_location(surface, WINED3D_LOCATION_DIB);
|
||||||
surface_invalidate_location(surface, ~WINED3D_LOCATION_DIB);
|
surface_invalidate_location(surface, ~WINED3D_LOCATION_DIB);
|
||||||
|
|
||||||
if (surface->resource.format->id == WINED3DFMT_P8_UINT
|
|
||||||
|| surface->resource.format->id == WINED3DFMT_P8_UINT_A8_UNORM)
|
|
||||||
{
|
|
||||||
/* GetDC on palettized formats is unsupported in D3D9, and the method
|
|
||||||
* is missing in D3D8, so this should only be used for DX <=7
|
|
||||||
* surfaces (with non-device palettes). */
|
|
||||||
const RGBQUAD *colors = NULL;
|
|
||||||
|
|
||||||
if (surface->palette)
|
|
||||||
{
|
|
||||||
colors = surface->palette->colors;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
struct wined3d_swapchain *swapchain = surface->resource.device->swapchains[0];
|
|
||||||
struct wined3d_surface *dds_primary = swapchain->front_buffer;
|
|
||||||
|
|
||||||
if (dds_primary && dds_primary->palette)
|
|
||||||
colors = dds_primary->palette->colors;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (colors)
|
|
||||||
SetDIBColorTable(surface->hDC, 0, 256, colors);
|
|
||||||
}
|
|
||||||
|
|
||||||
surface->flags |= SFLAG_DCINUSE;
|
surface->flags |= SFLAG_DCINUSE;
|
||||||
surface->resource.map_count++;
|
surface->resource.map_count++;
|
||||||
|
|
||||||
|
|
|
@ -160,6 +160,7 @@
|
||||||
@ cdecl wined3d_palette_create(ptr long long ptr ptr)
|
@ cdecl wined3d_palette_create(ptr long long ptr ptr)
|
||||||
@ cdecl wined3d_palette_decref(ptr)
|
@ cdecl wined3d_palette_decref(ptr)
|
||||||
@ cdecl wined3d_palette_get_entries(ptr long long long ptr)
|
@ cdecl wined3d_palette_get_entries(ptr long long long ptr)
|
||||||
|
@ cdecl wined3d_palette_apply_to_dc(ptr ptr)
|
||||||
@ cdecl wined3d_palette_incref(ptr)
|
@ cdecl wined3d_palette_incref(ptr)
|
||||||
@ cdecl wined3d_palette_set_entries(ptr long long long ptr)
|
@ cdecl wined3d_palette_set_entries(ptr long long long ptr)
|
||||||
|
|
||||||
|
|
|
@ -2261,6 +2261,7 @@ HRESULT __cdecl wined3d_palette_create(struct wined3d_device *device, DWORD flag
|
||||||
ULONG __cdecl wined3d_palette_decref(struct wined3d_palette *palette);
|
ULONG __cdecl wined3d_palette_decref(struct wined3d_palette *palette);
|
||||||
HRESULT __cdecl wined3d_palette_get_entries(const struct wined3d_palette *palette,
|
HRESULT __cdecl wined3d_palette_get_entries(const struct wined3d_palette *palette,
|
||||||
DWORD flags, DWORD start, DWORD count, PALETTEENTRY *entries);
|
DWORD flags, DWORD start, DWORD count, PALETTEENTRY *entries);
|
||||||
|
void __cdecl wined3d_palette_apply_to_dc(const struct wined3d_palette *palette, HDC dc);
|
||||||
ULONG __cdecl wined3d_palette_incref(struct wined3d_palette *palette);
|
ULONG __cdecl wined3d_palette_incref(struct wined3d_palette *palette);
|
||||||
HRESULT __cdecl wined3d_palette_set_entries(struct wined3d_palette *palette,
|
HRESULT __cdecl wined3d_palette_set_entries(struct wined3d_palette *palette,
|
||||||
DWORD flags, DWORD start, DWORD count, const PALETTEENTRY *entries);
|
DWORD flags, DWORD start, DWORD count, const PALETTEENTRY *entries);
|
||||||
|
|
Loading…
Reference in New Issue