The 'center' and 'vsync' options are now honoured. Many commandline

options have changed names.  In particular, all tia-related options
now start with 'tia.'.  This includes most of the old options that
started with 'gl_'.

Changed the names of all tv-effects options from starting with 'tv_'
to 'tv.', to match the name changes elsewhere.

Some work on the documentation to reflect the latest changes.


git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@2858 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
This commit is contained in:
stephena 2014-02-28 21:21:50 +00:00
parent 7bebe7263d
commit a58fb7165e
13 changed files with 283 additions and 347 deletions

View File

@ -10,7 +10,7 @@
<br><br> <br><br>
<center><h2><b>A multi-platform Atari 2600 VCS emulator</b></h2></center> <center><h2><b>A multi-platform Atari 2600 VCS emulator</b></h2></center>
<center><h4><b>Release 3.9.3</b></h4></center> <center><h4><b>Release 4.0</b></h4></center>
<br><br> <br><br>
<center><h2><b>User's Guide</b></h2></center> <center><h2><b>User's Guide</b></h2></center>
@ -54,7 +54,7 @@
<br><br><br> <br><br><br>
<center><b>February 1999 - January 2014</b></center> <center><b>February 1999 - xxx 2014</b></center>
<center><b>The Stella Team</b></center> <center><b>The Stella Team</b></center>
<center><b><a href="http://stella.sourceforge.net">Stella Homepage</a></b></center> <center><b><a href="http://stella.sourceforge.net">Stella Homepage</a></b></center>
@ -314,11 +314,9 @@
<p> <p>
<h3><b><u>General</u> (required for all versions of Stella)</b></h3> <h3><b><u>General</u> (required for all versions of Stella)</b></h3>
<ul> <ul>
<li>1GHz+ CPU</li> <li>SDL version 2.0.1 or greater, latest version highly recommended</li>
<li>Enough RAM for the OS + 64MB RAM for the emulation; 128MB+ highly recommended</li>
<li>15/16 bit color minimum; 24/32 bit color graphics card highly recommended</li> <li>15/16 bit color minimum; 24/32 bit color graphics card highly recommended</li>
<li>SDL version 1.2.10 or greater, latest version highly recommended</li> <li>Enough RAM for the OS + 64MB RAM for the emulation; 128MB+ highly recommended</li>
<li>CRT TV emulation effects require OpenGL 1.2/OpenGLES 1 or higher</li>
<li>Joysticks or gamepads are highly recommended</li> <li>Joysticks or gamepads are highly recommended</li>
<li>Mouse or <a href="http://www.stelladaptor.com">Stelladaptor</a> / <li>Mouse or <a href="http://www.stelladaptor.com">Stelladaptor</a> /
<a href="http://2600-daptor.com">2600-adaptor</a> with real paddles required for paddle emulation</li> <a href="http://2600-daptor.com">2600-adaptor</a> with real paddles required for paddle emulation</li>
@ -330,12 +328,12 @@
<p>The Linux version of Stella is designed to work on a Linux Workstation with <p>The Linux version of Stella is designed to work on a Linux Workstation with
the following:</p> the following:</p>
<ul> <ul>
<li>Linux Kernel 2.6.x/3.x</li> <li>Linux Kernel 3.x</li>
<li>i386 or x86_64 class machine, with 32 or 64-bit distribution</li> <li>i386 or x86_64 class machine, with 32 or 64-bit distribution</li>
<li>OpenGL accelerated video card highly recommended</li> <li>OpenGL capable video card</li>
<li>Other architectures (MIPS, PPC, PPC64, etc) have been confirmed to work, <li>Other architectures (MIPS, PPC, PPC64, etc) have been confirmed to work,
but aren't as well tested as i386/x86_64</li> but aren't as well tested as i386/x86_64</li>
<li>GNU C++ compiler version 4.x and the make utility are required for compiling <li>GNU C++ compiler version 4.x or Clang++ and the make utility are required for compiling
the Stella source code</li> the Stella source code</li>
</ul> </ul>
@ -345,26 +343,24 @@
<p>The Mac version of Stella is designed to work on an Apple Macintosh with <p>The Mac version of Stella is designed to work on an Apple Macintosh with
the following:</p> the following:</p>
<ul> <ul>
<li>MacOSX 10.4 (Tiger) or above</li> <li>MacOSX 10.7 (Lion) or above</li>
<li>PPC G4/G5 or Intel processor</li> <li>Intel processor</li>
<li>OpenGL capable video card</li> <li>OpenGL capable video card</li>
<li>Xcode 3.1 and SDL 1.2.14 required to compile a 10.4 compatible Universal Binary version; <li>FIXSDL Xcode 3.1 and SDL 1.2.14 required to compile a 10.4 compatible Universal Binary version;
Xcode 3.2 and SDL 1.2.15 required to compile the Intel/64-bit version</li> Xcode 3.2 and SDL 1.2.15 required to compile the Intel/64-bit version</li>
<li>The 64-bit version requires at minimum Snow Leopard (10.6) and Intel CPU/architecture</li>
</ul> </ul>
<p> <p>
<h3><b><u>Windows</u></b></h3> <h3><b><u>Windows</u></b></h3>
<p>The Windows version of Stella is designed to work on Windows XP/Vista/7 <p>The Windows version of Stella is designed to work on Windows XP/Vista/7/8
with the following:</p> with the following:</p>
<ul> <ul>
<li>OpenGL accelerated video card highly recommended</li> <li>Direct3D or OpenGL capable video card</li>
<li>64-bit port has been tested on Windows Vista/7 only; it may work on <li>64-bit port has been tested on Windows Vista and above only; it may work on
WinXP64 as well, but isn't a priority</li> WinXP64 as well, but isn't a priority</li>
<li>Visual C++ 2010 is required to compile the Stella source code</li> <li>Visual C++ 2013 (or Express version) is required to compile the Stella source code</li>
<li>It may be possible to compile using MinGW, but this hasn't been extensively tested since Stella version 3.0</li>
</ul> </ul>
<p> <p>
@ -1233,7 +1229,7 @@
</table> </table>
<p><b>TV effects (only active in TIA mode when using OpenGL rendering)</b></p> <p><b>TV effects (only active in TIA mode)</b></p>
<table BORDER=2 cellpadding=5> <table BORDER=2 cellpadding=5>
<tr> <tr>
@ -1741,132 +1737,13 @@
<tr> <tr>
<td><pre>-video &lt;soft|gl&gt;</pre></td> <td><pre>-video &lt;soft|gl&gt;</pre></td>
<td>Use software or OpenGL rendering mode.</td> <td>FIXSDL Use software or OpenGL rendering mode.</td>
</tr> </tr>
<tr> <tr>
<td><pre>-gl_lib &lt;filename&gt;</pre></td> <td><pre>-vsync &lt;1|0&gt;</pre></td>
<td>OpenGL mode only. Specify the OpenGL library to use (only use <td>Synchronize screen updates to the vertical blank period.
this if you know what you're doing). For MacOSX, this should This can result in smoother updates, and eliminate tearing.</td>
probably be left blank.</td>
</tr>
<tr>
<td><pre>-gl_inter &lt;1|0&gt;</pre></td>
<td>OpenGL mode only. Use interpolation for the TIA image (results in
blending/smoothing of the image).</td>
</tr>
<tr>
<td><pre>-gl_aspectn &lt;number&gt;<br>-gl_aspectp &lt;number&gt;</pre></td>
<td>OpenGL mode only. Specify the amount (as a percentage) to scale the
TIA image width in NTSC and PAL mode. Since many video modes do not
use square pixels, you can reduce width until the pixels appear square.
Allowable values are 80 - 120; I find 85 - 90 gives the most authentic
look for NTSC, and 105 - 110 for PAL.</td>
</tr>
<tr>
<td><pre>-gl_fsscale &lt;1|0&gt;</pre></td>
<td>OpenGL mode only. Stretch TIA image completely while in fullscreen mode
(vs. an integral stretch which won't necessarily completely fill the screen).</td>
</tr>
<tr>
<td><pre>-gl_vbo &lt;1|0&gt;</pre></td>
<td>OpenGL mode only. Use the Vertex Buffer Object extension, if available.
This is enabled by default.</td>
</tr>
<tr>
<td><pre>-gl_vsync &lt;1|0&gt;</pre></td>
<td>OpenGL mode only. Synchronize screen updates to the vertical blank
period. This can result in smoother updates, and eliminate tearing.</td>
</tr>
<tr>
<td><pre>-tv_filter &lt;1 - 6&gt;</pre></td>
<td>OpenGL mode only. Blargg TV effects, 0 is disabled, next numbers in
sequence represent presets for 'composite', 's-video', 'RGB', 'bad adjust',
and 'custom' modes.</td>
</tr>
<tr>
<td><pre>-tv_scanlines &lt;0 - 100&gt;</pre></td>
<td>OpenGL mode only. Blargg TV effects scanline intensity, where 0
means completely off.</td>
</tr>
<tr>
<td><pre>-tv_scaninter &lt;1|0&gt;</pre></td>
<td>OpenGL mode only. Blargg TV effects scanline interpolation, resulting
in blending/smoothing of the scanlines.</td>
</tr>
<tr>
<td><pre>-tv_contrast &lt;number&gt;</pre></td>
<td>OpenGL mode only. Blargg TV effects 'contrast'
(only available in custom mode, range -1.0 to 1.0).</td>
</tr>
<tr>
<td><pre>-tv_brightness &lt;number&gt;</pre></td>
<td>OpenGL mode only. Blargg TV effects 'brightness'
(only available in custom mode, range -1.0 to 1.0).</td>
</tr>
<tr>
<td><pre>-tv_hue &lt;number&gt;</pre></td>
<td>OpenGL mode only. Blargg TV effects 'hue'
(only available in custom mode, range -1.0 to 1.0).</td>
</tr>
<tr>
<td><pre>-tv_saturation &lt;number&gt;</pre></td>
<td>OpenGL mode only. Blargg TV effects 'saturation'
(only available in custom mode, range -1.0 to 1.0).</td>
</tr>
<tr>
<td><pre>-tv_gamma &lt;number&gt;</pre></td>
<td>OpenGL mode only. Blargg TV effects 'gamma'
(only available in custom mode, range -1.0 to 1.0).</td>
</tr>
<tr>
<td><pre>-tv_sharpness &lt;number&gt;</pre></td>
<td>OpenGL mode only. Blargg TV effects 'sharpness'
(only available in custom mode, range -1.0 to 1.0).</td>
</tr>
<tr>
<td><pre>-tv_resolution &lt;number&gt;</pre></td>
<td>OpenGL mode only. Blargg TV effects 'resolution'
(only available in custom mode, range -1.0 to 1.0).</td>
</tr>
<tr>
<td><pre>-tv_artifacts &lt;number&gt;</pre></td>
<td>OpenGL mode only. Blargg TV effects 'artifacts'
(only available in custom mode, range -1.0 to 1.0).</td>
</tr>
<tr>
<td><pre>-tv_fringing &lt;number&gt;</pre></td>
<td>OpenGL mode only. Blargg TV effects 'fringing'
(only available in custom mode, range -1.0 to 1.0).</td>
</tr>
<tr>
<td><pre>-tv_bleed &lt;number&gt;</pre></td>
<td>OpenGL mode only. Blargg TV effects 'bleed'
(only available in custom mode, range -1.0 to 1.0).</td>
</tr>
<tr>
<td><pre>-tia_filter &lt;filter&gt;</pre></td>
<td>Use the specified filter while in TIA/emulation mode. Currently,
this can be zoomZx, where Z={2..10}.</td>
</tr> </tr>
<tr> <tr>
@ -1910,7 +1787,7 @@
<td>Determines type of wait to perform between processing frames. <td>Determines type of wait to perform between processing frames.
Sleep will release the CPU as much as possible, and is the Sleep will release the CPU as much as possible, and is the
preferred method on laptops (and other low-powered devices) preferred method on laptops (and other low-powered devices)
and when using GL VSync. Busy will emulate z26 busy-wait and when using VSync. Busy will emulate z26 busy-wait
behaviour, and use all possible CPU time, but may eliminate behaviour, and use all possible CPU time, but may eliminate
graphical 'tearing' in software mode.</td> graphical 'tearing' in software mode.</td>
</tr> </tr>
@ -1922,6 +1799,112 @@
shown.</td> shown.</td>
</tr> </tr>
<tr>
<td><pre>-tia.filter &lt;filter&gt;</pre></td>
<td>Use the specified filter while in TIA/emulation mode. Currently,
this can be zoomZx, where Z={2..10}.</td>
</tr>
<tr>
<td><pre>-tia.inter &lt;1|0&gt;</pre></td>
<td>Use interpolation for the TIA image (results in blending/smoothing
of the image).</td>
</tr>
<tr>
<td><pre>-tia.aspectn &lt;number&gt;<br>-tia.aspectp &lt;number&gt;</pre></td>
<td>Specify the amount (as a percentage) to scale the
TIA image width in NTSC and PAL mode. Since many video modes do not
use square pixels, you can reduce width until the pixels appear square.
Allowable values are 80 - 120; I find 85 - 90 gives the most authentic
look for NTSC, and 105 - 110 for PAL.</td>
</tr>
<tr>
<td><pre>-gl_fsscale &lt;1|0&gt;</pre></td>
<td>FIXSDL OpenGL mode only. Stretch TIA image completely while in fullscreen mode
(vs. an integral stretch which won't necessarily completely fill the screen).</td>
</tr>
<tr>
<td><pre>-tv.filter &lt;1 - 6&gt;</pre></td>
<td>Blargg TV effects, 0 is disabled, next numbers in
sequence represent presets for 'Composite', 'S-Video', 'RGB', 'Bad Adjust',
and 'Custom' modes.</td>
</tr>
<tr>
<td><pre>-tv.scanlines &lt;0 - 100&gt;</pre></td>
<td>Blargg TV effects scanline intensity, where 0 means completely off.</td>
</tr>
<tr>
<td><pre>-tv.scaninter &lt;1|0&gt;</pre></td>
<td>Blargg TV effects scanline interpolation, resulting
in blending/smoothing of the scanlines.</td>
</tr>
<tr>
<td><pre>-tv.contrast &lt;number&gt;</pre></td>
<td>Blargg TV effects 'contrast' (only available in custom mode,
range -1.0 to 1.0).</td>
</tr>
<tr>
<td><pre>-tv.brightness &lt;number&gt;</pre></td>
<td>Blargg TV effects 'brightness' (only available in custom mode,
range -1.0 to 1.0).</td>
</tr>
<tr>
<td><pre>-tv.hue &lt;number&gt;</pre></td>
<td>Blargg TV effects 'hue' (only available in custom mode,
range -1.0 to 1.0).</td>
</tr>
<tr>
<td><pre>-tv.saturation &lt;number&gt;</pre></td>
<td>Blargg TV effects 'saturation' (only available in custom mode,
range -1.0 to 1.0).</td>
</tr>
<tr>
<td><pre>-tv.gamma &lt;number&gt;</pre></td>
<td>Blargg TV effects 'gamma' (only available in custom mode,
range -1.0 to 1.0).</td>
</tr>
<tr>
<td><pre>-tv.sharpness &lt;number&gt;</pre></td>
<td>Blargg TV effects 'sharpness' (only available in custom mode,
range -1.0 to 1.0).</td>
</tr>
<tr>
<td><pre>-tv.resolution &lt;number&gt;</pre></td>
<td>Blargg TV effects 'resolution' (only available in custom mode,
range -1.0 to 1.0).</td>
</tr>
<tr>
<td><pre>-tv.artifacts &lt;number&gt;</pre></td>
<td>Blargg TV effects 'artifacts' (only available in custom mode,
range -1.0 to 1.0).</td>
</tr>
<tr>
<td><pre>-tv.fringing &lt;number&gt;</pre></td>
<td>Blargg TV effects 'fringing' (only available in custom mode,
range -1.0 to 1.0).</td>
</tr>
<tr>
<td><pre>-tv.bleed &lt;number&gt;</pre></td>
<td>Blargg TV effects 'bleed' (only available in custom mode,
range -1.0 to 1.0).</td>
</tr>
<tr> <tr>
<td><pre>-sound &lt;1|0&gt;</pre></td> <td><pre>-sound &lt;1|0&gt;</pre></td>
<td>Enable or disable sound generation.</td> <td>Enable or disable sound generation.</td>
@ -2387,18 +2370,17 @@
<table border="1" cellpadding="4"> <table border="1" cellpadding="4">
<tr><th>Item</th><th>Brief description</th><th>For more information,<br>see <a href="#CommandLine">CommandLine</a></th></tr> <tr><th>Item</th><th>Brief description</th><th>For more information,<br>see <a href="#CommandLine">CommandLine</a></th></tr>
<tr><td>Renderer (*)</td><td>use specified rendering mode (requires restart)</td><td>-video</td></tr> <tr><td>Renderer (*)</td><td>use specified rendering mode (requires restart)</td><td>-video</td></tr>
<tr><td>TIA Filter</td><td>filter for emulation mode </td><td>-tia_filter</td></tr> <tr><td>TIA Filter</td><td>filter for emulation mode </td><td>-tia.filter</td></tr>
<tr><td>TIA Palette</td><td>palette for emulation mode</td><td>-palette</td></tr> <tr><td>TIA Palette</td><td>palette for emulation mode</td><td>-palette</td></tr>
<tr><td>Fullscrn Res</td><td>resolution for fullscreen mode</td><td>-fullres</td></tr> <tr><td>Fullscrn Res</td><td>resolution for fullscreen mode</td><td>-fullres</td></tr>
<tr><td>Timing (*)</td><td>how to wait between frames (requires restart)</td><td>-timing</td></tr> <tr><td>Timing (*)</td><td>how to wait between frames (requires restart)</td><td>-timing</td></tr>
<tr><td>GL Filter</td><td>OpenGL filter mode</td><td>-gl_filter</td></tr> <tr><td>GL Filter</td><td>OpenGL filter mode</td><td>-gl_filter</td></tr>
<tr><td>GL Aspect (N)</td><td>OpenGL width of TIA image in NTSC mode</td><td>-gl_aspectn</td></tr> <tr><td>Aspect (N)</td><td>Width of TIA image in NTSC mode</td><td>-tia.aspectn</td></tr>
<tr><td>GL Aspect (P)</td><td>OpenGL width of TIA image in PAL mode</td><td>-gl_aspectp</td></tr> <tr><td>Aspect (P)</td><td>Width of TIA image in PAL mode</td><td>-tia.aspectp</td></tr>
<tr><td>Framerate</td><td>frames per second in emulation mode</td><td>-framerate</td></tr> <tr><td>Framerate</td><td>frames per second in emulation mode</td><td>-framerate</td></tr>
<tr><td>Fullscreen mode</td><td>self-explanatory</td><td>-fullscreen</td></tr> <tr><td>Fullscreen mode</td><td>self-explanatory</td><td>-fullscreen</td></tr>
<tr><td>GL FS Stretch</td><td>stretch fullscreen OpenGL in emulation mode</td><td>-gl_fsmax</td></tr> <tr><td>GL FS Stretch</td><td>stretch fullscreen OpenGL in emulation mode</td><td>-gl_fsmax</td></tr>
<tr><td>GL VBO</td><td>enable OpenGL Vertex Buffer Objects</td><td>-gl_vbo</td></tr> <tr><td>VSync</td><td>enable vertical sync'ed updates</td><td>-vsync</td></tr>
<tr><td>GL VSync</td><td>enable OpenGL vertical synchronization</td><td>-gl_vsync</td></tr>
<tr><td>PAL color-loss</td><td>use PAL color-loss effect</td><td>-colorloss</td></tr> <tr><td>PAL color-loss</td><td>use PAL color-loss effect</td><td>-colorloss</td></tr>
<tr><td>Fast SC/AR BIOS</td><td>skip progress loading bars for SuperCharger ROMs</td><td>-fastscbios</td></tr> <tr><td>Fast SC/AR BIOS</td><td>skip progress loading bars for SuperCharger ROMs</td><td>-fastscbios</td></tr>
<tr><td>Show UI messages</td><td>overlay UI messages onscreen</td><td>-uimessages</td></tr> <tr><td>Show UI messages</td><td>overlay UI messages onscreen</td><td>-uimessages</td></tr>
@ -2417,10 +2399,10 @@
<td valign="top"> <td valign="top">
<table border="1" cellpadding="4"> <table border="1" cellpadding="4">
<tr><th>Item</th><th>Brief description</th><th>For more information,<br>see <a href="#CommandLine">CommandLine</a></th></tr> <tr><th>Item</th><th>Brief description</th><th>For more information,<br>see <a href="#CommandLine">CommandLine</a></th></tr>
<tr><td>TV Mode</td><td>disable TV effects, or select TV preset</td><td>-tv_filter</td></tr> <tr><td>TV Mode</td><td>disable TV effects, or select TV preset</td><td>-tv.filter</td></tr>
<tr><td>Scanline Intensity</td><td>sets scanline black-level intensity</td><td>-tv_scanlines</td></tr> <tr><td>Scanline Intensity</td><td>sets scanline black-level intensity</td><td>-tv.scanlines</td></tr>
<tr><td>Scanline Interpolation</td><td>smooth/blend scanlines into image</td><td>-tv_scaninter</td></tr> <tr><td>Scanline Interpolation</td><td>smooth/blend scanlines into image</td><td>-tv.scaninter</td></tr>
<tr><td>Adjustable sliders</td><td>set specific attribute in 'Custom' mode</td><td>-tv_contrast, tv_hue, etc.</td></tr> <tr><td>Adjustable sliders</td><td>set specific attribute in 'Custom' mode</td><td>-tv.contrast, tv.hue, etc.</td></tr>
<tr><td>Clone Composite</td><td>copy 'Composite' attributes to 'Custom' sliders</td><td>&nbsp;</td></tr> <tr><td>Clone Composite</td><td>copy 'Composite' attributes to 'Custom' sliders</td><td>&nbsp;</td></tr>
<tr><td>Clone S-Video</td><td>copy 'S-Video' attributes to 'Custom' sliders</td><td>&nbsp;</td></tr> <tr><td>Clone S-Video</td><td>copy 'S-Video' attributes to 'Custom' sliders</td><td>&nbsp;</td></tr>
<tr><td>Clone RGB</td><td>copy 'RGB' attributes to 'Custom' sliders</td><td>&nbsp;</td></tr> <tr><td>Clone RGB</td><td>copy 'RGB' attributes to 'Custom' sliders</td><td>&nbsp;</td></tr>

View File

@ -39,17 +39,17 @@ FBSurfaceTIA::FBSurfaceTIA(FrameBufferSDL2& buffer)
int height = 320; int height = 320;
// Create a surface in the same format as the parent GL class // Create a surface in the same format as the parent GL class
const SDL_PixelFormat& pf = myFB.myPixelFormat; const SDL_PixelFormat* pf = myFB.myPixelFormat;
mySurface = SDL_CreateRGBSurface(0, width, height, mySurface = SDL_CreateRGBSurface(0, width, height,
pf.BitsPerPixel, pf.Rmask, pf.Gmask, pf.Bmask, pf.Amask); pf->BitsPerPixel, pf->Rmask, pf->Gmask, pf->Bmask, pf->Amask);
mySrcR.x = mySrcR.y = myDstR.x = myDstR.y = myScanR.x = myScanR.y = 0; mySrcR.x = mySrcR.y = myDstR.x = myDstR.y = myScanR.x = myScanR.y = 0;
mySrcR.w = myDstR.w = width; mySrcR.w = myDstR.w = width;
mySrcR.h = myDstR.h = height; mySrcR.h = myDstR.h = height;
myScanR.w = 1; myScanR.h = 0; myScanR.w = 1; myScanR.h = 0;
myPitch = mySurface->pitch / pf.BytesPerPixel; myPitch = mySurface->pitch / pf->BytesPerPixel;
// Generate scanline data // Generate scanline data
for(int i = 0; i < mySurface->h; i+=2) for(int i = 0; i < mySurface->h; i+=2)

View File

@ -28,16 +28,16 @@ FBSurfaceUI::FBSurfaceUI(FrameBufferSDL2& buffer, uInt32 width, uInt32 height)
mySurfaceIsDirty(true) mySurfaceIsDirty(true)
{ {
// Create a surface in the same format as the parent GL class // Create a surface in the same format as the parent GL class
const SDL_PixelFormat& pf = myFB.myPixelFormat; const SDL_PixelFormat* pf = myFB.myPixelFormat;
mySurface = SDL_CreateRGBSurface(0, width, height, mySurface = SDL_CreateRGBSurface(0, width, height,
pf.BitsPerPixel, pf.Rmask, pf.Gmask, pf.Bmask, pf.Amask); pf->BitsPerPixel, pf->Rmask, pf->Gmask, pf->Bmask, pf->Amask);
mySrc.x = mySrc.y = myDst.x = myDst.y = 0; mySrc.x = mySrc.y = myDst.x = myDst.y = 0;
mySrc.w = myDst.w = width; mySrc.w = myDst.w = width;
mySrc.h = myDst.h = height; mySrc.h = myDst.h = height;
myPitch = mySurface->pitch / pf.BytesPerPixel; myPitch = mySurface->pitch / pf->BytesPerPixel;
// To generate texture // To generate texture
reload(); reload();

View File

@ -58,17 +58,14 @@ FrameBufferSDL2::FrameBufferSDL2(OSystem* osystem)
// It's done this way (vs directly accessing a FBSurfaceUI object) // It's done this way (vs directly accessing a FBSurfaceUI object)
// since the structure may be needed before any FBSurface's have // since the structure may be needed before any FBSurface's have
// been created // been created
// Note: alpha disabled for now, since it's not used myPixelFormat = SDL_AllocFormat(SDL_PIXELFORMAT_ARGB8888);
SDL_Surface* s = SDL_CreateRGBSurface(SDL_SWSURFACE, 1, 1, 32,
0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000);
myPixelFormat = *(s->format);
SDL_FreeSurface(s);
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FrameBufferSDL2::~FrameBufferSDL2() FrameBufferSDL2::~FrameBufferSDL2()
{ {
SDL_FreeFormat(myPixelFormat);
if(myRenderer) if(myRenderer)
{ {
SDL_DestroyRenderer(myRenderer); SDL_DestroyRenderer(myRenderer);
@ -103,39 +100,6 @@ bool FrameBufferSDL2::setVideoMode(const string& title, VideoMode& mode, bool fu
if(SDL_WasInit(SDL_INIT_VIDEO) == 0) if(SDL_WasInit(SDL_INIT_VIDEO) == 0)
return false; return false;
// (Re)create window and renderer
if(myRenderer)
{
SDL_DestroyRenderer(myRenderer);
myRenderer = NULL;
}
if(myWindow)
{
SDL_DestroyWindow(myWindow);
myWindow = NULL;
}
myWindow = SDL_CreateWindow(title.c_str(),
SDL_WINDOWPOS_CENTERED,
SDL_WINDOWPOS_CENTERED,
mode.image_w, mode.image_h,
0);
if(myWindow == NULL)
{
string msg = "ERROR: Unable to open SDL window: " + string(SDL_GetError());
myOSystem->logMessage(msg, 0);
return false;
}
myRenderer = SDL_CreateRenderer(myWindow, -1,
SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
if(myWindow == NULL)
{
string msg = "ERROR: Unable to create SDL renderer: " + string(SDL_GetError());
myOSystem->logMessage(msg, 0);
return false;
}
bool inTIAMode = bool inTIAMode =
myOSystem->eventHandler().state() != EventHandler::S_LAUNCHER && myOSystem->eventHandler().state() != EventHandler::S_LAUNCHER &&
myOSystem->eventHandler().state() != EventHandler::S_DEBUGGER; myOSystem->eventHandler().state() != EventHandler::S_DEBUGGER;
@ -144,7 +108,6 @@ bool FrameBufferSDL2::setVideoMode(const string& title, VideoMode& mode, bool fu
// We need it for the creating the TIA surface // We need it for the creating the TIA surface
uInt32 baseHeight = mode.image_h / mode.gfxmode.zoom; uInt32 baseHeight = mode.image_h / mode.gfxmode.zoom;
#if 0
// Aspect ratio and fullscreen stretching only applies to the TIA // Aspect ratio and fullscreen stretching only applies to the TIA
if(inTIAMode) if(inTIAMode)
{ {
@ -154,7 +117,7 @@ bool FrameBufferSDL2::setVideoMode(const string& title, VideoMode& mode, bool fu
{ {
const string& frate = myOSystem->console().about().InitialFrameRate; const string& frate = myOSystem->console().about().InitialFrameRate;
int aspect = int aspect =
myOSystem->settings().getInt(frate == "60" ? "gl_aspectn" : "gl_aspectp"); myOSystem->settings().getInt(frate == "60" ? "tia.aspectn" : "tia.aspectp");
mode.image_w = (uInt16)(float(mode.image_w * aspect) / 100.0); mode.image_w = (uInt16)(float(mode.image_w * aspect) / 100.0);
} }
@ -199,40 +162,42 @@ bool FrameBufferSDL2::setVideoMode(const string& title, VideoMode& mode, bool fu
mode.image_x = (mode.screen_w - mode.image_w) >> 1; mode.image_x = (mode.screen_w - mode.image_w) >> 1;
mode.image_y = (mode.screen_h - mode.image_h) >> 1; mode.image_y = (mode.screen_h - mode.image_h) >> 1;
SDL_GL_SetAttribute( SDL_GL_RED_SIZE, myRGB[0] ); // (Re)create window and renderer
SDL_GL_SetAttribute( SDL_GL_GREEN_SIZE, myRGB[1] ); if(myRenderer)
SDL_GL_SetAttribute( SDL_GL_BLUE_SIZE, myRGB[2] ); {
SDL_GL_SetAttribute( SDL_GL_ALPHA_SIZE, myRGB[3] ); SDL_DestroyRenderer(myRenderer);
SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 ); myRenderer = NULL;
}
if(myWindow)
{
SDL_DestroyWindow(myWindow);
myWindow = NULL;
}
// There's no guarantee this is supported on all hardware // Window centering option
// We leave it to the user to test and decide int pos = myOSystem->settings().getBool("center")
int vsync = myOSystem->settings().getBool("gl_vsync") ? 1 : 0; ? SDL_WINDOWPOS_CENTERED : SDL_WINDOWPOS_UNDEFINED;
SDL_GL_SetAttribute( SDL_GL_SWAP_CONTROL, vsync ); myWindow = SDL_CreateWindow(title.c_str(),
#endif pos, pos, mode.image_w, mode.image_h,
0);
if(myWindow == NULL)
{
string msg = "ERROR: Unable to open SDL window: " + string(SDL_GetError());
myOSystem->logMessage(msg, 0);
return false;
}
// Make sure the flags represent the current screen state // V'synced blits option
// myWindowFlags = myScreen->flags; Uint32 renderFlags = SDL_RENDERER_ACCELERATED;
if(myOSystem->settings().getBool("vsync"))
#if 0 renderFlags |= SDL_RENDERER_PRESENTVSYNC;
// Optimization hints myRenderer = SDL_CreateRenderer(myWindow, -1, renderFlags);
p_gl.ShadeModel(GL_FLAT); if(myWindow == NULL)
p_gl.Disable(GL_CULL_FACE); {
p_gl.Disable(GL_DEPTH_TEST); string msg = "ERROR: Unable to create SDL renderer: " + string(SDL_GetError());
p_gl.Disable(GL_ALPHA_TEST); myOSystem->logMessage(msg, 0);
p_gl.Disable(GL_LIGHTING); return false;
p_gl.Hint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST); }
// Initialize GL display
p_gl.Viewport(0, 0, mode.screen_w, mode.screen_h);
p_gl.MatrixMode(GL_PROJECTION);
p_gl.LoadIdentity();
p_gl.Ortho(0.0, mode.screen_w, mode.screen_h, 0.0, -1.0, 1.0);
p_gl.MatrixMode(GL_MODELVIEW);
p_gl.LoadIdentity();
p_gl.Translatef(0.375, 0.375, 0.0); // fix scanline mis-draw issues
#endif
//cerr << "dimensions: " << (fullScreen() ? "(full)" : "") << endl << mode << endl;
// The framebuffer only takes responsibility for TIA surfaces // The framebuffer only takes responsibility for TIA surfaces
// Other surfaces (such as the ones used for dialogs) are allocated // Other surfaces (such as the ones used for dialogs) are allocated
@ -249,9 +214,9 @@ bool FrameBufferSDL2::setVideoMode(const string& title, VideoMode& mode, bool fu
mode.image_w, mode.image_h); mode.image_w, mode.image_h);
myTiaSurface->enableScanlines(ntscEnabled()); myTiaSurface->enableScanlines(ntscEnabled());
myTiaSurface->setScanIntensity(myOSystem->settings().getInt("tv_scanlines")); myTiaSurface->setTexInterpolation(myOSystem->settings().getBool("tia.inter"));
myTiaSurface->setTexInterpolation(myOSystem->settings().getBool("gl_inter")); myTiaSurface->setScanIntensity(myOSystem->settings().getInt("tv.scanlines"));
myTiaSurface->setScanInterpolation(myOSystem->settings().getBool("tv_scaninter")); myTiaSurface->setScanInterpolation(myOSystem->settings().getBool("tv.scaninter"));
myTiaSurface->setTIA(myOSystem->console().tia()); myTiaSurface->setTIA(myOSystem->console().tia());
} }
@ -416,9 +381,9 @@ void FrameBufferSDL2::enableNTSC(bool enable)
myTiaSurface->updateCoords(); myTiaSurface->updateCoords();
myTiaSurface->enableScanlines(ntscEnabled()); myTiaSurface->enableScanlines(ntscEnabled());
myTiaSurface->setScanIntensity(myOSystem->settings().getInt("tv_scanlines")); myTiaSurface->setScanIntensity(myOSystem->settings().getInt("tv.scanlines"));
myTiaSurface->setTexInterpolation(myOSystem->settings().getBool("gl_inter")); myTiaSurface->setTexInterpolation(myOSystem->settings().getBool("tia.inter"));
myTiaSurface->setScanInterpolation(myOSystem->settings().getBool("tv_scaninter")); myTiaSurface->setScanInterpolation(myOSystem->settings().getBool("tv.scaninter"));
myRedrawEntireFrame = true; myRedrawEntireFrame = true;
} }

View File

@ -99,8 +99,8 @@ class FrameBufferSDL2 : public FrameBuffer
@param g The green component of the color @param g The green component of the color
@param b The blue component of the color @param b The blue component of the color
*/ */
void getRGB(Uint32 pixel, Uint8* r, Uint8* g, Uint8* b) const inline void getRGB(Uint32 pixel, Uint8* r, Uint8* g, Uint8* b) const
{ SDL_GetRGB(pixel, (SDL_PixelFormat*)&myPixelFormat, r, g, b); } { SDL_GetRGB(pixel, myPixelFormat, r, g, b); }
/** /**
This method is called to map a given R/G/B triple to the screen palette. This method is called to map a given R/G/B triple to the screen palette.
@ -109,8 +109,8 @@ class FrameBufferSDL2 : public FrameBuffer
@param g The green component of the color. @param g The green component of the color.
@param b The blue component of the color. @param b The blue component of the color.
*/ */
Uint32 mapRGB(Uint8 r, Uint8 g, Uint8 b) const inline Uint32 mapRGB(Uint8 r, Uint8 g, Uint8 b) const
{ return SDL_MapRGB((SDL_PixelFormat*)&myPixelFormat, r, g, b); } { return SDL_MapRGB(myPixelFormat, r, g, b); }
/** /**
This method is called to query the type of the FrameBuffer. This method is called to query the type of the FrameBuffer.
@ -235,7 +235,7 @@ class FrameBufferSDL2 : public FrameBuffer
FBSurfaceTIA* myTiaSurface; FBSurfaceTIA* myTiaSurface;
// Used by mapRGB (when palettes are created) // Used by mapRGB (when palettes are created)
SDL_PixelFormat myPixelFormat; SDL_PixelFormat* myPixelFormat;
// The depth of the texture buffer // The depth of the texture buffer
uInt32 myDepth; uInt32 myDepth;

View File

@ -194,32 +194,32 @@ string NTSCFilter::decreaseAdjustable()
void NTSCFilter::loadConfig(const Settings& settings) void NTSCFilter::loadConfig(const Settings& settings)
{ {
// Load adjustables for custom mode // Load adjustables for custom mode
myCustomSetup.hue = BSPF_clamp(settings.getFloat("tv_hue"), -1.0f, 1.0f); myCustomSetup.hue = BSPF_clamp(settings.getFloat("tv.hue"), -1.0f, 1.0f);
myCustomSetup.saturation = BSPF_clamp(settings.getFloat("tv_saturation"), -1.0f, 1.0f); myCustomSetup.saturation = BSPF_clamp(settings.getFloat("tv.saturation"), -1.0f, 1.0f);
myCustomSetup.contrast = BSPF_clamp(settings.getFloat("tv_contrast"), -1.0f, 1.0f); myCustomSetup.contrast = BSPF_clamp(settings.getFloat("tv.contrast"), -1.0f, 1.0f);
myCustomSetup.brightness = BSPF_clamp(settings.getFloat("tv_brightness"), -1.0f, 1.0f); myCustomSetup.brightness = BSPF_clamp(settings.getFloat("tv.brightness"), -1.0f, 1.0f);
myCustomSetup.sharpness = BSPF_clamp(settings.getFloat("tv_sharpness"), -1.0f, 1.0f); myCustomSetup.sharpness = BSPF_clamp(settings.getFloat("tv.sharpness"), -1.0f, 1.0f);
myCustomSetup.gamma = BSPF_clamp(settings.getFloat("tv_gamma"), -1.0f, 1.0f); myCustomSetup.gamma = BSPF_clamp(settings.getFloat("tv.gamma"), -1.0f, 1.0f);
myCustomSetup.resolution = BSPF_clamp(settings.getFloat("tv_resolution"), -1.0f, 1.0f); myCustomSetup.resolution = BSPF_clamp(settings.getFloat("tv.resolution"), -1.0f, 1.0f);
myCustomSetup.artifacts = BSPF_clamp(settings.getFloat("tv_artifacts"), -1.0f, 1.0f); myCustomSetup.artifacts = BSPF_clamp(settings.getFloat("tv.artifacts"), -1.0f, 1.0f);
myCustomSetup.fringing = BSPF_clamp(settings.getFloat("tv_fringing"), -1.0f, 1.0f); myCustomSetup.fringing = BSPF_clamp(settings.getFloat("tv.fringing"), -1.0f, 1.0f);
myCustomSetup.bleed = BSPF_clamp(settings.getFloat("tv_bleed"), -1.0f, 1.0f); myCustomSetup.bleed = BSPF_clamp(settings.getFloat("tv.bleed"), -1.0f, 1.0f);
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void NTSCFilter::saveConfig(Settings& settings) const void NTSCFilter::saveConfig(Settings& settings) const
{ {
// Save adjustables for custom mode // Save adjustables for custom mode
settings.setValue("tv_hue", myCustomSetup.hue); settings.setValue("tv.hue", myCustomSetup.hue);
settings.setValue("tv_saturation", myCustomSetup.saturation); settings.setValue("tv.saturation", myCustomSetup.saturation);
settings.setValue("tv_contrast", myCustomSetup.contrast); settings.setValue("tv.contrast", myCustomSetup.contrast);
settings.setValue("tv_brightness", myCustomSetup.brightness); settings.setValue("tv.brightness", myCustomSetup.brightness);
settings.setValue("tv_sharpness", myCustomSetup.sharpness); settings.setValue("tv.sharpness", myCustomSetup.sharpness);
settings.setValue("tv_gamma", myCustomSetup.gamma); settings.setValue("tv.gamma", myCustomSetup.gamma);
settings.setValue("tv_resolution", myCustomSetup.resolution); settings.setValue("tv.resolution", myCustomSetup.resolution);
settings.setValue("tv_artifacts", myCustomSetup.artifacts); settings.setValue("tv.artifacts", myCustomSetup.artifacts);
settings.setValue("tv_fringing", myCustomSetup.fringing); settings.setValue("tv.fringing", myCustomSetup.fringing);
settings.setValue("tv_bleed", myCustomSetup.bleed); settings.setValue("tv.bleed", myCustomSetup.bleed);
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

View File

@ -422,7 +422,7 @@ FBInitStatus Console::initializeVideo(bool full)
int blend = atoi(myProperties.get(Display_PPBlend).c_str()); int blend = atoi(myProperties.get(Display_PPBlend).c_str());
myOSystem->frameBuffer().enablePhosphor(enable, blend); myOSystem->frameBuffer().enablePhosphor(enable, blend);
myOSystem->frameBuffer().setNTSC( myOSystem->frameBuffer().setNTSC(
(NTSCFilter::Preset)myOSystem->settings().getInt("tv_filter"), false); (NTSCFilter::Preset)myOSystem->settings().getInt("tv.filter"), false);
setPalette(myOSystem->settings().getString("palette")); setPalette(myOSystem->settings().getString("palette"));
// Set the correct framerate based on the format of the ROM // Set the correct framerate based on the format of the ROM

View File

@ -591,7 +591,7 @@ void FrameBuffer::setNTSC(NTSCFilter::Preset preset, bool show)
const string& mode = myNTSCFilter.setPreset(preset); const string& mode = myNTSCFilter.setPreset(preset);
buf << "TV filtering (" << mode << " mode)"; buf << "TV filtering (" << mode << " mode)";
} }
myOSystem->settings().setValue("tv_filter", (int)preset); myOSystem->settings().setValue("tv.filter", (int)preset);
} }
else else
buf << "TV filtering not available in software mode"; buf << "TV filtering not available in software mode";
@ -609,7 +609,7 @@ void FrameBuffer::setScanlineIntensity(int amount)
{ {
uInt32 intensity = enableScanlines(amount); uInt32 intensity = enableScanlines(amount);
buf << "Scanline intensity at " << intensity << "%"; buf << "Scanline intensity at " << intensity << "%";
myOSystem->settings().setValue("tv_scanlines", intensity); myOSystem->settings().setValue("tv.scanlines", intensity);
} }
else else
buf << "Scanlines only available in TV filtering mode"; buf << "Scanlines only available in TV filtering mode";
@ -628,10 +628,10 @@ void FrameBuffer::toggleScanlineInterpolation()
{ {
if(ntscEnabled()) if(ntscEnabled())
{ {
bool enable = !myOSystem->settings().getBool("tv_scaninter"); bool enable = !myOSystem->settings().getBool("tv.scaninter");
enableScanlineInterpolation(enable); enableScanlineInterpolation(enable);
buf << "Scanline interpolation " << (enable ? "enabled" : "disabled"); buf << "Scanline interpolation " << (enable ? "enabled" : "disabled");
myOSystem->settings().setValue("tv_scaninter", enable); myOSystem->settings().setValue("tv.scaninter", enable);
} }
else else
buf << "Scanlines only available in TV filtering mode"; buf << "Scanlines only available in TV filtering mode";
@ -821,7 +821,7 @@ bool FrameBuffer::changeVidMode(int direction)
showMessage(vidmode.gfxmode.description); showMessage(vidmode.gfxmode.description);
} }
if(saveModeChange) if(saveModeChange)
myOSystem->settings().setValue("tia_filter", vidmode.gfxmode.name); myOSystem->settings().setValue("tia.filter", vidmode.gfxmode.name);
refresh(); refresh();
} }
@ -1025,7 +1025,7 @@ FrameBuffer::VideoMode FrameBuffer::getSavedVidMode()
} }
else else
{ {
const string& name = myOSystem->settings().getString("tia_filter"); const string& name = myOSystem->settings().getString("tia.filter");
myCurrentModeList->setByGfxMode(name); myCurrentModeList->setByGfxMode(name);
} }

View File

@ -40,17 +40,8 @@ Settings::Settings(OSystem* osystem)
// Add options that are common to all versions of Stella // Add options that are common to all versions of Stella
setInternal("video", "soft"); setInternal("video", "soft");
// OpenGL specific options // Video-related options
setInternal("gl_inter", "false"); setInternal("vsync", "true");
setInternal("gl_aspectn", "90");
setInternal("gl_aspectp", "100");
setInternal("gl_fsscale", "false");
setInternal("gl_lib", "libGL.so");
setInternal("gl_vsync", "true");
setInternal("gl_vbo", "true");
// Framebuffer-related options
setInternal("tia_filter", "zoom2x");
setInternal("fullscreen", "0"); setInternal("fullscreen", "0");
setInternal("fullres", "auto"); setInternal("fullres", "auto");
setInternal("center", "false"); setInternal("center", "false");
@ -60,21 +51,28 @@ Settings::Settings(OSystem* osystem)
setInternal("timing", "sleep"); setInternal("timing", "sleep");
setInternal("uimessages", "true"); setInternal("uimessages", "true");
// TIA specific options
setInternal("tia.filter", "zoom2x");
setInternal("tia.inter", "false");
setInternal("tia.aspectn", "90");
setInternal("tia.aspectp", "100");
setInternal("gl_fsscale", "false"); //FIXSDL - deprecated
// TV filtering options // TV filtering options
setInternal("tv_filter", "0"); setInternal("tv.filter", "0");
setInternal("tv_scanlines", "25"); setInternal("tv.scanlines", "25");
setInternal("tv_scaninter", "true"); setInternal("tv.scaninter", "true");
// TV options when using 'custom' mode // TV options when using 'custom' mode
setInternal("tv_contrast", "0.0"); setInternal("tv.contrast", "0.0");
setInternal("tv_brightness", "0.0"); setInternal("tv.brightness", "0.0");
setInternal("tv_hue", "0.0"); setInternal("tv.hue", "0.0");
setInternal("tv_saturation", "0.0"); setInternal("tv.saturation", "0.0");
setInternal("tv_gamma", "0.0"); setInternal("tv.gamma", "0.0");
setInternal("tv_sharpness", "0.0"); setInternal("tv.sharpness", "0.0");
setInternal("tv_resolution", "0.0"); setInternal("tv.resolution", "0.0");
setInternal("tv_artifacts", "0.0"); setInternal("tv.artifacts", "0.0");
setInternal("tv_fringing", "0.0"); setInternal("tv.fringing", "0.0");
setInternal("tv_bleed", "0.0"); setInternal("tv.bleed", "0.0");
// Sound options // Sound options
setInternal("sound", "true"); setInternal("sound", "true");
@ -284,13 +282,13 @@ void Settings::validate()
if(s != "sleep" && s != "busy") setInternal("timing", "sleep"); if(s != "sleep" && s != "busy") setInternal("timing", "sleep");
//FIXSDL //FIXSDL
i = getInt("gl_aspectn"); i = getInt("tia.aspectn");
if(i < 80 || i > 120) setInternal("gl_aspectn", "100"); if(i < 80 || i > 120) setInternal("tia.aspectn", "100");
i = getInt("gl_aspectp"); i = getInt("tia.aspectp");
if(i < 80 || i > 120) setInternal("gl_aspectp", "100"); if(i < 80 || i > 120) setInternal("tia.aspectp", "100");
i = getInt("tv_filter"); i = getInt("tv.filter");
if(i < 0 || i > 5) setInternal("tv_filter", "0"); if(i < 0 || i > 5) setInternal("tv.filter", "0");
////////////////// //////////////////
#ifdef SOUND_SUPPORT #ifdef SOUND_SUPPORT
@ -354,29 +352,27 @@ void Settings::usage()
// FIXSDL // FIXSDL
<< " gl SDL OpenGL mode\n" << " gl SDL OpenGL mode\n"
<< endl << endl
<< " -gl_lib <name> Specify the OpenGL library\n" << " -tia.filter <filter> Use the specified filter for TIA image\n"
<< " -gl_inter <1|0> Enable interpolated (smooth) scaling\n" << " -tia.inter <1|0> Enable interpolated (smooth) scaling for TIA image\n"
<< " -gl_aspectn <number> Scale the TIA width by the given percentage in NTSC mode\n" << " -tia.aspectn <number> Scale the TIA width by the given percentage in NTSC mode\n"
<< " -gl_aspectp <number> Scale the TIA width by the given percentage in PAL mode\n" << " -tia.aspectp <number> Scale the TIA width by the given percentage in PAL mode\n"
<< " -gl_fsscale <1|0> Stretch GL image in fullscreen emulation mode to max/integer scale\n" << " -gl_fsscale <1|0> Stretch GL image in fullscreen emulation mode to max/integer scale\n"
<< " -gl_vsync <1|0> Enable 'synchronize to vertical blank interrupt'\n"
<< " -gl_vbo <1|0> Enable 'vertex buffer objects'\n"
<< endl << endl
<< " -tv_filter <0-5> Set TV effects off (0) or to specified mode (1-5)\n" << " -tv.filter <0-5> Set TV effects off (0) or to specified mode (1-5)\n"
<< " -tv_scanlines <0-100> Set scanline intensity to percentage (0 disables completely)\n" << " -tv.scanlines <0-100> Set scanline intensity to percentage (0 disables completely)\n"
<< " -tv_scaninter <1|0> Enable interpolated (smooth) scanlines\n" << " -tv.scaninter <1|0> Enable interpolated (smooth) scanlines\n"
<< " -tv_contrast <value> Set TV effects custom contrast to value 1.0 - 1.0\n" << " -tv.contrast <value> Set TV effects custom contrast to value 1.0 - 1.0\n"
<< " -tv_brightness <value> Set TV effects custom brightness to value 1.0 - 1.0\n" << " -tv.brightness <value> Set TV effects custom brightness to value 1.0 - 1.0\n"
<< " -tv_hue <value> Set TV effects custom hue to value 1.0 - 1.0\n" << " -tv.hue <value> Set TV effects custom hue to value 1.0 - 1.0\n"
<< " -tv_saturation <value> Set TV effects custom saturation to value 1.0 - 1.0\n" << " -tv.saturation <value> Set TV effects custom saturation to value 1.0 - 1.0\n"
<< " -tv_gamma <value> Set TV effects custom gamma to value 1.0 - 1.0\n" << " -tv.gamma <value> Set TV effects custom gamma to value 1.0 - 1.0\n"
<< " -tv_sharpness <value> Set TV effects custom sharpness to value 1.0 - 1.0\n" << " -tv.sharpness <value> Set TV effects custom sharpness to value 1.0 - 1.0\n"
<< " -tv_resolution <value> Set TV effects custom resolution to value 1.0 - 1.0\n" << " -tv.resolution <value> Set TV effects custom resolution to value 1.0 - 1.0\n"
<< " -tv_artifacts <value> Set TV effects custom artifacts to value 1.0 - 1.0\n" << " -tv.artifacts <value> Set TV effects custom artifacts to value 1.0 - 1.0\n"
<< " -tv_fringing <value> Set TV effects custom fringing to value 1.0 - 1.0\n" << " -tv.fringing <value> Set TV effects custom fringing to value 1.0 - 1.0\n"
<< " -tv_bleed <value> Set TV effects custom bleed to value 1.0 - 1.0\n" << " -tv.bleed <value> Set TV effects custom bleed to value 1.0 - 1.0\n"
<< endl << endl
<< " -tia_filter <filter> Use the specified filter in emulation mode\n" << " -vsync <1|0> Enable 'synchronize to vertical blank interrupt'\n"
<< " -fullscreen <1|0|-1> Use fullscreen mode (1 or 0), or disable switching to fullscreen entirely\n" << " -fullscreen <1|0|-1> Use fullscreen mode (1 or 0), or disable switching to fullscreen entirely\n"
<< " -fullres <auto|WxH> The resolution to use in fullscreen mode\n" << " -fullres <auto|WxH> The resolution to use in fullscreen mode\n"
<< " -center <1|0> Centers game window (if possible)\n" << " -center <1|0> Centers game window (if possible)\n"

View File

@ -407,7 +407,7 @@ void VideoDialog::loadConfig()
const VariantList& items = const VariantList& items =
instance().frameBuffer().supportedTIAFilters(gl ? "gl" : "soft"); instance().frameBuffer().supportedTIAFilters(gl ? "gl" : "soft");
myTIAFilterPopup->addItems(items); myTIAFilterPopup->addItems(items);
myTIAFilterPopup->setSelected(instance().settings().getString("tia_filter"), myTIAFilterPopup->setSelected(instance().settings().getString("tia.filter"),
instance().desktopWidth() < 640 ? "zoom1x" : "zoom2x"); instance().desktopWidth() < 640 ? "zoom1x" : "zoom2x");
// TIA Palette // TIA Palette
@ -423,19 +423,19 @@ void VideoDialog::loadConfig()
instance().settings().getString("timing"), "sleep"); instance().settings().getString("timing"), "sleep");
// GL Filter setting // GL Filter setting
const string& gl_inter = instance().settings().getBool("gl_inter") ? const string& tia_inter = instance().settings().getBool("tia.inter") ?
"linear" : "nearest"; "linear" : "nearest";
myGLFilterPopup->setSelected(gl_inter, "nearest"); myGLFilterPopup->setSelected(tia_inter, "nearest");
myGLFilterPopup->setEnabled(gl); myGLFilterPopup->setEnabled(gl);
// GL aspect ratio setting (NTSC and PAL) // GL aspect ratio setting (NTSC and PAL)
myNAspectRatioSlider->setValue(instance().settings().getInt("gl_aspectn")); myNAspectRatioSlider->setValue(instance().settings().getInt("tia.aspectn"));
myNAspectRatioSlider->setEnabled(gl); myNAspectRatioSlider->setEnabled(gl);
myNAspectRatioLabel->setLabel(instance().settings().getString("gl_aspectn")); myNAspectRatioLabel->setLabel(instance().settings().getString("tia.aspectn"));
myNAspectRatioLabel->setEnabled(gl); myNAspectRatioLabel->setEnabled(gl);
myPAspectRatioSlider->setValue(instance().settings().getInt("gl_aspectp")); myPAspectRatioSlider->setValue(instance().settings().getInt("tia.aspectp"));
myPAspectRatioSlider->setEnabled(gl); myPAspectRatioSlider->setEnabled(gl);
myPAspectRatioLabel->setLabel(instance().settings().getString("gl_aspectp")); myPAspectRatioLabel->setLabel(instance().settings().getString("tia.aspectp"));
myPAspectRatioLabel->setEnabled(gl); myPAspectRatioLabel->setEnabled(gl);
// Framerate (0 or -1 means automatic framerate calculation) // Framerate (0 or -1 means automatic framerate calculation)
@ -457,7 +457,7 @@ void VideoDialog::loadConfig()
myGLStretchCheckbox->setEnabled(gl); myGLStretchCheckbox->setEnabled(gl);
// Use sync to vertical blank (GL mode only) // Use sync to vertical blank (GL mode only)
myUseVSyncCheckbox->setState(instance().settings().getBool("gl_vsync")); myUseVSyncCheckbox->setState(instance().settings().getBool("vsync"));
myUseVSyncCheckbox->setEnabled(gl); myUseVSyncCheckbox->setEnabled(gl);
// Show UI messages // Show UI messages
@ -471,17 +471,17 @@ void VideoDialog::loadConfig()
// TV Mode // TV Mode
myTVMode->setSelected( myTVMode->setSelected(
instance().settings().getString("tv_filter"), "0"); instance().settings().getString("tv.filter"), "0");
int preset = instance().settings().getInt("tv_filter"); int preset = instance().settings().getInt("tv.filter");
handleTVModeChange((NTSCFilter::Preset)preset); handleTVModeChange((NTSCFilter::Preset)preset);
// TV Custom adjustables // TV Custom adjustables
loadTVAdjustables(NTSCFilter::PRESET_CUSTOM); loadTVAdjustables(NTSCFilter::PRESET_CUSTOM);
// TV scanline intensity and interpolation // TV scanline intensity and interpolation
myTVScanIntense->setValue(instance().settings().getInt("tv_scanlines")); myTVScanIntense->setValue(instance().settings().getInt("tv.scanlines"));
myTVScanIntenseLabel->setLabel(instance().settings().getString("tv_scanlines")); myTVScanIntenseLabel->setLabel(instance().settings().getString("tv.scanlines"));
myTVScanInterpolate->setState(instance().settings().getBool("tv_scaninter")); myTVScanInterpolate->setState(instance().settings().getBool("tv.scaninter"));
myTab->loadConfig(); myTab->loadConfig();
} }
@ -494,7 +494,7 @@ void VideoDialog::saveConfig()
myRendererPopup->getSelectedTag().toString()); myRendererPopup->getSelectedTag().toString());
// TIA Filter // TIA Filter
instance().settings().setValue("tia_filter", instance().settings().setValue("tia.filter",
myTIAFilterPopup->getSelectedTag().toString()); myTIAFilterPopup->getSelectedTag().toString());
// TIA Palette // TIA Palette
@ -510,12 +510,12 @@ void VideoDialog::saveConfig()
myFrameTimingPopup->getSelectedTag().toString()); myFrameTimingPopup->getSelectedTag().toString());
// GL Filter setting // GL Filter setting
instance().settings().setValue("gl_inter", instance().settings().setValue("tia.inter",
myGLFilterPopup->getSelectedTag().toString() == "linear" ? true : false); myGLFilterPopup->getSelectedTag().toString() == "linear" ? true : false);
// GL aspect ratio setting (NTSC and PAL) // GL aspect ratio setting (NTSC and PAL)
instance().settings().setValue("gl_aspectn", myNAspectRatioLabel->getLabel()); instance().settings().setValue("tia.aspectn", myNAspectRatioLabel->getLabel());
instance().settings().setValue("gl_aspectp", myPAspectRatioLabel->getLabel()); instance().settings().setValue("tia.aspectp", myPAspectRatioLabel->getLabel());
// Framerate // Framerate
int i = myFrameRateSlider->getValue(); int i = myFrameRateSlider->getValue();
@ -540,7 +540,7 @@ void VideoDialog::saveConfig()
instance().settings().setValue("gl_fsscale", myGLStretchCheckbox->getState()); instance().settings().setValue("gl_fsscale", myGLStretchCheckbox->getState());
// Use sync to vertical blank (GL mode only) // Use sync to vertical blank (GL mode only)
instance().settings().setValue("gl_vsync", myUseVSyncCheckbox->getState()); instance().settings().setValue("vsync", myUseVSyncCheckbox->getState());
// Show UI messages // Show UI messages
instance().settings().setValue("uimessages", myUIMessagesCheckbox->getState()); instance().settings().setValue("uimessages", myUIMessagesCheckbox->getState());
@ -552,7 +552,7 @@ void VideoDialog::saveConfig()
instance().settings().setValue("fastscbios", myFastSCBiosCheckbox->getState()); instance().settings().setValue("fastscbios", myFastSCBiosCheckbox->getState());
// TV Mode // TV Mode
instance().settings().setValue("tv_filter", instance().settings().setValue("tv.filter",
myTVMode->getSelectedTag().toString()); myTVMode->getSelectedTag().toString());
// TV Custom adjustables // TV Custom adjustables
@ -570,8 +570,8 @@ void VideoDialog::saveConfig()
instance().frameBuffer().ntsc().setCustomAdjustables(adj); instance().frameBuffer().ntsc().setCustomAdjustables(adj);
// TV scanline intensity and interpolation // TV scanline intensity and interpolation
instance().settings().setValue("tv_scanlines", myTVScanIntenseLabel->getLabel()); instance().settings().setValue("tv.scanlines", myTVScanIntenseLabel->getLabel());
instance().settings().setValue("tv_scaninter", myTVScanInterpolate->getState()); instance().settings().setValue("tv.scaninter", myTVScanInterpolate->getState());
// Finally, issue a complete framebuffer re-initialization // Finally, issue a complete framebuffer re-initialization
instance().createFrameBuffer(); instance().createFrameBuffer();

View File

@ -31,9 +31,6 @@ extern "C" {
SettingsMACOSX::SettingsMACOSX(OSystem* osystem) SettingsMACOSX::SettingsMACOSX(OSystem* osystem)
: Settings(osystem) : Settings(osystem)
{ {
setInternal("video", "gl"); // Use opengl mode by default
setInternal("gl_lib", "libGL.so"); // Try this one first, then let the system decide
setInternal("gl_vsync", "true"); // OSX almost always supports vsync; let's use it
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

View File

@ -25,9 +25,6 @@
SettingsUNIX::SettingsUNIX(OSystem* osystem) SettingsUNIX::SettingsUNIX(OSystem* osystem)
: Settings(osystem) : Settings(osystem)
{ {
setInternal("gl_lib", "libGL.so");
// Most Linux GL implementations don't support this yet
setInternal("gl_vsync", "false");
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

View File

@ -25,7 +25,6 @@
SettingsWINDOWS::SettingsWINDOWS(OSystem* osystem) SettingsWINDOWS::SettingsWINDOWS(OSystem* osystem)
: Settings(osystem) : Settings(osystem)
{ {
setInternal("gl_lib", "opengl32.dll");
setInternal("fragsize", "512"); setInternal("fragsize", "512");
} }