aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndre Heider2009-09-03 17:52:38 +0000
committerAndre Heider2009-09-03 17:52:38 +0000
commit9aa7546a3491acbbace93729efed2dc62a1f1855 (patch)
tree74cd030a464db0825a4224d87a9847fc25bc130e
parent05035fd8c34443276d885eac58f9444579d71326 (diff)
downloadscummvm-rg350-9aa7546a3491acbbace93729efed2dc62a1f1855.tar.gz
scummvm-rg350-9aa7546a3491acbbace93729efed2dc62a1f1855.tar.bz2
scummvm-rg350-9aa7546a3491acbbace93729efed2dc62a1f1855.zip
Removed AA modes in favor of bilinear texture filtering, which gives much better results. Renamed a few types and enums to make it clear what they're for.
svn-id: r43919
-rw-r--r--backends/platform/wii/gfx.cpp71
-rw-r--r--backends/platform/wii/gfx.h27
-rw-r--r--backends/platform/wii/options.cpp30
-rw-r--r--backends/platform/wii/options.h6
-rw-r--r--backends/platform/wii/osystem.cpp3
-rw-r--r--backends/platform/wii/osystem.h8
-rw-r--r--backends/platform/wii/osystem_gfx.cpp114
-rw-r--r--dists/wii/READMII16
8 files changed, 175 insertions, 100 deletions
diff --git a/backends/platform/wii/gfx.cpp b/backends/platform/wii/gfx.cpp
index a23904e207..3b4a80fc5a 100644
--- a/backends/platform/wii/gfx.cpp
+++ b/backends/platform/wii/gfx.cpp
@@ -23,7 +23,7 @@ extern "C" {
#define ORIGIN_Z (-500)
static GXRModeObj *_vm = NULL;
-static bool _dualstrike = false;
+static bool _doublestrike = false;
static u32 *_fb[2] = { NULL, NULL };
static u8 _fb_active = 0;
@@ -46,63 +46,63 @@ static struct {
{ 0.0f, 0.0f, -0.5f }
};
-// Standard, StandardAa, Ds, DsAa
-static GXRModeObj *mode_table[5][4] = {
- { &TVNtsc480Prog, &TVNtsc480ProgAa, &TVNtsc240Ds, &TVNtsc240DsAa },
- { &TVNtsc480IntDf, &TVNtsc480IntAa, &TVNtsc240Ds, &TVNtsc240DsAa },
- { &TVPal528IntDf, &TVPal524IntAa, &TVPal264Ds, &TVPal264DsAa },
- { &TVEurgb60Hz480IntDf, &TVEurgb60Hz480IntAa, &TVEurgb60Hz240Ds, &TVEurgb60Hz240DsAa },
- { &TVMpal480IntDf, &TVMpal480IntAa, &TVMpal240Ds, &TVMpal240DsAa }
+// Standard, DS
+static GXRModeObj *mode_table[5][2] = {
+ { &TVNtsc480Prog, &TVNtsc240Ds },
+ { &TVNtsc480IntDf, &TVNtsc240Ds },
+ { &TVPal574IntDfScale, &TVPal264Ds },
+ { &TVEurgb60Hz480IntDf, &TVEurgb60Hz240Ds },
+ { &TVMpal480IntDf, &TVMpal240Ds }
};
-static gfx_video_mode_t _gfx_video_get_mode(void) {
- gfx_video_mode_t mode;
+gfx_video_standard_t gfx_video_get_standard(void) {
+ gfx_video_standard_t standard;
#ifdef HW_RVL
if ((CONF_GetProgressiveScan() > 0) && VIDEO_HaveComponentCable()) {
- mode = GFX_MODE_PROGRESSIVE;
+ standard = GFX_STANDARD_PROGRESSIVE;
} else {
switch (CONF_GetVideo()) {
case CONF_VIDEO_PAL:
if (CONF_GetEuRGB60() > 0)
- mode = GFX_MODE_EURGB60;
+ standard = GFX_STANDARD_EURGB60;
else
- mode = GFX_MODE_PAL;
+ standard = GFX_STANDARD_PAL;
break;
case CONF_VIDEO_MPAL:
- mode = GFX_MODE_MPAL;
+ standard = GFX_STANDARD_MPAL;
break;
default:
- mode = GFX_MODE_NTSC;
+ standard = GFX_STANDARD_NTSC;
break;
}
}
#else
switch (VIDEO_GetCurrentTvMode()) {
case VI_PAL:
- mode = GFX_MODE_PAL;
+ standard = GFX_STANDARD_PAL;
break;
case VI_MPAL:
- mode = GFX_MODE_MPAL;
+ standard = GFX_STANDARD_MPAL;
break;
default:
- mode = GFX_MODE_NTSC;
+ standard = GFX_STANDARD_NTSC;
break;
}
#endif
- return mode;
+ return standard;
}
-void gfx_video_init(gfx_video_mode_t mode, gfx_video_setup_t setup) {
+void gfx_video_init(gfx_video_standard_t standard, gfx_video_mode_t mode) {
u8 i;
- if (mode == GFX_MODE_AUTO)
- mode = _gfx_video_get_mode();
+ if (standard == GFX_STANDARD_AUTO)
+ standard = gfx_video_get_standard();
- _vm = mode_table[mode][setup];
+ _vm = mode_table[standard][mode];
_vm->viWidth = 672;
_vm->viXOrigin = (VI_MAX_WIDTH_NTSC - _vm->viWidth) / 2;
@@ -111,6 +111,7 @@ void gfx_video_init(gfx_video_mode_t mode, gfx_video_setup_t setup) {
VIDEO_WaitVSync();
VIDEO_Configure(_vm);
+ VIDEO_Flush();
if (_fb[0])
free(MEM_K1_TO_K0(_fb[0]));
@@ -167,7 +168,7 @@ static void _update_viewport(void) {
u16 usy = _underscan_y;
- if (!_dualstrike)
+ if (!_doublestrike)
usy *= 2;
u16 x1 = _underscan_x * 2;
@@ -191,7 +192,7 @@ static void _update_viewport(void) {
correction = _vm->efbHeight -
(u16) round((f32) _vm->efbHeight * ar / _ar);
- if (_dualstrike)
+ if (_doublestrike)
correction /= 2;
y1 += correction / 2;
@@ -221,13 +222,13 @@ void gfx_init(void) {
_update_viewport();
- _dualstrike = _vm->viHeight == 2 * _vm->xfbHeight;
+ _doublestrike = _vm->viHeight == 2 * _vm->xfbHeight;
yscale = GX_GetYScaleFactor(_vm->efbHeight, _vm->xfbHeight);
xfbHeight = GX_SetDispCopyYScale(yscale);
GX_SetDispCopySrc(0, 0, _vm->fbWidth, _vm->efbHeight);
GX_SetDispCopyDst(_vm->fbWidth, xfbHeight);
GX_SetCopyFilter(_vm->aa, _vm->sample_pattern, GX_TRUE, _vm->vfilter);
- GX_SetFieldMode(_vm->field_rendering, _dualstrike ? GX_ENABLE : GX_DISABLE);
+ GX_SetFieldMode(_vm->field_rendering, _doublestrike ? GX_ENABLE : GX_DISABLE);
if (_vm->aa)
GX_SetPixelFmt(GX_PF_RGB565_Z16, GX_ZC_LINEAR);
@@ -444,6 +445,22 @@ void gfx_coords(gfx_coords_t *coords, gfx_tex_t *tex, gfx_coord_t type) {
}
}
+bool gfx_tex_set_bilinear_filter(gfx_tex_t *tex, bool enable) {
+ if (!tex)
+ return false;
+
+ if (enable) {
+ if (tex->palette)
+ GX_InitTexObjFilterMode(&tex->obj, GX_LIN_MIP_NEAR, GX_LINEAR);
+ else
+ GX_InitTexObjFilterMode(&tex->obj, GX_LIN_MIP_LIN, GX_LINEAR);
+ } else {
+ GX_InitTexObjFilterMode(&tex->obj, GX_NEAR, GX_NEAR);
+ }
+
+ return true;
+}
+
bool gfx_tex_flush_texture(gfx_tex_t *tex) {
if (!tex)
return false;
diff --git a/backends/platform/wii/gfx.h b/backends/platform/wii/gfx.h
index f4c49653c5..93efdc04a3 100644
--- a/backends/platform/wii/gfx.h
+++ b/backends/platform/wii/gfx.h
@@ -18,20 +18,18 @@ extern "C" {
#endif
typedef enum {
- GFX_MODE_AUTO = -1,
- GFX_MODE_PROGRESSIVE = 0,
- GFX_MODE_NTSC,
- GFX_MODE_PAL,
- GFX_MODE_EURGB60,
- GFX_MODE_MPAL
-} gfx_video_mode_t;
+ GFX_STANDARD_AUTO = -1,
+ GFX_STANDARD_PROGRESSIVE = 0,
+ GFX_STANDARD_NTSC,
+ GFX_STANDARD_PAL,
+ GFX_STANDARD_EURGB60,
+ GFX_STANDARD_MPAL
+} gfx_video_standard_t;
typedef enum {
- GFX_SETUP_STANDARD = 0,
- GFX_SETUP_STANDARD_AA,
- GFX_SETUP_DS,
- GFX_SETUP_DS_AA
-} gfx_video_setup_t;
+ GFX_MODE_DEFAULT = 0,
+ GFX_MODE_DS,
+} gfx_video_mode_t;
typedef enum {
GFX_TF_RGB565 = 0,
@@ -63,7 +61,9 @@ typedef struct {
f32 w, h;
} gfx_coords_t;
-void gfx_video_init(gfx_video_mode_t mode, gfx_video_setup_t setup);
+gfx_video_standard_t gfx_video_get_standard(void);
+
+void gfx_video_init(gfx_video_standard_t standard, gfx_video_mode_t mode);
void gfx_video_deinit(void);
u16 gfx_video_get_width(void);
@@ -82,6 +82,7 @@ void gfx_tex_deinit(gfx_tex_t *tex);
void gfx_coords(gfx_coords_t *coords, gfx_tex_t *tex, gfx_coord_t type);
+bool gfx_tex_set_bilinear_filter(gfx_tex_t *tex, bool enable);
bool gfx_tex_flush_texture(gfx_tex_t *tex);
bool gfx_tex_flush_palette(gfx_tex_t *tex);
bool gfx_tex_clear_palette(gfx_tex_t *tex);
diff --git a/backends/platform/wii/options.cpp b/backends/platform/wii/options.cpp
index 52c29a8a24..f8b70804d0 100644
--- a/backends/platform/wii/options.cpp
+++ b/backends/platform/wii/options.cpp
@@ -27,10 +27,17 @@
#include "options.h"
#include "gfx.h"
-WiiOptionsDialog::WiiOptionsDialog(const OSystem::GraphicsMode &gfxMode) :
- Dialog(180, 120, 304, 200) {
-
- _videoModePrefix = String("wii_video_") + gfxMode.name;
+WiiOptionsDialog::WiiOptionsDialog(bool doubleStrike) :
+ Dialog(180, 120, 304, 200),
+ _doubleStrike(doubleStrike) {
+
+ if (_doubleStrike) {
+ _strUnderscanX = "wii_video_ds_underscan_x";
+ _strUnderscanY = "wii_video_ds_underscan_y";
+ } else {
+ _strUnderscanX = "wii_video_default_underscan_x";
+ _strUnderscanY = "wii_video_default_underscan_y";
+ }
new ButtonWidget(this, 56, 160, 108, 24, "Cancel", 'c');
new ButtonWidget(this, 180, 160, 108, 24, "Ok", 'k');
@@ -42,7 +49,8 @@ WiiOptionsDialog::WiiOptionsDialog(const OSystem::GraphicsMode &gfxMode) :
new StaticTextWidget(tab, 16, 16, 128, 16,
"Current video mode:", Graphics::kTextAlignRight);
new StaticTextWidget(tab, 160, 16, 128, 16,
- gfxMode.description, Graphics::kTextAlignLeft);
+ _doubleStrike ? "Double-strike" : "Default",
+ Graphics::kTextAlignLeft);
new StaticTextWidget(tab, 16, 48, 128, 16,
"Horizontal underscan:", Graphics::kTextAlignRight);
@@ -88,16 +96,16 @@ void WiiOptionsDialog::handleCommand(CommandSender *sender, uint32 cmd,
}
void WiiOptionsDialog::revert() {
- gfx_set_underscan(ConfMan.getInt(_videoModePrefix + "_underscan_x",
+ gfx_set_underscan(ConfMan.getInt(_strUnderscanX,
Common::ConfigManager::kApplicationDomain),
- ConfMan.getInt(_videoModePrefix + "_underscan_y",
+ ConfMan.getInt(_strUnderscanY,
Common::ConfigManager::kApplicationDomain));
}
void WiiOptionsDialog::load() {
- int x = ConfMan.getInt(_videoModePrefix + "_underscan_x",
+ int x = ConfMan.getInt(_strUnderscanX,
Common::ConfigManager::kApplicationDomain);
- int y = ConfMan.getInt(_videoModePrefix + "_underscan_y",
+ int y = ConfMan.getInt(_strUnderscanY,
Common::ConfigManager::kApplicationDomain);
_sliderUnderscanX->setValue(x);
@@ -105,10 +113,10 @@ void WiiOptionsDialog::load() {
}
void WiiOptionsDialog::save() {
- ConfMan.setInt(_videoModePrefix + "_underscan_x",
+ ConfMan.setInt(_strUnderscanX,
_sliderUnderscanX->getValue(),
Common::ConfigManager::kApplicationDomain);
- ConfMan.setInt(_videoModePrefix + "_underscan_y",
+ ConfMan.setInt(_strUnderscanY,
_sliderUnderscanY->getValue(),
Common::ConfigManager::kApplicationDomain);
ConfMan.flushToDisk();
diff --git a/backends/platform/wii/options.h b/backends/platform/wii/options.h
index c5e045bdf3..83c8ddd0d6 100644
--- a/backends/platform/wii/options.h
+++ b/backends/platform/wii/options.h
@@ -32,13 +32,15 @@ class WiiOptionsDialog: public GUI::Dialog {
typedef Common::String String;
public:
- WiiOptionsDialog(const OSystem::GraphicsMode &gfxMode);
+ WiiOptionsDialog(bool doubleStrike);
virtual ~WiiOptionsDialog();
virtual void handleCommand(CommandSender *sender, uint32 cmd, uint32 data);
private:
- String _videoModePrefix;
+ bool _doubleStrike;
+ String _strUnderscanX;
+ String _strUnderscanY;
SliderWidget *_sliderUnderscanX;
SliderWidget *_sliderUnderscanY;
diff --git a/backends/platform/wii/osystem.cpp b/backends/platform/wii/osystem.cpp
index e928ef30a7..39c6b9df53 100644
--- a/backends/platform/wii/osystem.cpp
+++ b/backends/platform/wii/osystem.cpp
@@ -58,6 +58,7 @@ OSystem_Wii::OSystem_Wii() :
_configGraphicsMode(0),
_actualGraphicsMode(0),
+ _bilinearFilter(false),
#ifdef USE_RGB_COLOR
_pfRGB565(Graphics::PixelFormat(2, 5, 6, 5, 0, 11, 5, 0, 0)),
_pfRGB3444(Graphics::PixelFormat(2, 4, 4, 4, 3, 8, 4, 0, 12)),
@@ -134,7 +135,7 @@ void OSystem_Wii::engineInit() {
void OSystem_Wii::engineDone() {
_gameRunning = false;
- switchVideoMode(GFX_SETUP_STANDARD);
+ switchVideoMode(gmStandard);
gfx_set_ar(4.0 / 3.0);
}
diff --git a/backends/platform/wii/osystem.h b/backends/platform/wii/osystem.h
index 313e7849ec..c4f79d9386 100644
--- a/backends/platform/wii/osystem.h
+++ b/backends/platform/wii/osystem.h
@@ -85,6 +85,7 @@ private:
s32 _configGraphicsMode;
s32 _actualGraphicsMode;
+ bool _bilinearFilter;
#ifdef USE_RGB_COLOR
const Graphics::PixelFormat _pfRGB565;
const Graphics::PixelFormat _pfRGB3444;
@@ -130,6 +131,13 @@ protected:
DefaultTimerManager *_timer;
public:
+ enum {
+ gmStandard = 0,
+ gmStandardFiltered,
+ gmDoubleStrike,
+ gmDoubleStrikeFiltered
+ };
+
OSystem_Wii();
virtual ~OSystem_Wii();
diff --git a/backends/platform/wii/osystem_gfx.cpp b/backends/platform/wii/osystem_gfx.cpp
index 6e33fb463d..3feaf65c1e 100644
--- a/backends/platform/wii/osystem_gfx.cpp
+++ b/backends/platform/wii/osystem_gfx.cpp
@@ -35,32 +35,41 @@
#define TLUT_MOUSE GX_TLUT1
static const OSystem::GraphicsMode _supportedGraphicsModes[] = {
- { "standard", "Standard", GFX_SETUP_STANDARD },
- { "standardaa", "Standard antialiased", GFX_SETUP_STANDARD_AA },
- { "ds", "Double-strike", GFX_SETUP_DS },
- { "dsaa", "Double-strike antialiased", GFX_SETUP_DS_AA },
+ {
+ "default",
+ "Default",
+ OSystem_Wii::gmStandard
+ },
+ {
+ "defaultbilinear",
+ "Default, bilinear filtering",
+ OSystem_Wii::gmStandardFiltered
+ },
+ {
+ "ds",
+ "Double-strike",
+ OSystem_Wii::gmDoubleStrike
+ },
+ {
+ "dsbilinear",
+ "Double-strike, bilinear filtering",
+ OSystem_Wii::gmDoubleStrikeFiltered
+ },
{ 0, 0, 0 }
};
void OSystem_Wii::initGfx() {
ConfMan.registerDefault("fullscreen", true);
ConfMan.registerDefault("aspect_ratio", true);
+ ConfMan.registerDefault("wii_video_default_underscan_x", 16);
+ ConfMan.registerDefault("wii_video_default_underscan_y", 16);
+ ConfMan.registerDefault("wii_video_ds_underscan_x", 16);
+ ConfMan.registerDefault("wii_video_ds_underscan_y", 16);
- int i = 0;
- while (_supportedGraphicsModes[i].name) {
- Common::String s("wii_video_");
- s += _supportedGraphicsModes[i].name;
-
- ConfMan.registerDefault(s + "_underscan_x", 16);
- ConfMan.registerDefault(s + "_underscan_y", 16);
-
- i++;
- }
-
- gfx_video_init(GFX_MODE_AUTO, GFX_SETUP_STANDARD);
+ gfx_video_init(GFX_STANDARD_AUTO, GFX_MODE_DEFAULT);
gfx_init();
- gfx_set_underscan(ConfMan.getInt("wii_video_standard_underscan_x"),
- ConfMan.getInt("wii_video_standard_underscan_y"));
+ gfx_set_underscan(ConfMan.getInt("wii_video_default_underscan_x"),
+ ConfMan.getInt("wii_video_default_underscan_y"));
_overlayWidth = gfx_video_get_width();
_overlayHeight = gfx_video_get_height();
@@ -134,32 +143,51 @@ void OSystem_Wii::updateScreenResolution() {
}
void OSystem_Wii::switchVideoMode(int mode) {
+ static const struct {
+ gfx_video_mode_t mode;
+ bool filter;
+ } map[] = {
+ { GFX_MODE_DEFAULT, false },
+ { GFX_MODE_DEFAULT, true },
+ { GFX_MODE_DS, false },
+ { GFX_MODE_DS, true }
+ };
+
if (_gameHeight > 240) {
- if (mode == GFX_SETUP_DS)
- mode = GFX_SETUP_STANDARD;
- else if (mode == GFX_SETUP_DS_AA)
- mode = GFX_SETUP_STANDARD_AA;
+ if (mode == gmDoubleStrike)
+ mode = gmStandard;
+ else if (mode == gmDoubleStrikeFiltered)
+ mode = gmStandardFiltered;
}
- if (_actualGraphicsMode == mode)
- return;
-
printf("switchVideoMode %d\n", mode);
- gfx_video_setup_t setup = static_cast<gfx_video_setup_t> (mode);
- gfx_video_deinit();
- gfx_video_init(GFX_MODE_AUTO, setup);
- gfx_init();
-
- Common::String s("wii_video_");
- s += _supportedGraphicsModes[mode].name;
- gfx_set_underscan(ConfMan.getInt(s + "_underscan_x",
- Common::ConfigManager::kApplicationDomain),
- ConfMan.getInt(s + "_underscan_y",
- Common::ConfigManager::kApplicationDomain));
+ if (map[_actualGraphicsMode].mode != map[mode].mode) {
+ gfx_video_deinit();
+ gfx_video_init(GFX_STANDARD_AUTO, map[mode].mode);
+ gfx_init();
+ }
_actualGraphicsMode = mode;
+ _bilinearFilter = map[mode].filter;
+ gfx_tex_set_bilinear_filter(&_texGame, _bilinearFilter);
+ gfx_tex_set_bilinear_filter(&_texMouse, _bilinearFilter);
+
+ u16 usx, usy;
+ if (map[mode].mode == GFX_MODE_DS) {
+ usx = ConfMan.getInt("wii_video_ds_underscan_x",
+ Common::ConfigManager::kApplicationDomain);
+ usy = ConfMan.getInt("wii_video_ds_underscan_y",
+ Common::ConfigManager::kApplicationDomain);
+ } else {
+ usx = ConfMan.getInt("wii_video_default_underscan_x",
+ Common::ConfigManager::kApplicationDomain);
+ usy = ConfMan.getInt("wii_video_default_underscan_y",
+ Common::ConfigManager::kApplicationDomain);
+ }
+
+ gfx_set_underscan(usx, usy);
gfx_coords(&_coordsOverlay, &_texOverlay, GFX_COORD_FULLSCREEN);
gfx_coords(&_coordsGame, &_texGame, GFX_COORD_FULLSCREEN);
updateScreenResolution();
@@ -170,7 +198,7 @@ const OSystem::GraphicsMode* OSystem_Wii::getSupportedGraphicsModes() const {
}
int OSystem_Wii::getDefaultGraphicsMode() const {
- return GFX_SETUP_STANDARD;
+ return gmStandard;
}
bool OSystem_Wii::setGraphicsMode(int mode) {
@@ -270,6 +298,7 @@ void OSystem_Wii::initSize(uint width, uint height,
::abort();
}
+ gfx_tex_set_bilinear_filter(&_texGame, _bilinearFilter);
gfx_coords(&_coordsGame, &_texGame, GFX_COORD_FULLSCREEN);
updateScreenResolution();
@@ -342,6 +371,8 @@ void OSystem_Wii::setCursorPalette(const byte *colors, uint start, uint num) {
printf("could not init the mouse texture\n");
::abort();
}
+
+ gfx_tex_set_bilinear_filter(&_texMouse, _bilinearFilter);
}
if (_cursorPaletteDisabled) {
@@ -493,6 +524,7 @@ void OSystem_Wii::showOverlay() {
_mouseY = _overlayHeight / 2;
_overlayVisible = true;
updateScreenResolution();
+ gfx_tex_set_bilinear_filter(&_texMouse, true);
}
void OSystem_Wii::hideOverlay() {
@@ -500,6 +532,7 @@ void OSystem_Wii::hideOverlay() {
_mouseY = _gameHeight / 2;
_overlayVisible = false;
updateScreenResolution();
+ gfx_tex_set_bilinear_filter(&_texMouse, _bilinearFilter);
}
void OSystem_Wii::clearOverlay() {
@@ -616,6 +649,8 @@ void OSystem_Wii::setMouseCursor(const byte *buf, uint w, uint h, int hotspotX,
::abort();
}
+ gfx_tex_set_bilinear_filter(&_texMouse, _bilinearFilter);
+
if ((tw != w) || (th != h))
tmpBuf = true;
@@ -687,8 +722,11 @@ void OSystem_Wii::showOptionsDialog() {
if (_optionsDlgActive)
return;
+ bool ds = (_actualGraphicsMode == gmDoubleStrike) ||
+ (_actualGraphicsMode == gmDoubleStrikeFiltered);
+
_optionsDlgActive = true;
- WiiOptionsDialog dlg(_supportedGraphicsModes[_actualGraphicsMode]);
+ WiiOptionsDialog dlg(ds);
dlg.runModal();
_optionsDlgActive = false;
}
diff --git a/dists/wii/READMII b/dists/wii/READMII
index 7b3a457963..66b00f6871 100644
--- a/dists/wii/READMII
+++ b/dists/wii/READMII
@@ -68,19 +68,19 @@ DISPLAY SETUP
"Graphics mode"
There are 4 modes to choose from:
- 1) Standard
- 2) Standard antialiased
- 3) Dual-strike
- 4) Dual-strike antialiased
+ 1) Default
+ 2) Default, bilinear filtering
+ 3) Double-strike
+ 4) Double-strike, bilinear filtering
- Dual-strike modes render at half the vertical resolution. On interlaced
+ Double-strike modes render at half the vertical resolution. On interlaced
modes this means that only one field is used for rendering, effectively
using progressive frames (240p) with no "combing" effect. These modes
improve the picture quality for low-res games, especially on CRTs.
Not all display devices support these modes. Only available for games with
a vertical resolution of 240 pixels or less.
- Antialiased modes soften the picture to some degree. This is a feature of
+ Bilinear filtering softens the picture to some degree. This is a feature of
the GPU (no game performance loss).
"Aspect ratio correction"
@@ -98,8 +98,8 @@ DISPLAY SETUP
If the picture gets cropped or black bars are visible, use the Wii options
dialog to adjust the video output to your display device. Pressing 1 on the
Wiimote or R on the Gamecube pad opens this dialog. The presented video
- options are specific to each of the graphics modes mentioned above. Settings
- will be saved for each.
+ options have to be set for the default and the double-strike modes
+ independently.
THANKS