static void command_switch(void) { input_port_entry *switch_name; input_port_entry *switch_setting; /* special hack until we support video targets natively */ if (!strcmp(current_command->u.switch_args.name, "Video type")) { render_target *target = render_target_get_indexed(0); int view_index = 0; const char *view_name; while((view_name = render_target_get_view_name(target, view_index)) != NULL) { if (!strcmp(view_name, current_command->u.switch_args.value)) break; view_index++; } if (view_name) { render_target_set_view(target, view_index); return; } } find_switch(current_command->u.switch_args.name, current_command->u.switch_args.value, IPT_DIPSWITCH_NAME, IPT_DIPSWITCH_SETTING, &switch_name, &switch_setting); if (!switch_name || !switch_setting) { find_switch(current_command->u.switch_args.name, current_command->u.switch_args.value, IPT_CONFIG_NAME, IPT_CONFIG_SETTING, &switch_name, &switch_setting); } if (!switch_name) { state = STATE_ABORTED; report_message(MSG_FAILURE, "Cannot find switch named '%s'", current_command->u.switch_args.name); return; } if (!switch_setting) { state = STATE_ABORTED; report_message(MSG_FAILURE, "Cannot find setting '%s' on switch '%s'", current_command->u.switch_args.value, current_command->u.switch_args.name); return; } switch_name->default_value = switch_setting->default_value; }
static void set_starting_view(running_machine *machine, int index, sdl_window_info *window, const char *view) { const char *defview = options_get_string(machine->options(), SDLOPTION_VIEW( )); int viewindex; ASSERT_MAIN_THREAD(); // choose non-auto over auto if (strcmp(view, "auto") == 0 && strcmp(defview, "auto") != 0) view = defview; // query the video system to help us pick a view viewindex = video_get_view_for_target(machine, window->target, view, index, video_config.numscreens); // set the view render_target_set_view(window->target, viewindex); window->start_viewscreen=viewindex; }
static void save_frame_with(mame_file *fp, int scrnum, png_error (*write_handler)(mame_file *, mame_bitmap *)) { const render_primitive_list *primlist; INT32 width, height; int error; assert(scrnum >= 0 && scrnum < MAX_SCREENS); /* if no screens, do nothing */ if (snap_target == NULL) return; /* select the appropriate view in our dummy target */ render_target_set_view(snap_target, scrnum); /* get the minimum width/height and set it on the target */ render_target_get_minimum_size(snap_target, &width, &height); render_target_set_bounds(snap_target, width, height, 0); /* if we don't have a bitmap, or if it's not the right size, allocate a new one */ if (snap_bitmap == NULL || width != snap_bitmap->width || height != snap_bitmap->height) { if (snap_bitmap != NULL) bitmap_free(snap_bitmap); snap_bitmap = bitmap_alloc_format(width, height, BITMAP_FORMAT_RGB32); assert(snap_bitmap != NULL); } /* render the screen there */ primlist = render_target_get_primitives(snap_target); osd_lock_acquire(primlist->lock); rgb888_draw_primitives(primlist->head, snap_bitmap->base, width, height, snap_bitmap->rowpixels); osd_lock_release(primlist->lock); /* now do the actual work */ error = (*write_handler)(fp, snap_bitmap); }
static void set_starting_view(int index, win_window_info *window, const char *view) { const char *defview = options_get_string("view"); int viewindex = -1; assert(GetCurrentThreadId() == main_threadid); // choose non-auto over auto if (strcmp(view, "auto") == 0 && strcmp(defview, "auto") != 0) view = defview; // auto view just selects the nth view if (strcmp(view, "auto") != 0) { // scan for a matching view name for (viewindex = 0; ; viewindex++) { const char *name = render_target_get_view_name(window->target, viewindex); // stop scanning if we hit NULL if (name == NULL) { viewindex = -1; break; } if (mame_strnicmp(name, view, strlen(view)) == 0) break; } } // if we don't have a match, default to the nth view if (viewindex == -1) { int scrcount; // count the number of screens for (scrcount = 0; Machine->drv->screen[scrcount].tag != NULL; scrcount++) ; // if we have enough screens to be one per monitor, assign in order if (video_config.numscreens >= scrcount) { // find the first view with this screen and this screen only for (viewindex = 0; ; viewindex++) { UINT32 viewscreens = render_target_get_view_screens(window->target, viewindex); if (viewscreens == (1 << index)) break; if (viewscreens == 0) { viewindex = -1; break; } } } // otherwise, find the first view that has all the screens if (viewindex == -1) { for (viewindex = 0; ; viewindex++) { UINT32 viewscreens = render_target_get_view_screens(window->target, viewindex); if (viewscreens == (1 << scrcount) - 1) break; if (viewscreens == 0) break; } } } // make sure it's a valid view if (render_target_get_view_name(window->target, viewindex) == NULL) viewindex = 0; // set the view render_target_set_view(window->target, viewindex); }