commit 288d322c0b679675a80c0fc763b1063613c77ce5
Author: Simon Howard <fraggle@gmail.com>
AuthorDate: Wed Nov 24 22:43:37 2010 +0000
Commit: Simon Howard <fraggle@gmail.com>
CommitDate: Wed Nov 24 22:43:37 2010 +0000
Add configuration file parameter and command line option to specify the
screen pixel depth.
Subversion-branch: /trunk/chocolate-doom
Subversion-revision: 2166
---
setup/configfile.c | 1 +
setup/display.c | 1 +
setup/display.h | 1 +
src/i_video.c | 42 ++++++++++++++++++++++++++++++++++--------
src/i_video.h | 1 +
src/m_config.c | 6 ++++++
6 files changed, 44 insertions(+), 8 deletions(-)
diff --git a/setup/configfile.c b/setup/configfile.c
index 2a3cb845..885bbd8f 100644
--- a/setup/configfile.c
+++ b/setup/configfile.c
@@ -265,6 +265,7 @@ static default_t extra_defaults_list[] =
{"startup_delay", &startup_delay, DEFAULT_INT, 0, 0},
{"screen_width", &screen_width, DEFAULT_INT, 0, 0},
{"screen_height", &screen_height, DEFAULT_INT, 0, 0},
+ {"screen_bpp", &screen_bpp, DEFAULT_INT, 0, 0},
{"grabmouse", &grabmouse, DEFAULT_INT, 0, 0},
{"novert", &novert, DEFAULT_INT, 0, 0},
{"mouse_acceleration", &mouse_acceleration, DEFAULT_FLOAT, 0, 0},
diff --git a/setup/display.c b/setup/display.c
index 596b8a43..f9e2f712 100644
--- a/setup/display.c
+++ b/setup/display.c
@@ -75,6 +75,7 @@ int aspect_ratio_correct = 1;
int fullscreen = 1;
int screen_width = 320;
int screen_height = 200;
+int screen_bpp = 8;
int startup_delay = 1000;
int show_endoom = 1;
diff --git a/setup/display.h b/setup/display.h
index f0c76184..2419e807 100644
--- a/setup/display.h
+++ b/setup/display.h
@@ -26,6 +26,7 @@ extern int autoadjust_video_settings;
extern int aspect_ratio_correct;
extern int fullscreen;
extern int screen_width, screen_height;
+extern int screen_bpp;
extern int startup_delay;
extern int show_endoom;
extern char *video_driver;
diff --git a/src/i_video.c b/src/i_video.c
index 1139157d..577b7415 100644
--- a/src/i_video.c
+++ b/src/i_video.c
@@ -126,6 +126,10 @@ static boolean native_surface;
int screen_width = SCREENWIDTH;
int screen_height = SCREENHEIGHT;
+// Color depth.
+
+int screen_bpp = 8;
+
// Automatically adjust video settings if the selected mode is
// not a valid video mode.
@@ -1405,6 +1409,33 @@ static void CheckCommandLine(void)
screen_height = atoi(myargv[i + 1]);
}
+ //!
+ // @category video
+ // @arg <bpp>
+ //
+ // Specify the color depth of the screen, in bits per pixel.
+ //
+
+ i = M_CheckParm("-bpp");
+
+ if (i > 0)
+ {
+ screen_bpp = atoi(myargv[i + 1]);
+ }
+
+ // Because we love Eternity:
+
+ //!
+ // @category video
+ //
+ // Set the color depth of the screen to 32 bits per pixel.
+ //
+
+ if (M_CheckParm("-8in32"))
+ {
+ screen_bpp = 32;
+ }
+
//!
// @category video
// @arg <WxY>
@@ -1558,7 +1589,6 @@ static void SetVideoMode(screen_mode_t *mode, int w, int h)
{
byte *doompal;
int flags = 0;
- int bpp = 8;
doompal = W_CacheLumpName(DEH_String("PLAYPAL"), PU_CACHE);
@@ -1573,11 +1603,7 @@ static void SetVideoMode(screen_mode_t *mode, int w, int h)
flags |= SDL_SWSURFACE;
- if (M_CheckParm("-8in32"))
- {
- bpp = 32;
- }
- else
+ if (screen_bpp == 8)
{
flags |= SDL_HWPALETTE | SDL_DOUBLEBUF;
}
@@ -1591,12 +1617,12 @@ static void SetVideoMode(screen_mode_t *mode, int w, int h)
flags |= SDL_RESIZABLE;
}
- screen = SDL_SetVideoMode(w, h, bpp, flags);
+ screen = SDL_SetVideoMode(w, h, screen_bpp, flags);
if (screen == NULL)
{
I_Error("Error setting video mode %ix%ix%ibpp: %s\n",
- w, h, bpp, SDL_GetError());
+ w, h, screen_bpp, SDL_GetError());
}
if (screen->format->BitsPerPixel == 8)
diff --git a/src/i_video.h b/src/i_video.h
index 94ffcc29..44fe1cd2 100644
--- a/src/i_video.h
+++ b/src/i_video.h
@@ -89,6 +89,7 @@ extern char *video_driver;
extern int autoadjust_video_settings;
extern boolean screenvisible;
extern int screen_width, screen_height;
+extern int screen_bpp;
extern int fullscreen;
extern int aspect_ratio_correct;
extern int grabmouse;
diff --git a/src/m_config.c b/src/m_config.c
index 2065700e..a4cacd95 100644
--- a/src/m_config.c
+++ b/src/m_config.c
@@ -615,6 +615,12 @@ static default_t extra_defaults_list[] =
CONFIG_VARIABLE_INT(screen_height, screen_height),
+ //!
+ // Color depth of the screen, in bits.
+ //
+
+ CONFIG_VARIABLE_INT(screen_bpp, screen_bpp),
+
//!
// If this is non-zero, the mouse will be "grabbed" when running
// in windowed mode so that it can be used as an input device.