예제 #1
0
void palette_init(running_machine *machine)
{
	palette_private *palette = auto_malloc(sizeof(*palette));

	/* request cleanup */
	machine->palette_data = palette;
	add_exit_callback(machine, palette_exit);

	/* reset all our data */
	memset(palette, 0, sizeof(*palette));
	palette->format = machine->screen[0].format;

	/* determine the color mode */
	switch (palette->format)
	{
		case BITMAP_FORMAT_INDEXED16:
			/* indexed modes are fine for everything */
			break;

		case BITMAP_FORMAT_RGB15:
		case BITMAP_FORMAT_RGB32:
			/* RGB modes can't use color tables */
			assert(machine->drv->color_table_len == 0);
			break;

		case BITMAP_FORMAT_INVALID:
			/* invalid format means no palette - or at least it should */
			assert(machine->drv->total_colors == 0);
			assert(machine->drv->color_table_len == 0);
			return;

		default:
			fatalerror("Unsupported screen bitmap format!");
			break;
	}

	/* allocate all the data structures */
	if (machine->drv->total_colors > 0)
	{
		int numcolors;

		allocate_palette(machine, palette);
		allocate_color_tables(machine, palette);
		allocate_shadow_tables(machine, palette);

		/* set up save/restore of the palette */
		numcolors = palette_get_num_colors(machine->palette);
		palette->save_pen = auto_malloc(sizeof(*palette->save_pen) * numcolors);
		palette->save_bright = auto_malloc(sizeof(*palette->save_bright) * numcolors);
		state_save_register_global_pointer(palette->save_pen, numcolors);
		state_save_register_global_pointer(palette->save_bright, numcolors);
		state_save_register_func_presave(palette_presave);
		state_save_register_func_postload(palette_postload);
	}
}
예제 #2
0
파일: m62.c 프로젝트: antervud/MAMEHub
void m62_state::m62_amplify_contrast(palette_t *palette, UINT32 numcolors)
{
	// m62 palette is very dark, so amplify default contrast
	UINT32 i, ymax=1;
	if (!numcolors) numcolors = palette_get_num_colors(palette);

	// find maximum brightness
	for (i=0;i < numcolors;i++)
	{
		rgb_t rgb = palette_entry_get_color(palette,i);
		UINT32 y = 299 * RGB_RED(rgb) + 587 * RGB_GREEN(rgb) + 114 * RGB_BLUE(rgb);
		ymax = MAX(ymax, y);
	}

	palette_set_contrast(palette, 255000.0/ymax);
}
예제 #3
0
void palette_config(running_machine *machine)
{
	int total_colors = (machine->palette == NULL) ? 0 : palette_get_num_colors(machine->palette) * palette_get_num_groups(machine->palette);
	pen_t *remapped_colortable = NULL;
	UINT16 *colortable = NULL;
	int i;

	/* allocate memory for the colortables, if needed */
	if (machine->drv->color_table_len > 0)
	{
		/* first for the raw colortable */
		colortable = auto_malloc(machine->drv->color_table_len * sizeof(colortable[0]));
		for (i = 0; i < machine->drv->color_table_len; i++)
			colortable[i] = i % total_colors;

		/* then for the remapped colortable */
		remapped_colortable = auto_malloc(machine->drv->color_table_len * sizeof(remapped_colortable[0]));
	}

	/* now let the driver modify the initial palette and colortable */
	if (machine->drv->init_palette)
		(*machine->drv->init_palette)(machine, colortable, memory_region(REGION_PROMS));

	/* now compute the remapped_colortable */
	for (i = 0; i < machine->drv->color_table_len; i++)
	{
		pen_t color = colortable[i];

		/* check for invalid colors set by machine->drv->init_palette */
		assert(color < total_colors);
		remapped_colortable[i] = machine->pens[color];
	}

	/* now we can set the final colortables */
	machine->game_colortable = colortable;
	machine->remapped_colortable = (remapped_colortable != NULL) ? remapped_colortable : machine->pens;

	/* set the color table base for each graphics element */
	for (i = 0; i < MAX_GFX_ELEMENTS; i++)
		if (machine->gfx[i] != NULL)
			machine->gfx[i]->color_base = machine->drv->gfxdecodeinfo[i].color_codes_start;
}
예제 #4
0
void palette_init(running_machine *machine)
{
	int format;
	palette_private *palette = auto_malloc(sizeof(*palette));
	const device_config *device = video_screen_first(machine->config);

	/* get the format from the first screen, or use BITMAP_FORMAT_INVALID, if screenless */
	if (device != NULL)
	{
		screen_config *config = device->inline_config;
		format = config->format;
	}
	else
		format = BITMAP_FORMAT_INVALID;

	/* request cleanup */
	machine->palette_data = palette;
	add_exit_callback(machine, palette_exit);

	/* reset all our data */
	memset(palette, 0, sizeof(*palette));
	palette->format = format;

	/* determine the color mode */
	switch (format)
	{
		case BITMAP_FORMAT_INDEXED16:
		case BITMAP_FORMAT_RGB15:
		case BITMAP_FORMAT_RGB32:
			/* indexed and RGB modes are fine for everything */
			break;

		case BITMAP_FORMAT_INVALID:
			/* invalid format means no palette - or at least it should */
			assert(machine->config->total_colors == 0);
			return;

		default:
			fatalerror("Unsupported screen bitmap format!");
			break;
	}

	/* allocate all the data structures */
	if (machine->config->total_colors > 0)
	{
		int numcolors;

		allocate_palette(machine, palette);
		allocate_color_tables(machine, palette);
		allocate_shadow_tables(machine, palette);

		/* set up save/restore of the palette */
		numcolors = palette_get_num_colors(machine->palette);
		palette->save_pen = auto_malloc(sizeof(*palette->save_pen) * numcolors);
		palette->save_bright = auto_malloc(sizeof(*palette->save_bright) * numcolors);
		state_save_register_global_pointer(palette->save_pen, numcolors);
		state_save_register_global_pointer(palette->save_bright, numcolors);
		state_save_register_presave(machine, palette_presave, palette);
		state_save_register_postload(machine, palette_postload, palette);
	}
}