User Tag List

Resultados 1 al 1 de 1

Tema: Problema con opciones en menu.

  1. #1

    Fecha de ingreso
    Jan 2010
    Ubicación
    Getxo
    Mensajes
    1,280
    Mencionado
    6 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    50
    Agradecer Thanks Received 
    243
    Thanked in
    Agradecido 117 veces en [ARG:2 UNDEFINED] posts

    Problema con opciones en menu.

    Hola!

    Estoy intentando meter tres opciones en el menu del ohboy, para controlar los parametros de un filtro ya existente en gnuboy (saturacion, brillo, contraste)
    Las opciones que he puesto para cada uno de los campos son de 0% a 100%, en intervalos de 10.

    Para ello, he añadido el código en negrita (ver spoiler).

    red, green y blue son valores con los que trabaja gnuboy, esa parte no me da problemas.

    Funciona todo bien, excepto una cosa: al volver a entrar en el menu, despues de haber cambiado algun parámetro, siempre aparecen los tres en 0%. (los demas campos del menu, todos funcionan perfectamente)

    Las posiciones de las opciones seleccionadas en el menu (xcolor, xbright, xcontrast) se guardan en el archivo "ohboy.rc" igual que el resto de la configuracion, y supuestamente, al entrar al menu se deberían de cargar:

    xcolor = rc_getint("xcolor");
    xbright = rc_getint("xbright");
    xcontrast = rc_getint("xcontrast");

    Pero por alguna razon, estos tres no se cargan (mientras que todo lo demás si).

    Los puntos suspensivos en el codigo son por no poner lineas que no venían al caso (bastantes hay ya). Las importantes están en negrita.

    Spoiler: Ver
    Código:
    ...
    
    const char *lxcolor[] = {"0%", "10%", "20%", "30%", "40%", "50%", "60%", "70%", "80%", "90%", "100%", NULL};
    const char *lxbright[] = {"0%", "10%", "20%", "30%", "40%", "50%", "60%", "70%", "80%", "90%", "100%", NULL};
    const char *lxcontrast[] = {"0%", "10%", "20%", "30%", "40%", "50%", "60%", "70%", "80%", "90%", "100%", NULL};
    
    ...
    
    
    
    
    
    ...
    
    static char config[24][256];
    
    int menu_options(){
    
    	struct pal_s *palp=0;
    	int pal=0, skip=0, ret=0, cfilter=0, sfps=0, upscale=0, speed=0, i=0, border=0, xcolor=0, xbright=0, xcontrast=0;
    	int red1=0, red2=0, red3=0, red4=0, green1=0, green2=0, green3=0, green4=0, blue1=0, blue2=0, blue3=0, blue4=0;
    	char *tmp=0, *romdir=0;
    
    	FILE *file;
    #ifdef DINGOO_NATIVE
        /*
        **  100Mhz once caused Dingoo A320 MIPS to hang,
        **  when 100Mhz worked BW GB (Adjustris) game was running at 32 fps (versus 60 at 200Mhz).
        **  150Mhz has never worked on my Dingoo A320.
        */
        uintptr_t dingoo_clock_speeds[] = { 200000000, 250000000, 300000000, 336000000, 360000000, 400000000 /* , 430000000 Should not be needed */ };
        /*
        ** under-under clock option is for GB games.
        ** GB games can often be ran under the already
        ** underclocked Dingoo speed of 336Mhz
        */
    
        bool dingoo_clock_change_result;
    	uintptr_t tempCore=336000000; /* default Dingoo A320 clock speed */
    	uintptr_t tempMemory=112000000; /* default Dingoo A320 memory speed */
    	cpu_clock_get(&tempCore, &tempMemory);
    #endif /* DINGOO_NATIVE */
    
    	pal = findpal();
    	cfilter = rc_getint("colorfilter");
    	if(cfilter && !rc_getint("filterdmg")) cfilter = 2;
    	upscale = rc_getint("upscaler");
    	skip = rc_getint("frameskip")+1;
    	sfps = rc_getint("showfps");
    	border = rc_getint("border");
    	xcolor = rc_getint("xcolor");
    	xbright = rc_getint("xbright");
    	xcontrast = rc_getint("xcontrast");
    	
    #ifdef DINGOO_NATIVE
    	speed = 0;
    #else
    	speed = rc_getint("cpuspeed")/50 - 4;
    #endif /* DINGOO_NATIVE */
    	if(speed<0) speed = 0;
    	if(speed>11) speed = 11;
    
    	romdir = rc_getstr("romdir");
    	romdir = romdir ? strdup(romdir) : strdup(".");
    
    	start:
    
    	dialog_begin("Options",NULL);
    
    	dialog_option("Mono Palette",lpalettes,&pal);               /* 1 */
    	dialog_option("Color Filter",lcolorfilter,&cfilter);        /* 2 */
    	dialog_option("Saturation",lxcolor,&xcolor);                /* 3 */
    	dialog_option("Brightness",lxbright,&xbright);              /* 4 */
    	dialog_option("Contrast",lxcontrast,&xcontrast);            /* 5 */
    	dialog_option("Upscaler",lupscaler,&upscale);               /* 6 */
    	dialog_option("Frameskip",lframeskip,&skip);                /* 7 */
    	dialog_option("Show FPS",lsdl_showfps,&sfps);               /* 8 */
    	dialog_option("Show Border", lborder, &border);             /* 9 */
    #if defined(WIZ) || defined(DINGOO_NATIVE)
    	dialog_option("Clock Speed",lclockspeeds,&speed);           /* 10 */
    #else
    	dialog_text("Clock Speed","Default",0);                     /* 10 */
    #endif
    	dialog_text("Rom Path",romdir,FIELD_SELECTABLE);            /* 11 */
    	#ifdef GNUBOY_HARDWARE_VOLUME
    	dialog_option("Volume", volume_levels, &volume_hardware);   /* 12 *//* this is not the OSD volume.. */
    	#else
    	dialog_text("Volume", "Default", 0);                        /* 12 */ /* this is not the OSD volume.. */
    	#endif /* GNBOY_HARDWARE_VOLUME */
    	dialog_text(NULL,NULL,0);                                   /* 13 */
    	dialog_text("Apply",NULL,FIELD_SELECTABLE);                 /* 14 */
    	dialog_text("Apply & Save",NULL,FIELD_SELECTABLE);          /* 15 */
    	dialog_text("Cancel",NULL,FIELD_SELECTABLE);                /* 16 */
    
    
    	switch(ret=dialog_end()){
    		case 11: /* "Rom Path" romdir */
    			tmp = menu_requestdir("Select Rom Directory",romdir);
    			if(tmp){
    				free(romdir);
    				romdir = tmp;
    			}
    			goto start;
    		case 16: /* Cancel */
    			return ret;
    			break;
    		case 14: /* Apply */
    		case 15: /* Apply & Save */
    			#ifdef GNUBOY_HARDWARE_VOLUME
    			pcm_volume(volume_hardware * 10);
    			#endif /* GNBOY_HARDWARE_VOLUME */
    			palp = &gbpal[pal];
    			if(speed)
    			{
    #ifdef DINGOO_NATIVE
                    /*
                    ** For now do NOT plug in into settings system, current
                    ** (Wiz) speed system is focused on multiples of 50Mhz.
                    ** Dingoo default clock speed is 336Mhz (CPU certified for
                    ** 360, 433MHz is supposed to be possible).
                    ** Only set clock speed if changed in options each and
                    ** everytime - do not use config file
                    */
                    --speed;
                    /* check menu response is withing the preset array range/size */
                    if (speed > (sizeof(dingoo_clock_speeds)/sizeof(uintptr_t) - 1) )
                        speed = 0;
                    
                    tempCore = dingoo_clock_speeds[speed];
                    dingoo_clock_change_result = cpu_clock_set(tempCore);
                    
                    tempCore=tempMemory=0;
                    cpu_clock_get(&tempCore, &tempMemory); /* currently unused */
                    /* TODO display clock speed next to on screen FPS indicator */
    #endif /* DINGOO_NATIVE */
        
    				speed = speed*50 + 200;
    			}
    
    			red1 = ((85 + (xcolor * 17)) * (xbright * 0.1));
    			red2 = ((85 - (xcolor * 8.5)) * (xbright * 0.1));
    			red3 = ((85 - (xcolor * 8.5)) * (xbright * 0.1));
    			red4 = (255 - (xcontrast * 25.5));
    			green1 = ((85 - (xcolor * 8.5)) * (xbright * 0.1));
    			green2 = ((85 + (xcolor * 17)) * (xbright * 0.1));
    			green3 = ((85 - (xcolor * 8.5)) * (xbright * 0.1));
    			green4 = (255 - (xcontrast * 25.5));
    			blue1 = ((85 - (xcolor * 8.5)) * (xbright * 0.1));
    			blue2 = ((85 - (xcolor * 8.5)) * (xbright * 0.1));
    			blue3 = ((85 + (xcolor * 17)) * (xbright * 0.1));
    			blue4 = (255 - (xcontrast * 25.5));
    
    			sprintf(config[0],"set dmg_bgp 0x%.6x 0x%.6x 0x%.6x 0x%.6x", palp->dmg_bgp[0], palp->dmg_bgp[1], palp->dmg_bgp[2], palp->dmg_bgp[3]);
    			sprintf(config[1],"set dmg_wndp 0x%.6x 0x%.6x 0x%.6x 0x%.6x",palp->dmg_wndp[0],palp->dmg_wndp[1],palp->dmg_wndp[2],palp->dmg_wndp[3]);
    			sprintf(config[2],"set dmg_obp0 0x%.6x 0x%.6x 0x%.6x 0x%.6x",palp->dmg_obp0[0],palp->dmg_obp0[1],palp->dmg_obp0[2],palp->dmg_obp0[3]);
    			sprintf(config[3],"set dmg_obp1 0x%.6x 0x%.6x 0x%.6x 0x%.6x",palp->dmg_obp1[0],palp->dmg_obp1[1],palp->dmg_obp1[2],palp->dmg_obp1[3]);
    			sprintf(config[4],"set colorfilter %i",cfilter!=0);
    			sprintf(config[5],"set filterdmg %i",cfilter==1);
    			sprintf(config[6],"set upscaler %i",upscale);
    			sprintf(config[7],"set frameskip %i",skip-1);
    			sprintf(config[8],"set showfps %i",sfps);
    			sprintf(config[9], "set border %i", border);
    			sprintf(config[10],"set cpuspeed %i",speed);
    			#ifdef DINGOO_NATIVE /* FIXME Windows too..... if (DIRSEP_CHAR == '\\').... */
    			{
    				char tmp_path[PATH_MAX];
    				char *dest, *src;
    				dest = &tmp_path[0];
    				src = romdir;
    				
    				/* escape the path seperator (should escape other things too.) */
    				while(*dest = *src++)
    				{
    					if (*dest == DIRSEP_CHAR)
    					{
    						dest++;
    						*dest = DIRSEP_CHAR;
    					}
    					dest++;
    				}
    			
    				sprintf(config[11], "set romdir \"%s\"", tmp_path);
    			}
    			#else
    			sprintf(config[11],"set romdir \"%s\"",romdir);
    			#endif /* DINGOO_NATIVE */
    			sprintf(config[12],"set xcolor %i", xcolor);
    			sprintf(config[13],"set xbright %i", xbright);
    			sprintf(config[14],"set xcontrast %i", xcontrast);
    			sprintf(config[15],"set red %i %i %i %i", red1, red2, red3, red4);
    			sprintf(config[16],"set green %i %i %i %i", green1, green2, green3, green4);
    			sprintf(config[17],"set blue %i %i %i %i", blue1, blue2, blue3, blue4);
    			
    			for(i=0; i<18; i++)
    				rc_command(config[i]);
    
    			pal_dirty();
    
    			if (ret == 15){ /* Apply & Save */
    				file = fopen("ohboy.rc","w");
    				for(i=0; i<18; i++){
    					fputs(config[i],file);
    					fputs("\n",file);
    				}
    				fclose(file);
    			}
    			vid_init();
    			scaler_init(0);
    
    		break;
    	}
    
    	free(romdir);
    
    	return ret;
    }



    El output en el archivo ohboy.rc es correcto. Al guardar la configuracion queda asi:

    Spoiler: Ver
    Código:
    set dmg_bgp 0x0a9664 0x3e7e1b 0x3c4e08 0x363200
    set dmg_wndp 0x0a9664 0x3e7e1b 0x3c4e08 0x363200
    set dmg_obp0 0x0a9664 0x3e7e1b 0x3c4e08 0x363200
    set dmg_obp1 0x0a9664 0x3e7e1b 0x3c4e08 0x363200
    set colorfilter 1
    set filterdmg 0
    set upscaler 0
    set frameskip 0
    set showfps 0
    set border 2
    set cpuspeed 0
    set romdir "roms"
    set xcolor 8
    set xbright 8
    set xcontrast 8
    set red 176 13 13 51
    set green 13 176 13 51
    set blue 13 13 176 51


    Como veis en el screenshot, al entrar en el menu, siempre aparecen esas 3 opciones (saturation, brightness y contrast)en 0%, aunque en el archivo rc está guardada la configuracion verdadera.
    No entiendo por qué no funciona bien, está escrito exactamente igual que las demas opciones (que sí funcionan).
    Imágenes adjuntadas Imágenes adjuntadas  
    Última edición por hi-ban; 20/11/2011 a las 16:59 Razón: añadir screenshot

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •