shithub: m8c

Download patch

ref: b288bf26688cf76022c99132510c35d7fb56f018
parent: 56da707a45c89273bf9020744ec034a0b0ec457c
parent: abdc457cf0aa2a9946f5f10eb9db349712de9a29
author: Jonne Kokkonen <jonne.kokkonen@gmail.com>
date: Mon Mar 21 04:13:22 EDT 2022

Merge pull request #49 from SpaceyKasey/kkaran/add-software-render-config-option

Kkaran/add software render config option

--- a/config.c
+++ b/config.c
@@ -10,6 +10,7 @@
   c.filename = "config.ini"; // default config file to load
 
   c.init_fullscreen = 0; // default fullscreen state at load
+  c.init_software = 0;
 
   c.key_up = SDL_SCANCODE_UP;
   c.key_left = SDL_SCANCODE_LEFT;
@@ -58,49 +59,52 @@
   SDL_Log("Writing config file to %s", config_path);
 
   // Entries for the config file
-  char ini_values[34][50];
-  sprintf(ini_values[0], "[graphics]\n");
-  sprintf(ini_values[1], "fullscreen=%s\n",
+  char ini_values[35][50];
+  int initPointer = 0;
+  sprintf(ini_values[initPointer++], "[graphics]\n");
+  sprintf(ini_values[initPointer++], "fullscreen=%s\n",
           conf->init_fullscreen ? "true" : "false");
-  sprintf(ini_values[2], "[keyboard]\n");
-  sprintf(ini_values[3], "key_up=%d\n", conf->key_up);
-  sprintf(ini_values[4], "key_left=%d\n", conf->key_left);
-  sprintf(ini_values[5], "key_down=%d\n", conf->key_down);
-  sprintf(ini_values[6], "key_right=%d\n", conf->key_right);
-  sprintf(ini_values[7], "key_select=%d\n", conf->key_select);
-  sprintf(ini_values[8], "key_select_alt=%d\n", conf->key_select_alt);
-  sprintf(ini_values[9], "key_start=%d\n", conf->key_start);
-  sprintf(ini_values[10], "key_start_alt=%d\n", conf->key_start_alt);
-  sprintf(ini_values[11], "key_opt=%d\n", conf->key_opt);
-  sprintf(ini_values[12], "key_opt_alt=%d\n", conf->key_opt_alt);
-  sprintf(ini_values[13], "key_edit=%d\n", conf->key_edit);
-  sprintf(ini_values[14], "key_edit_alt=%d\n", conf->key_edit_alt);
-  sprintf(ini_values[15], "key_delete=%d\n", conf->key_delete);
-  sprintf(ini_values[16], "key_reset=%d\n", conf->key_reset);
-  sprintf(ini_values[17], "[gamepad]\n");
-  sprintf(ini_values[18], "gamepad_up=%d\n", conf->gamepad_up);
-  sprintf(ini_values[19], "gamepad_left=%d\n", conf->gamepad_left);
-  sprintf(ini_values[20], "gamepad_down=%d\n", conf->gamepad_down);
-  sprintf(ini_values[21], "gamepad_right=%d\n", conf->gamepad_right);
-  sprintf(ini_values[22], "gamepad_select=%d\n", conf->gamepad_select);
-  sprintf(ini_values[23], "gamepad_start=%d\n", conf->gamepad_start);
-  sprintf(ini_values[24], "gamepad_opt=%d\n", conf->gamepad_opt);
-  sprintf(ini_values[25], "gamepad_edit=%d\n", conf->gamepad_edit);
-  sprintf(ini_values[26], "gamepad_analog_threshold=%d\n",
+  sprintf(ini_values[initPointer++], "software=%s\n",
+          conf->init_software ? "true" : "false");
+  sprintf(ini_values[initPointer++], "[keyboard]\n");
+  sprintf(ini_values[initPointer++], "key_up=%d\n", conf->key_up);
+  sprintf(ini_values[initPointer++], "key_left=%d\n", conf->key_left);
+  sprintf(ini_values[initPointer++], "key_down=%d\n", conf->key_down);
+  sprintf(ini_values[initPointer++], "key_right=%d\n", conf->key_right);
+  sprintf(ini_values[initPointer++], "key_select=%d\n", conf->key_select);
+  sprintf(ini_values[initPointer++], "key_select_alt=%d\n", conf->key_select_alt);
+  sprintf(ini_values[initPointer++], "key_start=%d\n", conf->key_start);
+  sprintf(ini_values[initPointer++], "key_start_alt=%d\n", conf->key_start_alt);
+  sprintf(ini_values[initPointer++], "key_opt=%d\n", conf->key_opt);
+  sprintf(ini_values[initPointer++], "key_opt_alt=%d\n", conf->key_opt_alt);
+  sprintf(ini_values[initPointer++], "key_edit=%d\n", conf->key_edit);
+  sprintf(ini_values[initPointer++], "key_edit_alt=%d\n", conf->key_edit_alt);
+  sprintf(ini_values[initPointer++], "key_delete=%d\n", conf->key_delete);
+  sprintf(ini_values[initPointer++], "key_reset=%d\n", conf->key_reset);
+  sprintf(ini_values[initPointer++], "[gamepad]\n");
+  sprintf(ini_values[initPointer++], "gamepad_up=%d\n", conf->gamepad_up);
+  sprintf(ini_values[initPointer++], "gamepad_left=%d\n", conf->gamepad_left);
+  sprintf(ini_values[initPointer++], "gamepad_down=%d\n", conf->gamepad_down);
+  sprintf(ini_values[initPointer++], "gamepad_right=%d\n", conf->gamepad_right);
+  sprintf(ini_values[initPointer++], "gamepad_select=%d\n", conf->gamepad_select);
+  sprintf(ini_values[initPointer++], "gamepad_start=%d\n", conf->gamepad_start);
+  sprintf(ini_values[initPointer++], "gamepad_opt=%d\n", conf->gamepad_opt);
+  sprintf(ini_values[initPointer++], "gamepad_edit=%d\n", conf->gamepad_edit);
+  sprintf(ini_values[initPointer++], "gamepad_analog_threshold=%d\n",
           conf->gamepad_analog_threshold);
-  sprintf(ini_values[27], "gamepad_analog_invert=%s\n",
+  sprintf(ini_values[initPointer++], "gamepad_analog_invert=%s\n",
           conf->gamepad_analog_invert ? "true" : "false");
-  sprintf(ini_values[28], "gamepad_analog_axis_updown=%d\n",
+  sprintf(ini_values[initPointer++], "gamepad_analog_axis_updown=%d\n",
           conf->gamepad_analog_axis_updown);
-  sprintf(ini_values[29], "gamepad_analog_axis_leftright=%d\n",
+  sprintf(ini_values[initPointer++], "gamepad_analog_axis_leftright=%d\n",
           conf->gamepad_analog_axis_leftright);
-  sprintf(ini_values[30], "gamepad_analog_axis_select=%d\n",
+  sprintf(ini_values[initPointer++], "gamepad_analog_axis_select=%d\n",
           conf->gamepad_analog_axis_select);
-  sprintf(ini_values[31], "gamepad_analog_axis_start=%d\n",
+  sprintf(ini_values[initPointer++], "gamepad_analog_axis_start=%d\n",
           conf->gamepad_analog_axis_start);
-  sprintf(ini_values[32], "gamepad_analog_axis_opt=%d\n",
+  sprintf(ini_values[initPointer++], "gamepad_analog_axis_opt=%d\n",
           conf->gamepad_analog_axis_opt);
-  sprintf(ini_values[33], "gamepad_analog_axis_edit=%d\n",
+  sprintf(ini_values[initPointer++], "gamepad_analog_axis_edit=%d\n",
           conf->gamepad_analog_axis_edit);
 
   if (rw != NULL) {
@@ -140,16 +144,28 @@
 
   // Frees the mem used for the config
   ini_free(ini);
+
+  //Write any new default options after loading
+  write_config(conf);
 }
 
 void read_graphics_config(ini_t *ini, config_params_s *conf) {
-  const char *param = ini_get(ini, "graphics", "fullscreen");
+  const char *param_fs = ini_get(ini, "graphics", "fullscreen");
+  const char *param_sw = ini_get(ini, "graphics", "software");
   // This obviously requires the parameter to be a lowercase true to enable
   // fullscreen
-  if (strcmp(param, "true") == 0) {
+  if (strcmp(param_fs, "true") == 0) {
     conf->init_fullscreen = 1;
   } else
     conf->init_fullscreen = 0;
+
+  if(param_sw != NULL){
+    if (strcmp(param_sw, "true") == 0) {
+      conf->init_software = 1;
+    } else
+      conf->init_software = 0;
+  }
+
 }
 
 void read_key_config(ini_t *ini, config_params_s *conf) {
--- a/config.h
+++ b/config.h
@@ -9,6 +9,7 @@
 typedef struct config_params_s {
   char *filename;
   int init_fullscreen;
+  int init_software;
 
   int key_up;
   int key_left;
--- a/config.ini.sample
+++ b/config.ini.sample
@@ -1,6 +1,8 @@
 [graphics]
 ; set this to true to have m8c start fullscreen
 fullscreen=false
+; set this to true to run m8c in software rendering mode (use for raspberry pi)
+software=false
 
 [keyboard]
 ; these need to be the decimal value of the SDL scancodes.
--- a/main.c
+++ b/main.c
@@ -61,7 +61,7 @@
   if (enable_and_reset_display(port) == -1)
     run = 0;
 
-  if (initialize_sdl(conf.init_fullscreen) == -1)
+  if (initialize_sdl(conf.init_fullscreen, conf.init_software) == -1)
     run = 0;
 
   uint8_t prev_input = 0;
--- a/render.c
+++ b/render.c
@@ -20,7 +20,7 @@
 uint8_t fullscreen = 0;
 
 // Initializes SDL and creates a renderer and required surfaces
-int initialize_sdl(int init_fullscreen) {
+int initialize_sdl(int init_fullscreen, int init_software) {
 
   ticks = SDL_GetTicks();
 
@@ -37,7 +37,7 @@
                          SDL_WINDOW_SHOWN | SDL_WINDOW_OPENGL |
                              SDL_WINDOW_RESIZABLE | init_fullscreen);
 
-  rend = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED);
+  rend = SDL_CreateRenderer(win, -1, init_software ? SDL_RENDERER_SOFTWARE : SDL_RENDERER_ACCELERATED);
 
   SDL_RenderSetLogicalSize(rend, 320, 240);
 
--- a/render.h
+++ b/render.h
@@ -6,7 +6,7 @@
 
 #include "command.h"
 
-int initialize_sdl();
+int initialize_sdl(int init_fullscreen, int init_software);
 void close_renderer();
 
 int process_queues(struct command_queues *queues);
--