You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
2.5 KiB
69 lines
2.5 KiB
//----------------------------------------------------------------------------
|
|
//
|
|
// palette.h
|
|
//
|
|
// Structures and prototypes ramp palette code.
|
|
//
|
|
// Copyright (C) Microsoft Corporation, 1997.
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
#ifndef _RAMPPALETTE_H_
|
|
#define _RAMPPALETTE_H_
|
|
|
|
#include "colall.h"
|
|
|
|
typedef void (*RLDDIPaletteSetColorMethod)(void*, int index,
|
|
int red, int green, int blue);
|
|
typedef int (*RLDDIPaletteAllocateColorMethod)(void*,
|
|
int red, int green, int blue);
|
|
typedef void (*RLDDIPaletteFreeColorMethod)(void*, int index);
|
|
|
|
typedef struct _RLDDIPaletteEntry RLDDIPaletteEntry;
|
|
|
|
typedef enum _PaletteState
|
|
{
|
|
PALETTE_FREE, /* not used, allocatable */
|
|
PALETTE_UNUSED, /* not used, not allocatable */
|
|
PALETTE_USED /* used, allocatable */
|
|
} PaletteState;
|
|
|
|
struct _RLDDIPaletteEntry {
|
|
LIST_MEMBER(_RLDDIPaletteEntry) list;
|
|
int usage; /* how many users (0 => free) */
|
|
unsigned char red, green, blue, pad1; /* intensity values */
|
|
PaletteState state;
|
|
};
|
|
|
|
#define HASH_SIZE 257
|
|
#define RGB_HASH(red, green, blue) (((red) << 8) ^ ((green) << 4) ^ (blue))
|
|
#define ENTRY_TO_INDEX(pal, entry) ((int)((entry) - (pal)->entries))
|
|
#define INDEX_TO_ENTRY(pal, index) (&(pal)->entries[index])
|
|
|
|
typedef struct _RLDDIPalette {
|
|
RLDDIPaletteEntry* entries; /* palette entries */
|
|
size_t size; /* number of entries in palette */
|
|
LIST_ROOT(name3, _RLDDIPaletteEntry) free; /* free list */
|
|
LIST_ROOT(name4, _RLDDIPaletteEntry) unused; /* colors not to use */
|
|
LIST_ROOT(name5, _RLDDIPaletteEntry) hash[HASH_SIZE];
|
|
|
|
void* priv;
|
|
RLDDIPaletteAllocateColorMethod allocate_color;
|
|
RLDDIPaletteFreeColorMethod free_color;
|
|
RLDDIPaletteSetColorMethod set_color;
|
|
|
|
/*
|
|
* A color allocator for use with RLDDIColormap.
|
|
*/
|
|
RLDDIColorAllocator alloc;
|
|
} RLDDIPalette;
|
|
|
|
RLDDIPalette* RLDDICreatePalette(PD3DI_RASTCTX pCtx, size_t size);
|
|
void RLDDIPaletteSetColor(RLDDIPalette* pal,
|
|
int index, int red, int green, int blue);
|
|
int RLDDIPaletteAllocateColor(RLDDIPalette* pal,
|
|
int red, int green, int blue);
|
|
void RLDDIPaletteFreeColor(RLDDIPalette* pal, int index);
|
|
void RLDDIDestroyPalette(RLDDIPalette* pal);
|
|
|
|
#endif // _RAMPPALETTE_H_
|