diff options
| author | SND\ckain_cp <SND\ckain_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97> | 2014-01-21 12:42:41 +0000 |
|---|---|---|
| committer | SND\ckain_cp <SND\ckain_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97> | 2014-01-21 12:42:41 +0000 |
| commit | fd5421e7c297666a3df6165dc421bd72f5c7f68b (patch) | |
| tree | 35d90fe1094001c99f5d815bdfaca3f2de4deaeb /plugins | |
| parent | 5c4f85b8aef9c03c8396edffa0b4c1e59d49f57a (diff) | |
| download | pcsxr-fd5421e7c297666a3df6165dc421bd72f5c7f68b.tar.gz | |
Xvideo: Use YUV mode from primary Xv adapter rather than RGB mode from non-primary adapter. Fixes Intel adapter black screen. Also Xv's sync on vblank is now cfg param and disabled by default.
git-svn-id: https://pcsxr.svn.codeplex.com/svn/pcsxr@88391 e17a0e51-4ae3-4d35-97c3-1a29b211df97
Diffstat (limited to 'plugins')
| -rwxr-xr-x | plugins/dfxvideo/draw.c | 236 | ||||
| -rwxr-xr-x | plugins/dfxvideo/gpu.c | 4 | ||||
| -rwxr-xr-x | plugins/dfxvideo/gpucfg-0.1df/dfxvideo.ui | 21 | ||||
| -rwxr-xr-x | plugins/dfxvideo/gpucfg-0.1df/main.c | 240 |
4 files changed, 278 insertions, 223 deletions
diff --git a/plugins/dfxvideo/draw.c b/plugins/dfxvideo/draw.c index 8cdaa624..2215a699 100755 --- a/plugins/dfxvideo/draw.c +++ b/plugins/dfxvideo/draw.c @@ -44,6 +44,10 @@ int iFVDisplay = 0; PSXPoint_t ptCursorPoint[8]; unsigned short usCursorActive = 0; +// This could be used to select specific mode known to work. +// TODO implement as a cfg param if needed for wider compatibility among GPU cards +unsigned int uOverrideMode = 0x59565955U; + //unsigned int LUT16to32[65536]; //unsigned int RGBtoYUV[65536]; @@ -53,16 +57,15 @@ unsigned short usCursorActive = 0; #include <X11/extensions/XShm.h> int xv_port = -1; int xv_id = -1; -int xv_depth = 0; -int yuv_port = -1; -int yuv_id = -1; -int use_yuv = 0; -int xv_vsync = 0; +int use_yuv = False; +int xv_vsync = False; XShmSegmentInfo shminfo; int finalw,finalh; -extern XvImage *XvShmCreateImage(Display*, XvPortID, int, char*, int, int, XShmSegmentInfo*); + +Screen* screen; +//extern XvImage *XvShmCreateImage(Display*, XvPortID, int, char*, int, int, XShmSegmentInfo*); #include <time.h> @@ -982,7 +985,6 @@ void CreateDisplay(void) { XSetWindowAttributes winattr; int myscreen; - Screen * screen; XEvent event; XSizeHints hints; XWMHints wm_hints; @@ -1003,6 +1005,10 @@ void CreateDisplay(void) XClassHint* classHint; + int yuv_port = -1, yuv_id = -1; + int rgb_port = -1, rgb_id = -1; + int xv_depth = 0; + // Open display display = XOpenDisplay(NULL); @@ -1013,109 +1019,139 @@ void CreateDisplay(void) return; } - myscreen=DefaultScreen(display); // desktop fullscreen switch if (!iWindowMode) fx = 1; screen=DefaultScreenOfDisplay(display); + myscreen=DefaultScreen(display); + root_window_id=RootWindow(display, myscreen); + + //Look for an Xvideo RGB port + ret = XvQueryAdaptors(display, root_window_id, &p_num_adaptors, &ai); + if (ret != Success) { + if (ret == XvBadExtension) + printf("XvBadExtension returned at XvQueryExtension.\n"); + else + if (ret == XvBadAlloc) + printf("XvBadAlloc returned at XvQueryExtension.\n"); + else + printf("other error happaned at XvQueryAdaptors.\n"); + + exit(-1); + } - root_window_id=RootWindow(display,DefaultScreen(display)); - - //Look for an Xvideo RGB port - ret = XvQueryAdaptors(display, root_window_id, &p_num_adaptors, &ai); - if (ret != Success) { - if (ret == XvBadExtension) - printf("XvBadExtension returned at XvQueryExtension.\n"); - else - if (ret == XvBadAlloc) - printf("XvBadAlloc returned at XvQueryExtension.\n"); - else - printf("other error happaned at XvQueryAdaptors.\n"); - - exit(-1); - } - - depth = DefaultDepth(display, myscreen); + depth = DefaultDepth(display, myscreen); - for (i = 0; i < p_num_adaptors; i++) { - p_num_ports = ai[i].base_id + ai[i].num_ports; - for (p = ai[i].base_id; p < p_num_ports; p++) { - fo = XvListImageFormats(display, p, &formats); - for (j = 0; j < formats; j++) { - //backup YUV mode - //hmm, should I bother check guid == 55595659-0000-0010-8000-00aa00389b71? - //and check byte order? fo[j].byte_order == LSBFirst + for (i = 0; i < p_num_adaptors; i++) { + p_num_ports = ai[i].base_id + ai[i].num_ports; + for (p = ai[i].base_id; p < p_num_ports; p++) { + fo = XvListImageFormats(display, p, &formats); + for (j = 0; j < formats; j++) { + //Check for compatible YUV modes for backup + //hmm, should I bother check guid == 55595659-0000-0010-8000-00aa00389b71? + //and check byte order? fo[j].byte_order == LSBFirst #ifdef __BIG_ENDIAN__ - if ( fo[j].type == XvYUV && fo[j].bits_per_pixel == 16 && fo[j].format == XvPacked && strncmp("YUYV", fo[j].component_order, 5) == 0 ) + if ( fo[j].type == XvYUV && fo[j].bits_per_pixel == 16 && fo[j].format == XvPacked && strncmp("YUYV", fo[j].component_order, 5) == 0 ) #else - if ( fo[j].type == XvYUV && fo[j].bits_per_pixel == 16 && fo[j].format == XvPacked && strncmp("UYVY", fo[j].component_order, 5) == 0 ) + if ( fo[j].type == XvYUV && fo[j].bits_per_pixel == 16 && fo[j].format == XvPacked && strncmp("UYVY", fo[j].component_order, 5) == 0 ) #endif - { - yuv_port = p; - yuv_id = fo[j].id; - } - if (fo[j].type == XvRGB && fo[j].bits_per_pixel == 32) - { - xv_port = p; - xv_id = fo[j].id; - xv_depth = fo[j].depth; - printf("RGB mode found. id: %x, depth: %d\n", xv_id, xv_depth); - - if (xv_depth != depth) { - printf("Warning: Depth does not match screen depth (%d)\n", depth); - } - else { - //break out of loops - j = formats; - p = p_num_ports; - i = p_num_adaptors; - } - } - } - if (fo) - XFree(fo); - } - } - if (p_num_adaptors > 0) - XvFreeAdaptorInfo(ai); - if (xv_port == -1 && yuv_port == -1) - { - printf("RGB & YUV not found. Quitting.\n"); - exit(-1); - } - else if (xv_port == -1 && yuv_port != -1) - { - use_yuv = 1; - printf("RGB not found. Using YUV.\n"); - xv_port = yuv_port; - xv_id = yuv_id; - } - else if (xv_depth && xv_depth != depth && yuv_port != -1) - { - use_yuv = 1; - printf("Acceptable RGB mode not found. Using YUV.\n"); - xv_port = yuv_port; - xv_id = yuv_id; - } + { + yuv_port = p; + yuv_id = fo[j].id; + } + if (fo[j].type == XvRGB && fo[j].bits_per_pixel == 32) + { + rgb_port = p; + rgb_id = fo[j].id; + xv_depth = fo[j].depth; + printf("RGB mode found. id: %x, depth: %d\n", xv_id, xv_depth); + + if (xv_depth != depth) { + printf("Warning: Depth does not match screen depth (%d)\n", depth); + } + else { + //break out of loops + j = formats; + p = p_num_ports; + i = p_num_adaptors; + } + } + + // Are we searching for a specific mode? + /* + if ( fo[j].id == uOverrideMode) { + if (fo[j].type == XvYUV) { + xv_id = yuv_id = fo[j].id; + xv_port = yuv_port = p; + use_yuv = True; + } else if (fo[j].type == XvRGB) { + xv_id = rgb_id = fo[j].id; + xv_port = rgb_port = p; + //xv_depth = fo[j].depth; + use_yuv = False; + } + // Get out + j = formats; + p = p_num_ports; + i = p_num_adaptors; + //break; + }*/ + } + if (fo) + XFree(fo); + } + if (yuv_port != -1) i = p_num_adaptors; // TODO: at least intel adapters >0 just display black image + } + if (p_num_adaptors > 0) + XvFreeAdaptorInfo(ai); + if (xv_port == -1 && rgb_port == -1 && yuv_port == -1) + { + printf("RGB or YUV not available for this adapter. See xvinfo. Quitting.\n"); + exit(-1); + } + else if (xv_port != -1) { + printf("Using explicit mode id = %x.\n", uOverrideMode); + } + else if (rgb_port == -1 && yuv_port != -1) + { + use_yuv = True; + printf("RGB not found. Using YUV.\n"); + xv_port = yuv_port; + xv_id = yuv_id; + } + else if (xv_depth && xv_depth != depth && yuv_port != -1) + { + use_yuv = True; + printf("Acceptable RGB mode not found. Using YUV.\n"); + xv_port = yuv_port; + xv_id = yuv_id; + } + else if (rgb_port != -1) { + xv_port = rgb_port; + xv_id = rgb_id; + } - Atom atom_vsync = xv_intern_atom_if_exists(display, "XV_SYNC_TO_VBLANK"); - if (atom_vsync != None) { - XvGetPortAttribute(display, xv_port, atom_vsync, &xv_vsync); - XvSetPortAttribute(display, xv_port, atom_vsync, 0); - } + if ((dwActFixes&0x800)) { // Try to use Xv's sync + printf("Jebac\n"); + Atom atom_vsync = xv_intern_atom_if_exists(display, "XV_SYNC_TO_VBLANK"); + if (atom_vsync != None) { + XvGetPortAttribute(display, xv_port, atom_vsync, &xv_vsync); + XvSetPortAttribute(display, xv_port, atom_vsync, 0); + } + } -myvisual = 0; + myvisual = 0; -if(XMatchVisualInfo(display,myscreen, depth, TrueColor, &vi)) - myvisual = &vi; + if(XMatchVisualInfo(display,myscreen, depth, TrueColor, &vi)) + myvisual = &vi; -if (!myvisual) -{ - fprintf(stderr,"Failed to obtain visual!\n"); - DestroyDisplay(); - return; -} + if (!myvisual) + { + fprintf(stderr,"Failed to obtain visual!\n"); + DestroyDisplay(); + return; + } if(myvisual->red_mask==0x00007c00 && myvisual->green_mask==0x000003e0 && @@ -1576,7 +1612,6 @@ __inline void MaintainAspect(uint32_t * dx, uint32_t * dy, uint32_t * dw, uint32 void DoBufferSwap(void) { - Screen *screen; Window _dw; XvImage *xvi; unsigned int dstx, dsty; @@ -1607,14 +1642,11 @@ void DoBufferSwap(void) } XGetGeometry(display, window, &_dw, (int *)&_d, (int *)&_d, &_w, &_h, &_d, &_d); - if (use_yuv) { - xvi = XvShmCreateImage(display, yuv_port, yuv_id, 0, finalw, finalh, &shminfo); - } else - xvi = XvShmCreateImage(display, xv_port, xv_id, 0, finalw, finalh, &shminfo); + xvi = XvShmCreateImage(display, xv_port, xv_id, 0, finalw, finalh, &shminfo); xvi->data = shminfo.shmaddr; - screen=DefaultScreenOfDisplay(display); + if (!screen) screen=DefaultScreenOfDisplay(display); //screennum = DefaultScreen(display); if (!iWindowMode) { diff --git a/plugins/dfxvideo/gpu.c b/plugins/dfxvideo/gpu.c index 10baf531..a477a411 100755 --- a/plugins/dfxvideo/gpu.c +++ b/plugins/dfxvideo/gpu.c @@ -819,10 +819,10 @@ void ChangeWindowMode(void) // TOGGLE FULLSCREEN - WI void ChangeWindowMode(void) // TOGGLE FULLSCREEN - WINDOW { - extern Display *display; + extern Display *display; extern Window window; extern int root_window_id; - Screen *screen; + extern Screen *screen; XSizeHints hints; MotifWmHints mwmhints; Atom mwmatom; diff --git a/plugins/dfxvideo/gpucfg-0.1df/dfxvideo.ui b/plugins/dfxvideo/gpucfg-0.1df/dfxvideo.ui index 2530f076..6acee0d6 100755 --- a/plugins/dfxvideo/gpucfg-0.1df/dfxvideo.ui +++ b/plugins/dfxvideo/gpucfg-0.1df/dfxvideo.ui @@ -597,6 +597,27 @@ <property name="y_options"></property> </packing> </child> + <child> + <object class="GtkCheckButton" id="checkFix12"> + <property name="label" translatable="yes">Use Xv VSync on vblank</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="has_tooltip">True</property> + <property name="tooltip_text" translatable="yes">Try to use Xv's vsyncing if available (warning: may be unstable)</property> + <property name="use_underline">True</property> + <property name="xalign">0</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">5</property> + <property name="bottom_attach">6</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + </packing> + </child> </object> </child> </object> diff --git a/plugins/dfxvideo/gpucfg-0.1df/main.c b/plugins/dfxvideo/gpucfg-0.1df/main.c index fdf02d24..805495e6 100755 --- a/plugins/dfxvideo/gpucfg-0.1df/main.c +++ b/plugins/dfxvideo/gpucfg-0.1df/main.c @@ -41,14 +41,14 @@ int set_limit (char *p, int len, int lower, int upper) int val = 0; if (p) - val = atoi(p + len); + val = atoi(p + len); /* printf("Checking for val %d greater than %d and lower than %d, ", val, lower, upper);*/ if (val < lower) - val = lower; + val = lower; if (val > upper) - val = upper; + val = upper; /* printf ("val is now %d\n", val);*/ - return val; + return val; } void on_about_clicked(GtkWidget *widget, gpointer user_data) @@ -59,62 +59,64 @@ void on_about_clicked(GtkWidget *widget, gpointer user_data) void on_fullscreen_toggled(GtkWidget *widget, gpointer user_data) { - GtkWidget *check, *resCombo2; + GtkToggleButton *check; + GtkComboBox *resCombo2; - check = gtk_builder_get_object(builder, "checkFullscreen"); - resCombo2 = gtk_builder_get_object(builder, "resCombo2"); + check = GTK_TOGGLE_BUTTON(gtk_builder_get_object(builder, "checkFullscreen")); + resCombo2 = GTK_COMBO_BOX(gtk_builder_get_object(builder, "resCombo2")); - gtk_widget_set_sensitive(resCombo2, !gtk_toggle_button_get_active(check)); + gtk_widget_set_sensitive(GTK_WIDGET(resCombo2), !gtk_toggle_button_get_active(check)); } void on_use_fixes_toggled(GtkWidget *widget, gpointer user_data) { - GtkWidget *check, *table_fixes; - check = gtk_builder_get_object(builder,"checkUseFixes"); + GtkWidget *table_fixes; + GtkToggleButton* check; + check = GTK_TOGGLE_BUTTON(gtk_builder_get_object(builder,"checkUseFixes")); - table_fixes = gtk_builder_get_object(builder,"table_fixes"); + table_fixes = GTK_WIDGET(gtk_builder_get_object(builder,"table_fixes")); /* Set the state of each of the fixes to the value of the use fixes toggle */ gtk_container_foreach (GTK_CONTAINER (table_fixes), (GtkCallback) gtk_widget_set_sensitive, - (gpointer)gtk_toggle_button_get_active (check)); + GINT_TO_POINTER(gtk_toggle_button_get_active (check))); } void on_fps_toggled(GtkWidget *widget, gpointer user_data) { GtkWidget *checkSetFPS, *checkAutoFPSLimit, *entryFPS; - checkSetFPS = gtk_builder_get_object(builder, "checkSetFPS"); - checkAutoFPSLimit = gtk_builder_get_object(builder, "checkAutoFPSLimit"); - entryFPS = gtk_builder_get_object(builder, "entryFPS"); + checkSetFPS = GTK_WIDGET(gtk_builder_get_object(builder, "checkSetFPS")); + checkAutoFPSLimit = GTK_WIDGET(gtk_builder_get_object(builder, "checkAutoFPSLimit")); + entryFPS = GTK_WIDGET(gtk_builder_get_object(builder, "entryFPS")); gtk_widget_set_sensitive(entryFPS, - gtk_toggle_button_get_active(checkSetFPS) && - !gtk_toggle_button_get_active(checkAutoFPSLimit)); - gtk_widget_set_sensitive(checkAutoFPSLimit, gtk_toggle_button_get_active(checkSetFPS)); + gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkSetFPS)) && + !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkAutoFPSLimit))); + gtk_widget_set_sensitive(checkAutoFPSLimit, gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkSetFPS))); } void OnConfigClose(GtkWidget *widget, gpointer user_data) { - gtk_widget_destroy(gtk_builder_get_object(builder, "CfgWnd")); + gtk_widget_destroy(GTK_WIDGET(gtk_builder_get_object(builder, "CfgWnd"))); exit(0); } int main (int argc, char *argv[]) { - GtkWidget *CfgWnd, *widget; - FILE *in;char t[256];int len,val; - float valf; - char * pB, * p; - char cfg[255]; - int i; - char tempstr[50]; + GtkWidget *CfgWnd, *widget; + FILE *in;char t[256];int len,val; + float valf; + char * pB, * p; + char cfg[255]; + int i; + char tempstr[50]; #ifdef ENABLE_NLS - setlocale (LC_ALL, ""); - bindtextdomain (GETTEXT_PACKAGE, LOCALE_DIR); - bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); - textdomain (GETTEXT_PACKAGE); + setlocale (LC_ALL, ""); + bindtextdomain (GETTEXT_PACKAGE, LOCALE_DIR); + bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); + textdomain (GETTEXT_PACKAGE); #endif if (argc < 2) { @@ -145,7 +147,7 @@ main (int argc, char *argv[]) gtk_main(); return 0; - } + } else { builder = gtk_builder_new(); @@ -272,7 +274,7 @@ main (int argc, char *argv[]) if(valf>500) valf=500; } sprintf(tempstr,"%.1f",valf); - gtk_entry_set_text(gtk_builder_get_object(builder, "entryFPS"),tempstr); + gtk_entry_set_text(GTK_ENTRY(gtk_builder_get_object(builder, "entryFPS")), tempstr); val=0; if(pB) @@ -291,7 +293,7 @@ main (int argc, char *argv[]) val = atoi(p + len); } - for (i=0; i<11; i++) + for (i=0; i<12; i++) { sprintf(tempstr, "checkFix%d", i+1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (gtk_builder_get_object(builder,tempstr)), (val>>i)&1 ); @@ -300,27 +302,27 @@ main (int argc, char *argv[]) if(pB) free(pB); - widget = gtk_builder_get_object(builder, "CfgWnd"); + widget = GTK_WIDGET(gtk_builder_get_object(builder, "CfgWnd")); g_signal_connect_data(G_OBJECT(widget), "destroy", G_CALLBACK(SaveConfig), NULL, NULL, 0); - widget = gtk_builder_get_object(builder, "btn_close"); + widget = GTK_WIDGET(gtk_builder_get_object(builder, "btn_close")); g_signal_connect_data(G_OBJECT(widget), "clicked", G_CALLBACK(OnConfigClose), NULL, NULL, G_CONNECT_AFTER); - widget = gtk_builder_get_object(builder, "checkFullscreen"); + widget = GTK_WIDGET(gtk_builder_get_object(builder, "checkFullscreen")); g_signal_connect_data(G_OBJECT(widget), "clicked", G_CALLBACK(on_fullscreen_toggled), NULL, NULL, G_CONNECT_AFTER); - widget = gtk_builder_get_object(builder, "checkUseFixes"); + widget = GTK_WIDGET(gtk_builder_get_object(builder, "checkUseFixes")); g_signal_connect_data(G_OBJECT(widget), "clicked", G_CALLBACK(on_use_fixes_toggled), NULL, NULL, G_CONNECT_AFTER); - widget = gtk_builder_get_object(builder, "checkSetFPS"); + widget = GTK_WIDGET(gtk_builder_get_object(builder, "checkSetFPS")); g_signal_connect_data(G_OBJECT(widget), "clicked", G_CALLBACK(on_fps_toggled), NULL, NULL, G_CONNECT_AFTER); - widget = gtk_builder_get_object(builder, "checkAutoFPSLimit"); + widget = GTK_WIDGET(gtk_builder_get_object(builder, "checkAutoFPSLimit")); g_signal_connect_data(G_OBJECT(widget), "clicked", G_CALLBACK(on_fps_toggled), NULL, NULL, G_CONNECT_AFTER); @@ -331,106 +333,106 @@ main (int argc, char *argv[]) gtk_main (); } - return 0; + return 0; } void SetCfgVal(char * pB,char * pE,int val) { - char * p, *ps, *pC;char t[32]; - - sprintf(t,"%d",val); - - p=strstr(pB,pE); - if(p) - { - p=strstr(p,"="); - if(!p) return; - p++; - while(*p && *p!='\n' && (*p<'0' || *p>'9')) p++; - if(*p==0 || *p=='\n') return; - ps=p; - while(*p>='0' && *p<='9') p++; - pC=(char *)malloc(32767); - strcpy(pC,p); - strcpy(ps,t); - strcat(pB,pC); - free(pC); - } - else - { - strcat(pB,pE); - strcat(pB," = "); - strcat(pB,t); - strcat(pB,"\n"); - } + char * p, *ps, *pC;char t[32]; + + sprintf(t,"%d",val); + + p=strstr(pB,pE); + if(p) + { + p=strstr(p,"="); + if(!p) return; + p++; + while(*p && *p!='\n' && (*p<'0' || *p>'9')) p++; + if(*p==0 || *p=='\n') return; + ps=p; + while(*p>='0' && *p<='9') p++; + pC=(char *)malloc(32767); + strcpy(pC,p); + strcpy(ps,t); + strcat(pB,pC); + free(pC); + } + else + { + strcat(pB,pE); + strcat(pB," = "); + strcat(pB,t); + strcat(pB,"\n"); + } } void SaveConfig(GtkWidget *widget, gpointer user_data) { - FILE *in;int len,val;char * pB; - char cfg[255]; - char tempstr[50]; - int i; - struct stat buf; + FILE *in;int len,val;char * pB; + char cfg[255]; + char tempstr[50]; + int i; + struct stat buf; - pB=(char *)malloc(32767); - memset(pB,0,32767); + pB=(char *)malloc(32767); + memset(pB,0,32767); - strcpy(cfg, CONFIG_FILENAME); + strcpy(cfg, CONFIG_FILENAME); - /* ADB TODO Why do we read this in just to replace it again? */ - in = fopen(cfg,READBINARY); - if(in) - { - len = fread(pB, 1, 32767, in); - fclose(in); - } + /* ADB TODO Why do we read this in just to replace it again? */ + in = fopen(cfg,READBINARY); + if(in) + { + len = fread(pB, 1, 32767, in); + fclose(in); + } - val = gtk_combo_box_get_active (GTK_COMBO_BOX (gtk_builder_get_object(builder,"resCombo2"))); + val = gtk_combo_box_get_active (GTK_COMBO_BOX (gtk_builder_get_object(builder,"resCombo2"))); - if (val == VIDMODE_320x200) { SetCfgVal(pB,"\nResX",320); SetCfgVal(pB,"\nResY",240); } - else if (val == VIDMODE_640x480) { SetCfgVal(pB,"\nResX",640); SetCfgVal(pB,"\nResY",480); } - else if (val == VIDMODE_800x600) { SetCfgVal(pB,"\nResX",800); SetCfgVal(pB,"\nResY",600); } - else if (val == VIDMODE_1024x768) { SetCfgVal(pB,"\nResX",1024); SetCfgVal(pB,"\nResY",768); } - else if (val == VIDMODE_1152x864) { SetCfgVal(pB,"\nResX",1152); SetCfgVal(pB,"\nResY",864); } - else if (val == VIDMODE_1280x1024) { SetCfgVal(pB,"\nResX",1280); SetCfgVal(pB,"\nResY",1024); } - else if (val == VIDMODE_1600x1200) { SetCfgVal(pB,"\nResX",1600); SetCfgVal(pB,"\nResY",1200); } + if (val == VIDMODE_320x200) { SetCfgVal(pB,"\nResX",320); SetCfgVal(pB,"\nResY",240); } + else if (val == VIDMODE_640x480) { SetCfgVal(pB,"\nResX",640); SetCfgVal(pB,"\nResY",480); } + else if (val == VIDMODE_800x600) { SetCfgVal(pB,"\nResX",800); SetCfgVal(pB,"\nResY",600); } + else if (val == VIDMODE_1024x768) { SetCfgVal(pB,"\nResX",1024); SetCfgVal(pB,"\nResY",768); } + else if (val == VIDMODE_1152x864) { SetCfgVal(pB,"\nResX",1152); SetCfgVal(pB,"\nResY",864); } + else if (val == VIDMODE_1280x1024) { SetCfgVal(pB,"\nResX",1280); SetCfgVal(pB,"\nResY",1024); } + else if (val == VIDMODE_1600x1200) { SetCfgVal(pB,"\nResX",1600); SetCfgVal(pB,"\nResY",1200); } - val = gtk_combo_box_get_active (GTK_COMBO_BOX (gtk_builder_get_object(builder,"stretchCombo2"))); - SetCfgVal(pB,"\nNoStretch",val); + val = gtk_combo_box_get_active (GTK_COMBO_BOX (gtk_builder_get_object(builder,"stretchCombo2"))); + SetCfgVal(pB,"\nNoStretch",val); - val = gtk_combo_box_get_active (GTK_COMBO_BOX (gtk_builder_get_object(builder,"ditherCombo2"))); - SetCfgVal(pB,"\nDithering",val); + val = gtk_combo_box_get_active (GTK_COMBO_BOX (gtk_builder_get_object(builder,"ditherCombo2"))); + SetCfgVal(pB,"\nDithering",val); - val = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (gtk_builder_get_object(builder,"maintain43"))); - SetCfgVal(pB,"\nMaintain43",val); + val = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (gtk_builder_get_object(builder,"maintain43"))); + SetCfgVal(pB,"\nMaintain43",val); - val = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (gtk_builder_get_object(builder,"checkFullscreen"))); - SetCfgVal(pB,"\nFullScreen",val); + val = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (gtk_builder_get_object(builder,"checkFullscreen"))); + SetCfgVal(pB,"\nFullScreen",val); - val = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (gtk_builder_get_object(builder,"checkShowFPS"))); - SetCfgVal(pB,"\nShowFPS",val); + val = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (gtk_builder_get_object(builder,"checkShowFPS"))); + SetCfgVal(pB,"\nShowFPS",val); - val = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (gtk_builder_get_object(builder,"checkSetFPS"))); - SetCfgVal(pB,"\nUseFrameLimit",val); + val = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (gtk_builder_get_object(builder,"checkSetFPS"))); + SetCfgVal(pB,"\nUseFrameLimit",val); - val = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (gtk_builder_get_object(builder,"checkAutoFPSLimit"))); - SetCfgVal(pB,"\nFPSDetection",val+1); + val = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (gtk_builder_get_object(builder,"checkAutoFPSLimit"))); + SetCfgVal(pB,"\nFPSDetection",val+1); - val = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (gtk_builder_get_object(builder,"checkFrameSkip"))); - SetCfgVal(pB,"\nUseFrameSkip",val); + val = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (gtk_builder_get_object(builder,"checkFrameSkip"))); + SetCfgVal(pB,"\nUseFrameSkip",val); - //Framerate stored *10 - val = atof(gtk_entry_get_text(gtk_builder_get_object(builder, "entryFPS"))) * 10; - SetCfgVal(pB,"\nFrameRate",val); + //Framerate stored *10 + val = atof(gtk_entry_get_text(GTK_ENTRY(gtk_builder_get_object(builder, "entryFPS")))) * 10; + SetCfgVal(pB,"\nFrameRate",val); - val = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (gtk_builder_get_object(builder,"checkUseFixes"))); - SetCfgVal(pB,"\nUseFixes",val); + val = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (gtk_builder_get_object(builder,"checkUseFixes"))); + SetCfgVal(pB,"\nUseFixes",val); val = 0; - for (i=0; i<11; i++) + for (i=0; i<12; i++) { sprintf(tempstr, "checkFix%d", i+1); if( gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (gtk_builder_get_object(builder,tempstr))) ) @@ -441,14 +443,14 @@ void SaveConfig(GtkWidget *widget, gpointer user_data) - if((in=fopen(cfg, WRITEBINARY))!=NULL) - { - fwrite(pB,strlen(pB),1,in); - fclose(in); - } + if((in=fopen(cfg, WRITEBINARY))!=NULL) + { + fwrite(pB,strlen(pB),1,in); + fclose(in); + } + + free(pB); - free(pB); - // Close the window and exit control from the plugin exit (0); } |
