revision 531:f0fee3ba71d1
summary |
tree |
shortlog |
changelog |
graph |
changeset |
raw | bz2 | zip | gz changeset | 531:f0fee3ba71d1 |
parent | 530:28bdc62e642a |
child | 532:43653e748030 |
author | nkeynes |
date | Mon Nov 19 08:47:39 2007 +0000 (16 years ago) |
Move name-to-driver mappings to display.c and audio.c respectively
Move responsibility for invoking texcache_gl_init() to the driver
Move responsibility for invoking texcache_gl_init() to the driver
src/aica/audio.c | view | annotate | diff | log | ||
src/aica/audio.h | view | annotate | diff | log | ||
src/display.c | view | annotate | diff | log | ||
src/display.h | view | annotate | diff | log | ||
src/drivers/video_x11.c | view | annotate | diff | log | ||
src/main.c | view | annotate | diff | log |
1.1 --- a/src/aica/audio.c Mon Nov 19 08:46:30 2007 +00001.2 +++ b/src/aica/audio.c Mon Nov 19 08:47:39 2007 +00001.3 @@ -24,6 +24,13 @@1.4 #include <assert.h>1.5 #include <string.h>1.7 +audio_driver_t audio_driver_list[] = {1.8 +#ifdef HAVE_ESOUND1.9 + &audio_esd_driver,1.10 +#endif1.11 + &audio_null_driver,1.12 + NULL };1.13 +1.14 #define NUM_BUFFERS 31.15 #define MS_PER_BUFFER 1001.17 @@ -61,6 +68,21 @@1.18 return (read == AUDIO_CHANNEL_COUNT ? 0 : -1 );1.19 }1.21 +audio_driver_t get_audio_driver_by_name( const char *name )1.22 +{1.23 + int i;1.24 + if( name == NULL ) {1.25 + return audio_driver_list[0];1.26 + }1.27 + for( i=0; audio_driver_list[i] != NULL; i++ ) {1.28 + if( strcasecmp( audio_driver_list[i]->name, name ) == 0 ) {1.29 + return audio_driver_list[i];1.30 + }1.31 + }1.32 +1.33 + return NULL;1.34 +}1.35 +1.36 /**1.37 * Set the output driver, sample rate and format. Also initializes the1.38 * output buffers, flushing any current data and reallocating as
2.1 --- a/src/aica/audio.h Mon Nov 19 08:46:30 2007 +00002.2 +++ b/src/aica/audio.h Mon Nov 19 08:47:39 2007 +00002.3 @@ -75,6 +75,8 @@2.4 extern struct audio_driver audio_null_driver;2.5 extern struct audio_driver audio_esd_driver;2.7 +audio_driver_t get_audio_driver_by_name( const char *name );2.8 +2.9 /**2.10 * Set the output driver, sample rate and format. Also initializes the2.11 * output buffers, flushing any current data and reallocating as
3.1 --- a/src/display.c Mon Nov 19 08:46:30 2007 +00003.2 +++ b/src/display.c Mon Nov 19 08:47:39 2007 +00003.3 @@ -24,6 +24,11 @@3.4 #include "display.h"3.5 #include "pvr2/pvr2.h"3.7 +display_driver_t display_driver_list[] = {3.8 + &display_gtk_driver,3.9 + &display_null_driver,3.10 + NULL };3.11 +3.12 typedef struct keymap_entry {3.13 uint16_t keycode;3.14 input_key_callback_t callback;3.15 @@ -148,6 +153,20 @@3.16 }3.17 }3.19 +display_driver_t get_display_driver_by_name( const char *name )3.20 +{3.21 + int i;3.22 + if( name == NULL ) {3.23 + return display_driver_list[0];3.24 + }3.25 + for( i=0; display_driver_list[i] != NULL; i++ ) {3.26 + if( strcasecmp( display_driver_list[i]->name, name ) == 0 ) {3.27 + return display_driver_list[i];3.28 + }3.29 + }3.30 +3.31 + return NULL;3.32 +}3.35 gboolean display_set_driver( display_driver_t driver )3.36 @@ -159,8 +178,8 @@3.37 display_driver = driver;3.38 if( driver->init_driver != NULL )3.39 rv = driver->init_driver();3.40 - if( rv ) {3.41 - texcache_gl_init();3.42 + if( !rv ) {3.43 + display_driver = NULL;3.44 }3.45 return rv;3.46 }
4.1 --- a/src/display.h Mon Nov 19 08:46:30 2007 +00004.2 +++ b/src/display.h Mon Nov 19 08:47:39 2007 +00004.3 @@ -159,6 +159,7 @@4.5 } *display_driver_t;4.7 +display_driver_t get_display_driver_by_name( const char *name );4.8 gboolean display_set_driver( display_driver_t driver );4.10 extern uint32_t pvr2_frame_counter;
5.1 --- a/src/drivers/video_x11.c Mon Nov 19 08:46:30 2007 +00005.2 +++ b/src/drivers/video_x11.c Mon Nov 19 08:47:39 2007 +00005.3 @@ -19,6 +19,7 @@5.4 #include <X11/Xlib.h>5.5 #include <GL/glx.h>5.6 #include "dream.h"5.7 +#include "pvr2/pvr2.h"5.8 #include "drivers/video_x11.h"5.9 #include "drivers/gl_common.h"5.11 @@ -167,6 +168,8 @@5.12 return FALSE;5.13 }5.14 XFree(visual);5.15 +5.16 + texcache_gl_init();5.17 return TRUE;5.18 }
6.1 --- a/src/main.c Mon Nov 19 08:46:30 2007 +00006.2 +++ b/src/main.c Mon Nov 19 08:47:39 2007 +00006.3 @@ -4,8 +4,6 @@6.4 * Main program, initializes dreamcast and gui, then passes control off to6.5 * the gtk main loop (currently).6.6 *6.7 - * FIXME: Remove explicit GTK/Gnome references from this file6.8 - *6.9 * Copyright (c) 2005 Nathan Keynes.6.10 *6.11 * This program is free software; you can redistribute it and/or modify6.12 @@ -41,8 +39,8 @@6.13 char *aica_program = NULL;6.14 char *s3m_file = NULL;6.15 const char *disc_file = NULL;6.16 -char *display_driver_name = "gtk";6.17 -char *audio_driver_name = "esd";6.18 +char *display_driver_name = NULL;6.19 +char *audio_driver_name = NULL;6.20 gboolean start_immediately = FALSE;6.21 gboolean headless = FALSE;6.22 gboolean without_bios = FALSE;6.23 @@ -52,25 +50,18 @@6.24 uint32_t time_nanos = 0;6.25 extern uint32_t sh4_cpu_multiplier;6.27 -audio_driver_t audio_driver_list[] = { &audio_null_driver,6.28 - &audio_esd_driver,6.29 - NULL };6.30 -6.31 -display_driver_t display_driver_list[] = { &display_null_driver,6.32 - &display_gtk_driver,6.33 - NULL };6.34 -6.35 int main (int argc, char *argv[])6.36 {6.37 int opt, i;6.38 double t;6.39 + gboolean display_ok;6.41 install_crash_handler();6.42 #ifdef ENABLE_NLS6.43 bindtextdomain (PACKAGE, PACKAGE_LOCALE_DIR);6.44 textdomain (PACKAGE);6.45 #endif6.46 - gui_parse_cmdline(&argc, &argv);6.47 + display_ok = gui_parse_cmdline(&argc, &argv);6.49 while( (opt = getopt_long( argc, argv, option_list, longopts, NULL )) != -1 ) {6.50 switch( opt ) {6.51 @@ -140,17 +131,13 @@6.52 dcload_install();6.53 }6.55 - for( i=0; audio_driver_list[i] != NULL; i++ ) {6.56 - if( strcasecmp( audio_driver_list[i]->name, audio_driver_name ) == 0 ) {6.57 - if( audio_set_driver( audio_driver_list[i], 44100, AUDIO_FMT_16ST ) == FALSE ) {6.58 - audio_set_driver( &audio_null_driver, 44100, AUDIO_FMT_16ST );6.59 - }6.60 - break;6.61 - }6.62 -6.63 - }6.64 - if( audio_driver_list[i] == NULL ) {6.65 - ERROR( "Audio driver '%s' not found, using null driver", audio_driver_name );6.66 + audio_driver_t audio_driver = get_audio_driver_by_name(audio_driver_name);6.67 + if( audio_driver == NULL ) {6.68 + ERROR( "Audio driver '%s' not found, aborting.", audio_driver_name );6.69 + exit(2);6.70 + } else if( audio_set_driver( audio_driver, 44100, AUDIO_FMT_16ST ) == FALSE ) {6.71 + ERROR( "Failed to initialize audio driver '%s', using null driver",6.72 + audio_driver->name );6.73 audio_set_driver( &audio_null_driver, 44100, AUDIO_FMT_16ST );6.74 }6.76 @@ -159,20 +146,14 @@6.77 } else {6.78 gui_init(show_debugger);6.80 - gboolean initialized = FALSE;6.81 - for( i=0; display_driver_list[i] != NULL; i++ ) {6.82 - if( strcasecmp( display_driver_list[i]->name, display_driver_name ) == 0 ) {6.83 - initialized = display_set_driver( display_driver_list[i] );6.84 - break;6.85 - }6.86 - }6.87 - if( !initialized ) {6.88 - if( display_driver_list[i] == NULL ) {6.89 - ERROR( "Video driver '%s' not found, using null driver", display_driver_name );6.90 - } else {6.91 - ERROR( "Video driver '%s' failed to initialize, falling back to null driver", display_driver_name );6.92 - }6.93 - display_set_driver( &display_null_driver );6.94 + display_driver_t display_driver = get_display_driver_by_name(display_driver_name);6.95 + if( display_driver == NULL ) {6.96 + ERROR( "Video driver '%s' not found, aborting.", display_driver_name );6.97 + exit(2);6.98 + } else if( display_set_driver( display_driver ) == FALSE ) {6.99 + ERROR( "Video driver '%s' failed to initialize (could not connect to display?)",6.100 + display_driver->name );6.101 + exit(2);6.102 }6.103 }
.