static HRESULT wined3d_palette_init(struct wined3d_palette *palette, struct wined3d_device *device, DWORD flags, const PALETTEENTRY *entries, void *parent) { HRESULT hr; palette->ref = 1; palette->parent = parent; palette->device = device; palette->flags = flags; palette->palNumEntries = wined3d_palette_size(flags); palette->hpal = CreatePalette((const LOGPALETTE *)&palette->palVersion); if (!palette->hpal) { WARN("Failed to create palette.\n"); return E_FAIL; } hr = wined3d_palette_set_entries(palette, 0, 0, wined3d_palette_size(flags), entries); if (FAILED(hr)) { WARN("Failed to set palette entries, hr %#x.\n", hr); DeleteObject(palette->hpal); return hr; } return WINED3D_OK; }
static HRESULT wined3d_palette_init(struct wined3d_palette *palette, struct wined3d_device *device, DWORD flags, unsigned int entry_count, const PALETTEENTRY *entries) { HRESULT hr; palette->ref = 1; palette->device = device; palette->flags = flags; palette->size = entry_count; if (FAILED(hr = wined3d_palette_set_entries(palette, 0, 0, entry_count, entries))) { WARN("Failed to set palette entries, hr %#x.\n", hr); return hr; } return WINED3D_OK; }
/***************************************************************************** * IDirectDrawPalette::SetEntries * * Sets the palette entries from a PALETTEENTRY structure. WineD3D takes * care for updating the surface. * * Params: * Flags: Flags, as usual * Start: First palette entry to set * Count: Number of entries to set * PalEnt: Source entries * * Returns: * D3D_OK on success * DDERR_INVALIDPARAMS if PalEnt is NULL * For details, see IWineD3DDevice::SetEntries * *****************************************************************************/ static HRESULT WINAPI IDirectDrawPaletteImpl_SetEntries(IDirectDrawPalette *iface, DWORD Flags, DWORD Start, DWORD Count, PALETTEENTRY *PalEnt) { IDirectDrawPaletteImpl *This = impl_from_IDirectDrawPalette(iface); HRESULT hr; TRACE("iface %p, flags %#x, start %u, count %u, entries %p.\n", iface, Flags, Start, Count, PalEnt); if(!PalEnt) return DDERR_INVALIDPARAMS; EnterCriticalSection(&ddraw_cs); hr = wined3d_palette_set_entries(This->wineD3DPalette, Flags, Start, Count, PalEnt); LeaveCriticalSection(&ddraw_cs); return hr; }
/***************************************************************************** * IDirectDrawPalette::SetEntries * * Sets the palette entries from a PALETTEENTRY structure. WineD3D takes * care for updating the surface. * * Params: * Flags: Flags, as usual * Start: First palette entry to set * Count: Number of entries to set * PalEnt: Source entries * * Returns: * D3D_OK on success * DDERR_INVALIDPARAMS if PalEnt is NULL * For details, see IWineD3DDevice::SetEntries * *****************************************************************************/ static HRESULT WINAPI ddraw_palette_SetEntries(IDirectDrawPalette *iface, DWORD flags, DWORD start, DWORD count, PALETTEENTRY *entries) { struct ddraw_palette *palette = impl_from_IDirectDrawPalette(iface); HRESULT hr; TRACE("iface %p, flags %#x, start %u, count %u, entries %p.\n", iface, flags, start, count, entries); if (!entries) return DDERR_INVALIDPARAMS; wined3d_mutex_lock(); hr = wined3d_palette_set_entries(palette->wined3d_palette, flags, start, count, entries); if (SUCCEEDED(hr) && palette->flags & DDPCAPS_PRIMARYSURFACE) ddraw_surface_update_frontbuffer(palette->ddraw->primary, NULL, FALSE); wined3d_mutex_unlock(); return hr; }