static void open_screen(struct uae_prefs *p) { graphics_subshutdown(); current_resource_amigafb = 0; currprefs.gfx_correct_aspect = changed_prefs.gfx_correct_aspect; currprefs.gfx_fullscreen_ratio = changed_prefs.gfx_fullscreen_ratio; #ifdef PICASSO96 if (screen_is_picasso) { display_width = picasso_vidinfo.width ? picasso_vidinfo.width : 640; display_height = picasso_vidinfo.height ? picasso_vidinfo.height : 256; } else #endif { p->gfx_resolution = p->gfx_monitor.gfx_size.width ? (p->gfx_monitor.gfx_size.width > 600 ? 1 : 0) : 1; display_width = p->gfx_monitor.gfx_size.width ? p->gfx_monitor.gfx_size.width : 640; display_height = (p->gfx_monitor.gfx_size.height ? p->gfx_monitor.gfx_size.height : 256) << p->gfx_vresolution; } write_comm_pipe_u32(display_pipe, DISPLAY_SIGNAL_OPEN, 1); uae_sem_wait (&display_sem); if (prSDLScreen != NULL) { InitAmigaVidMode(p); init_row_map(); } calibrate_done = false; reset_sync(); }
static void open_screen(struct uae_prefs *p) { char layersize[20]; if(prSDLScreen != NULL) graphics_subshutdown(); if(!screen_is_picasso) { CalcPandoraWidth(p); if(curr_layer_width != p->gfx_size_fs.width) { snprintf(layersize, 20, "%dx480", p->gfx_size_fs.width); #ifndef WIN32 setenv("SDL_OMAP_LAYER_SIZE", layersize, 1); #endif } } else { #ifdef PICASSO96 if(picasso_vidinfo.height < 480) snprintf(layersize, 20, "%dx480", picasso_vidinfo.width); else snprintf(layersize, 20, "%dx%d", picasso_vidinfo.width, picasso_vidinfo.height); #endif #ifndef WIN32 setenv("SDL_OMAP_LAYER_SIZE", layersize, 1); #endif } #ifdef ANDROIDSDL update_onscreen(); #endif if(!screen_is_picasso) { if(prSDLScreen == NULL || prSDLScreen->w != p->gfx_size.width || prSDLScreen->h != p->gfx_size.height) { #if defined(PANDORA) && !defined(WIN32) prSDLScreen = SDL_SetVideoMode(p->gfx_size.width, p->gfx_size.height, 16, SDL_HWSURFACE|SDL_FULLSCREEN|SDL_DOUBLEBUF); #elif defined(PANDORA) && defined(WIN32) prSDLScreen = SDL_SetVideoMode(p->gfx_size.width, p->gfx_size.height, 16, SDL_SWSURFACE|SDL_DOUBLEBUF); #else prSDLScreen = SDL_SetVideoMode(p->gfx_size.width, p->gfx_size.height, 16, SDL_HWSURFACE|SDL_FULLSCREEN); #endif } } else { #ifdef PICASSO96 prSDLScreen = SDL_SetVideoMode(picasso_vidinfo.width, picasso_vidinfo.height, 16, SDL_HWSURFACE|SDL_FULLSCREEN|SDL_DOUBLEBUF); #endif } if(prSDLScreen != NULL) { InitAmigaVidMode(p); init_row_map(); } }
static void graphics_subinit(void) { if (prSDLScreen == NULL) { fprintf(stderr, "Unable to set video mode: %s\n", SDL_GetError()); return; } else { SDL_ShowCursor(SDL_DISABLE); InitAmigaVidMode(&currprefs); } }
static void open_screen(struct uae_prefs *p) { char layersize[20]; graphics_subshutdown(); if(!screen_is_picasso) { CalcPandoraWidth(p); snprintf(layersize, 20, "%dx480", p->gfx_size_fs.width); #ifndef WIN32 setenv("SDL_OMAP_LAYER_SIZE", layersize, 1); #endif } else { #ifdef PICASSO96 if(picasso_vidinfo.height < 480) snprintf(layersize, 20, "%dx480", picasso_vidinfo.width); else snprintf(layersize, 20, "%dx%d", picasso_vidinfo.width, picasso_vidinfo.height); #endif #ifndef WIN32 setenv("SDL_OMAP_LAYER_SIZE", layersize, 1); #endif } #ifndef WIN32 setenv("SDL_OMAP_VSYNC", "0", 1); #endif #ifdef ANDROIDSDL update_onscreen(); #endif if(!screen_is_picasso) { if(prSDLScreen == NULL || prSDLScreen->w != p->gfx_size.width || prSDLScreen->h != p->gfx_size.height) { #if defined(PANDORA) && !defined(WIN32) prSDLScreen = SDL_SetVideoMode(p->gfx_size.width, p->gfx_size.height, 16, SDL_HWSURFACE|SDL_FULLSCREEN|SDL_DOUBLEBUF); #elif defined(PANDORA) && defined(WIN32) prSDLScreen = SDL_SetVideoMode(p->gfx_size.width, p->gfx_size.height, 16, SDL_SWSURFACE|SDL_DOUBLEBUF); #else prSDLScreen = SDL_SetVideoMode(p->gfx_size.width, p->gfx_size.height, 16, SDL_HWSURFACE|SDL_FULLSCREEN); #endif } } else { #ifdef PICASSO96 prSDLScreen = SDL_SetVideoMode(picasso_vidinfo.width, picasso_vidinfo.height, 16, SDL_HWSURFACE|SDL_FULLSCREEN|SDL_DOUBLEBUF); #endif } if(prSDLScreen != NULL) { InitAmigaVidMode(p); init_row_map(); } current_vsync_frame = 0; fbdev = open("/dev/fb0", O_RDWR); if(fbdev != -1) { // Check if we have vsync with frame counter... current_vsync_frame = 0; ioctl(fbdev, OMAPFB_WAITFORVSYNC_FRAME, ¤t_vsync_frame); if(current_vsync_frame != 0) current_vsync_frame += 2; } }
static void open_screen(struct uae_prefs *p) { VC_DISPMANX_ALPHA_T alpha = { (DISPMANX_FLAGS_ALPHA_T ) (DISPMANX_FLAGS_ALPHA_FROM_SOURCE | DISPMANX_FLAGS_ALPHA_FIXED_ALL_PIXELS), 255, /*alpha 0->255*/ 0 }; uint32_t vc_image_ptr; int width; int height; #ifdef PICASSO96 if (screen_is_picasso) { width = picasso_vidinfo.width; height = picasso_vidinfo.height; } else #endif { p->gfx_resolution = p->gfx_size.width > 600 ? 1 : 0; width = p->gfx_size.width; height = p->gfx_size.height; } //if(prSDLScreen != NULL) //{ // SDL_FreeSurface(prSDLScreen); // prSDLScreen = NULL; //} if(Dummy_prSDLScreen == NULL ) { const SDL_VideoInfo* videoInfo = SDL_GetVideoInfo (); printf("DispmanX: Current resolution: %d x %d %d bpp\n",videoInfo->current_w, videoInfo->current_h, videoInfo->vfmt->BitsPerPixel); Dummy_prSDLScreen = SDL_SetVideoMode(videoInfo->current_w,videoInfo->current_h,16,SDL_SWSURFACE |SDL_FULLSCREEN); //Dummy_prSDLScreen = SDL_SetVideoMode(800,480,16,SDL_SWSURFACE ); } SDL_ShowCursor(SDL_DISABLE); // check if resolution hasn't change in menu. otherwise free the resources so that they will be re-generated with new resolution. if ((dispmanxresource_amigafb_1 != 0) && ((blit_rect.width != width) || (blit_rect.height != height) || (currprefs.gfx_correct_aspect != changed_prefs.gfx_correct_aspect))) { printf("Emulation resolution change detected.\n"); if(prSDLScreen != NULL ) { SDL_FreeSurface(prSDLScreen); prSDLScreen = 0; } graphics_dispmanshutdown(); vc_dispmanx_resource_delete( dispmanxresource_amigafb_1 ); vc_dispmanx_resource_delete( dispmanxresource_amigafb_2 ); dispmanxresource_amigafb_1 = 0; dispmanxresource_amigafb_2 = 0; } if (dispmanxresource_amigafb_1 == 0) { printf("Emulation resolution: Width %i Height: %i\n",width,height); currprefs.gfx_correct_aspect = changed_prefs.gfx_correct_aspect; prSDLScreen = SDL_CreateRGBSurface(SDL_SWSURFACE,width,height,16, Dummy_prSDLScreen->format->Rmask, Dummy_prSDLScreen->format->Gmask, Dummy_prSDLScreen->format->Bmask, Dummy_prSDLScreen->format->Amask); dispmanxdisplay = vc_dispmanx_display_open( 0 ); vc_dispmanx_display_get_info( dispmanxdisplay, &dispmanxdinfo); dispmanxresource_amigafb_1 = vc_dispmanx_resource_create( VC_IMAGE_RGB565, width, height, &vc_image_ptr); dispmanxresource_amigafb_2 = vc_dispmanx_resource_create( VC_IMAGE_RGB565, width, height, &vc_image_ptr); vc_dispmanx_rect_set( &blit_rect, 0, 0, width,height); vc_dispmanx_resource_write_data( dispmanxresource_amigafb_1, VC_IMAGE_RGB565, width *2, prSDLScreen->pixels, &blit_rect ); vc_dispmanx_rect_set( &src_rect, 0, 0, width << 16, height << 16 ); } // 16/9 to 4/3 ratio adaptation. if (currprefs.gfx_correct_aspect == 0) { // Fullscreen. vc_dispmanx_rect_set( &dst_rect, (dispmanxdinfo.width * 1)/100, (dispmanxdinfo.height * 2)/100 , dispmanxdinfo.width - (dispmanxdinfo.width * 2)/100 , dispmanxdinfo.height - (dispmanxdinfo.height * 4)/100 ); } else { // 4/3 shrink. vc_dispmanx_rect_set( &dst_rect, ((dispmanxdinfo.width * 13)/100) , (dispmanxdinfo.height * 2)/100 , (dispmanxdinfo.width - ((dispmanxdinfo.width * 26)/100)) , dispmanxdinfo.height - (dispmanxdinfo.height * 4)/100 ); } // For debug, in order to avoid full screen. //vc_dispmanx_rect_set( &dst_rect, (dispmanxdinfo.width /2), // (dispmanxdinfo.height /2) , // (dispmanxdinfo.width - (dispmanxdinfo.width * 6)/100 )/2, // (dispmanxdinfo.height - (dispmanxdinfo.height * 7)/100 )/2); if (DispManXElementpresent == 0) { DispManXElementpresent = 1; dispmanxupdate = vc_dispmanx_update_start( 10 ); dispmanxelement = vc_dispmanx_element_add( dispmanxupdate, dispmanxdisplay, 2000, // layer &dst_rect, dispmanxresource_amigafb_1, &src_rect, DISPMANX_PROTECTION_NONE, &alpha, NULL, // clamp DISPMANX_NO_ROTATE ); vc_dispmanx_update_submit(dispmanxupdate,NULL,NULL); //dispmanxupdate = vc_dispmanx_update_start( 10 ); } if(prSDLScreen != NULL) { InitAmigaVidMode(p); init_row_map(); } //framecnt = 1; // Don't draw frame before reset done }