summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Lambers <marlam@marlam.de>2011-02-13 21:57:30 +0100
committerMartin Lambers <marlam@marlam.de>2011-02-13 21:57:30 +0100
commit6f09ac72483d1ea3103506066012844147c4d4bb (patch)
tree8f62b197c230d8ed75ca9f8d09172cc524b64d99
parent90e4ba79a239073a4b04cc68c55e7c64a0035267 (diff)
downloadbino-6f09ac72483d1ea3103506066012844147c4d4bb.tar.gz
Add support for more anaglyph types.
Added: red-green-monochrome red-blue-monochrome green-magenta-monochrome green-magenta-half-color green-magenta-full-color
-rw-r--r--doc/bino.125
-rw-r--r--doc/bino.texi24
-rw-r--r--src/main.cpp145
-rw-r--r--src/media_data.cpp67
-rw-r--r--src/media_data.h13
-rw-r--r--src/player.cpp2
-rw-r--r--src/player_qt.cpp91
-rw-r--r--src/video_output.cpp39
-rw-r--r--src/video_output_render.fs.glsl39
9 files changed, 287 insertions, 158 deletions
diff --git a/doc/bino.1 b/doc/bino.1
index 7a90006..c37a0b6 100644
--- a/doc/bino.1
+++ b/doc/bino.1
@@ -114,16 +114,24 @@ Left view even rows, right view odd rows.
Left view even columns, right view odd columns.
.IP "\fIcheckerboard\fP"
Left and right view in checkerboard pattern.
-.IP "\fIanaglyph\fP"
-Red/cyan anaglyph, default method, same as \fIanaglyph\-dubois\fP.
-.IP "\fIanaglyph\-monochrome\fP"
+.IP "\fIred\-green\-monochrome\fP"
+Red/green anaglyph, monochrome method.
+.IP "\fIred\-blue\-monochrome\fP"
+Red/blue anaglyph, monochrome method.
+.IP "\fIred\-cyan\-monochrome\fP"
Red/cyan anaglyph, monochrome method.
-.IP "\fIanaglyph\-full\-color\fP"
-Red/cyan anaglyph, full color method.
-.IP "\fIanaglyph\-half\-color\fP"
+.IP "\fIred\-cyan\-half\-color\fP"
Red/cyan anaglyph, half color method.
-.IP "\fIanaglyph\-dubois\fP"
+.IP "\fIred\-cyan\-full\-color\fP"
+Red/cyan anaglyph, full color method.
+.IP "\fIred\-cyan\-dubois\fP"
Red/cyan anaglyph, high\-quality Dubois method.
+.IP "\fIgreen\-magenta\-monochrome\fP"
+Green/magenta anaglyph, monochrome method.
+.IP "\fIgreen\-magenta\-half\-color\fP"
+Green/magenta anaglyph, half color method.
+.IP "\fIgreen\-magenta\-full\-color\fP"
+Green/magenta anaglyph, full color method.
.IP "\fIstereo\fP"
OpenGL quad\-buffer stereo.
.IP "\fIequalizer\fP"
@@ -132,7 +140,8 @@ Multi-display OpenGL via Equalizer with a 2D canvas setup.
Multi-display OpenGL via Equalizer with a 3D screen setup.
.PP
For stereo input, the default is \fIstereo\fP if the display supports it,
-otherwise \fIanaglyph\fP. The default for mono input is \fImono\-left\fP.
+otherwise \fIred\-cyan\-dubois\fP. The default for mono input is
+\fImono\-left\fP.
.RE
.IP "\-s|\-\-swap\-eyes"
Swap left/right view.
diff --git a/doc/bino.texi b/doc/bino.texi
index f976ad4..8b944ac 100644
--- a/doc/bino.texi
+++ b/doc/bino.texi
@@ -194,16 +194,24 @@ Left view even rows, right view odd rows.
Left view even columns, right view odd columns.
@item checkerboard
Left and right view in checkerboard pattern.
-@item anaglyph
-Red/cyan anaglyph, default method, same as @var{anaglyph-dubois}.
-@item anaglyph-monochrome
+@item red-green-monochrome
+Red/green anaglyph, monochrome method.
+@item red-blue-monochrome
+Red/blue anaglyph, monochrome method.
+@item red-cyan-monochrome
Red/cyan anaglyph, monochrome method.
-@item anaglyph-full-color
-Red/cyan anaglyph, full color method.
-@item anaglyph-half-color
+@item red-cyan-half-color
Red/cyan anaglyph, half color method.
-@item anaglyph-dubois
+@item red-cyan-full-color
+Red/cyan anaglyph, full color method.
+@item red-cyan-dubois
Red/cyan anaglyph, high-quality Dubois method.
+@item green-magenta-monochrome
+Green/magenta anaglyph, monochrome method.
+@item green-magenta-half-color
+Green/magenta anaglyph, half color method.
+@item green-magenta-full-color
+Green/magenta anaglyph, full color method.
@item stereo
OpenGL quad-buffer stereo.
@item equalizer
@@ -213,7 +221,7 @@ Multi-display OpenGL via Equalizer with a 3D screen setup.
@end table
For stereo input, the default is @var{stereo} if the display supports it,
-otherwise @var{anaglyph}. The default for mono input is @var{mono-left}.
+otherwise @var{red-cyan-dubois}. The default for mono input is @var{mono-left}.
@node File Name Conventions
@chapter File Name Conventions
diff --git a/src/main.cpp b/src/main.cpp
index 89d9144..7a2e0b3 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -92,11 +92,15 @@ int main(int argc, char *argv[])
video_output_modes.push_back("even-odd-rows");
video_output_modes.push_back("even-odd-columns");
video_output_modes.push_back("checkerboard");
- video_output_modes.push_back("anaglyph");
- video_output_modes.push_back("anaglyph-monochrome");
- video_output_modes.push_back("anaglyph-full-color");
- video_output_modes.push_back("anaglyph-half-color");
- video_output_modes.push_back("anaglyph-dubois");
+ video_output_modes.push_back("red-green-monochrome");
+ video_output_modes.push_back("red-blue-monochrome");
+ video_output_modes.push_back("red-cyan-monochrome");
+ video_output_modes.push_back("red-cyan-half-color");
+ video_output_modes.push_back("red-cyan-full-color");
+ video_output_modes.push_back("red-cyan-dubois");
+ video_output_modes.push_back("green-magenta-monochrome");
+ video_output_modes.push_back("green-magenta-half-color");
+ video_output_modes.push_back("green-magenta-full-color");
video_output_modes.push_back("stereo");
video_output_modes.push_back("equalizer");
video_output_modes.push_back("equalizer-3d");
@@ -164,72 +168,75 @@ int main(int argc, char *argv[])
" %s [option...] [file0] [file1] [file2]\n"
"\n"
"Options:\n"
- " --help Print help.\n"
- " --version Print version.\n"
- " -n|--no-gui Do not use the GUI, just show a plain window.\n"
- " -l|--log-level=LEVEL Set log level (debug, info, warning, error, quiet).\n"
- " -v|--video=STREAM Select video stream (1-n, depending on the input).\n"
- " -a|--audio=STREAM Select audio stream (1-n, depending on the input).\n"
- " -i|--input=TYPE Select input type (default autodetect):\n"
- " mono Single view.\n"
- " separate-left-right Left/right view in separate streams, left first.\n"
- " separate-right-left Left/right view in separate streams, right first.\n"
- " top-bottom Left view top, right view bottom.\n"
- " top-bottom-half Left view top, right view bottom, half height.\n"
- " bottom-top Left view bottom, right view top.\n"
- " bottom-top-half Left view bottom, right view top, half height.\n"
- " left-right Left view left, right view right.\n"
- " left-right-half Left view left, right view right, half width.\n"
- " right-left Left view right, right view left.\n"
- " right-left-half Left view right, right view left, half width.\n"
- " even-odd-rows Left view even rows, right view odd rows.\n"
- " odd-even-rows Left view odd rows, right view even rows.\n"
- " -o|--output=TYPE Select output type (default stereo, anaglyph,\n"
- " or mono-left, depending on input and display):\n"
- " mono-left Only left view.\n"
- " mono-right Only right view.\n"
- " top-bottom Left view top, right view bottom.\n"
- " top-bottom-half Left view top, right view bottom, half height.\n"
- " left-right Left view left, right view right.\n"
- " left-right-half Left view left, right view right, half width.\n"
- " even-odd-rows Left view even rows, right view odd rows.\n"
- " even-odd-columns Left view even columns, right view odd columns.\n"
- " checkerboard Left and right view in checkerboard pattern.\n"
- " anaglyph Red/cyan anaglyph, default method (Dubois).\n"
- " anaglyph-monochrome Red/cyan anaglyph, monochrome method.\n"
- " anaglyph-full-color Red/cyan anaglyph, full color method.\n"
- " anaglyph-half-color Red/cyan anaglyph, half color method.\n"
- " anaglyph-dubois Red/cyan anaglyph, Dubois method.\n"
- " stereo OpenGL quad-buffered stereo.\n"
- " equalizer Multi-display OpenGL via Equalizer (2D setup).\n"
- " equalizer-3d Multi-display OpenGL via Equalizer (3D setup).\n"
- " -s|--swap-eyes Swap left/right view.\n"
- " -f|--fullscreen Fullscreen.\n"
- " -c|--center Center window on screen.\n"
- " -P|--parallax=VAL Parallax adjustment (-1 to +1).\n"
- " -C|--crosstalk=VAL Crosstalk leak level (0 to 1); comma-separated\n"
- " values for the R,G,B channels.\n"
- " -G|--ghostbust=VAL Amount of ghostbusting to apply (0 to 1).\n"
- " -b|--benchmark Benchmark mode (no audio, no timesync, show fps).\n"
+ " --help Print help.\n"
+ " --version Print version.\n"
+ " -n|--no-gui Do not use the GUI, just show a plain window.\n"
+ " -l|--log-level=LEVEL Set log level (debug/info/warning/error/quiet).\n"
+ " -v|--video=STREAM Select video stream (1-n, depending on input).\n"
+ " -a|--audio=STREAM Select audio stream (1-n, depending on input).\n"
+ " -i|--input=TYPE Select input type (default autodetect):\n"
+ " mono Single view.\n"
+ " separate-left-right Left/right separate streams, left first.\n"
+ " separate-right-left Left/right separate streams, right first.\n"
+ " top-bottom Left top, right bottom.\n"
+ " top-bottom-half Left top, right bottom, half height.\n"
+ " bottom-top Left bottom, right top.\n"
+ " bottom-top-half Left bottom, right top, half height.\n"
+ " left-right Left left, right right.\n"
+ " left-right-half Left left, right right, half width.\n"
+ " right-left Left right, right left.\n"
+ " right-left-half Left right, right left, half width.\n"
+ " even-odd-rows Left even rows, right odd rows.\n"
+ " odd-even-rows Left odd rows, right even rows.\n"
+ " -o|--output=TYPE Select output type:\n"
+ " mono-left Only left.\n"
+ " mono-right Only right.\n"
+ " top-bottom Left top, right bottom.\n"
+ " top-bottom-half Left top, right bottom, half height.\n"
+ " left-right Left left, right right.\n"
+ " left-right-half Left left, right right, half width.\n"
+ " even-odd-rows Left even rows, right odd rows.\n"
+ " even-odd-columns Left even columns, right odd columns.\n"
+ " checkerboard Left and right in checkerboard pattern.\n"
+ " red-green-monochrome Red/green anaglyph, monochrome method.\n"
+ " red-blue-monochrome Red/blue anaglyph, monochrome method.\n"
+ " red-cyan-monochrome Red/cyan anaglyph, monochrome method.\n"
+ " red-cyan-half-color Red/cyan anaglyph, half color method.\n"
+ " red-cyan-full-color Red/cyan anaglyph, full color method.\n"
+ " red-cyan-dubois Red/cyan anaglyph, Dubois method (default).\n"
+ " green-magenta-monochrome Green/magenta anaglyph, monochrome method.\n"
+ " green-magenta-half-color Green/magenta anaglyph, half color method.\n"
+ " green-magenta-full-color Green/magenta anaglyph, full color method.\n"
+ " stereo OpenGL quad-buffered stereo.\n"
+ " equalizer Multi-display via Equalizer (2D setup).\n"
+ " equalizer-3d Multi-display via Equalizer (3D setup).\n"
+ " -s|--swap-eyes Swap left/right view.\n"
+ " -f|--fullscreen Fullscreen.\n"
+ " -c|--center Center window on screen.\n"
+ " -P|--parallax=VAL Parallax adjustment (-1 to +1).\n"
+ " -C|--crosstalk=VAL Crosstalk leak level (0 to 1); comma-separated\n"
+ " values for the R,G,B channels.\n"
+ " -G|--ghostbust=VAL Amount of ghostbusting to apply (0 to 1).\n"
+ " -b|--benchmark Benchmark mode (no audio, show fps).\n"
"\n"
"Interactive control:\n"
- " q or ESC Quit.\n"
- " p or SPACE Pause / unpause.\n"
- " f Toggle fullscreen.\n"
- " c Center window.\n"
- " s Swap left/right view.\n"
- " v Cycle through available video streams.\n"
- " a Cycle through available audio streams.\n"
- " 1, 2 Adjust contrast.\n"
- " 3, 4 Adjust brightness.\n"
- " 5, 6 Adjust hue.\n"
- " 7, 8 Adjust saturation.\n"
- " <, > Adjust parallax.\n"
- " (, ) Adjust ghostbusting.\n"
- " left, right Seek 10 seconds backward / forward.\n"
- " up, down Seek 1 minute backward / forward.\n"
- " page up, page down Seek 10 minutes backward / forward.\n"
- " Mouse click Seek according to the horizontal click position.",
+ " q or ESC Quit.\n"
+ " p or SPACE Pause / unpause.\n"
+ " f Toggle fullscreen.\n"
+ " c Center window.\n"
+ " s Swap left/right view.\n"
+ " v Cycle through available video streams.\n"
+ " a Cycle through available audio streams.\n"
+ " 1, 2 Adjust contrast.\n"
+ " 3, 4 Adjust brightness.\n"
+ " 5, 6 Adjust hue.\n"
+ " 7, 8 Adjust saturation.\n"
+ " <, > Adjust parallax.\n"
+ " (, ) Adjust ghostbusting.\n"
+ " left, right Seek 10 seconds backward / forward.\n"
+ " up, down Seek 1 minute backward / forward.\n"
+ " page up, page down Seek 10 minutes backward / forward.\n"
+ " Mouse click Seek according to horizontal click position.",
program_name);
}
if (version.value() || help.value())
diff --git a/src/media_data.cpp b/src/media_data.cpp
index 8211342..2bcae50 100644
--- a/src/media_data.cpp
+++ b/src/media_data.cpp
@@ -507,17 +507,32 @@ std::string parameters::stereo_mode_to_string(stereo_mode_t stereo_mode, bool st
case checkerboard:
s = "checkerboard";
break;
- case anaglyph_red_cyan_monochrome:
- s = "anaglyph-red-cyan-monochrome";
+ case red_green_monochrome:
+ s = "red-green-monochrome";
break;
- case anaglyph_red_cyan_full_color:
- s = "anaglyph-red-cyan-full-color";
+ case red_blue_monochrome:
+ s = "red-blue-monochrome";
break;
- case anaglyph_red_cyan_half_color:
- s = "anaglyph-red-cyan-half-color";
+ case red_cyan_monochrome:
+ s = "red-cyan-monochrome";
break;
- case anaglyph_red_cyan_dubois:
- s = "anaglyph-red-cyan-dubois";
+ case red_cyan_half_color:
+ s = "red-cyan-half-color";
+ break;
+ case red_cyan_full_color:
+ s = "red-cyan-full-color";
+ break;
+ case red_cyan_dubois:
+ s = "red-cyan-dubois";
+ break;
+ case green_magenta_monochrome:
+ s = "green-magenta-monochrome";
+ break;
+ case green_magenta_half_color:
+ s = "green-magenta-half-color";
+ break;
+ case green_magenta_full_color:
+ s = "green-magenta-full-color";
break;
}
if (stereo_mode_swap)
@@ -581,21 +596,41 @@ void parameters::stereo_mode_from_string(const std::string &s, stereo_mode_t &st
{
stereo_mode = checkerboard;
}
- else if (t == "anaglyph-red-cyan-monochrome" || t == "anaglyph-monochrome")
+ else if (t == "red-green-monochrome")
+ {
+ stereo_mode = red_green_monochrome;
+ }
+ else if (t == "red-blue-monochrome")
+ {
+ stereo_mode = red_blue_monochrome;
+ }
+ else if (t == "red-cyan-monochrome")
+ {
+ stereo_mode = red_cyan_monochrome;
+ }
+ else if (t == "red-cyan-half-color")
+ {
+ stereo_mode = red_cyan_half_color;
+ }
+ else if (t == "red-cyan-full-color")
+ {
+ stereo_mode = red_cyan_full_color;
+ }
+ else if (t == "red-cyan-dubois")
{
- stereo_mode = anaglyph_red_cyan_monochrome;
+ stereo_mode = red_cyan_dubois;
}
- else if (t == "anaglyph-red-cyan-full-color" || t == "anaglyph-full-color")
+ else if (t == "green-magenta-monochrome")
{
- stereo_mode = anaglyph_red_cyan_full_color;
+ stereo_mode = green_magenta_monochrome;
}
- else if (t == "anaglyph-red-cyan-half-color" || t == "anaglyph-half-color")
+ else if (t == "green-magenta-half-color")
{
- stereo_mode = anaglyph_red_cyan_half_color;
+ stereo_mode = green_magenta_half_color;
}
- else if (t == "anaglyph-red-cyan-dubois" || t == "anaglyph-dubois" || t == "anaglyph")
+ else if (t == "green-magenta-full-color")
{
- stereo_mode = anaglyph_red_cyan_dubois;
+ stereo_mode = green_magenta_full_color;
}
else
{
diff --git a/src/media_data.h b/src/media_data.h
index 555d5ef..2e216b3 100644
--- a/src/media_data.h
+++ b/src/media_data.h
@@ -173,10 +173,15 @@ public:
even_odd_rows, // Left view even rows, right view odd rows
even_odd_columns, // Left view even columns, right view odd columns
checkerboard, // Checkerboard pattern
- anaglyph_red_cyan_monochrome, // Red/cyan anaglyph, monochrome method
- anaglyph_red_cyan_full_color, // Red/cyan anaglyph, full color method
- anaglyph_red_cyan_half_color, // Red/cyan anaglyph, half color method
- anaglyph_red_cyan_dubois // Red/cyan anaglyph, high quality Dubois method
+ red_green_monochrome, // Red/green anaglyph, monochrome method
+ red_blue_monochrome, // Red/blue anaglyph, monochrome method
+ red_cyan_monochrome, // Red/cyan anaglyph, monochrome method
+ red_cyan_half_color, // Red/cyan anaglyph, half color method
+ red_cyan_full_color, // Red/cyan anaglyph, full color method
+ red_cyan_dubois, // Red/cyan anaglyph, high quality Dubois method
+ green_magenta_monochrome, // Green/magenta anaglyph, monochrome method
+ green_magenta_half_color, // Green/magenta anaglyph, half color method
+ green_magenta_full_color, // Green/magenta anaglyph, full color method
} stereo_mode_t;
stereo_mode_t stereo_mode; // Stereo mode
diff --git a/src/player.cpp b/src/player.cpp
index 3d74743..68a8a02 100644
--- a/src/player.cpp
+++ b/src/player.cpp
@@ -240,7 +240,7 @@ void player::open(const player_init_data &init_data)
}
else
{
- _params.stereo_mode = parameters::anaglyph_red_cyan_dubois;
+ _params.stereo_mode = parameters::red_cyan_dubois;
}
_params.stereo_mode_swap = false;
}
diff --git a/src/player_qt.cpp b/src/player_qt.cpp
index f52dfd4..884d4ee 100644
--- a/src/player_qt.cpp
+++ b/src/player_qt.cpp
@@ -170,6 +170,7 @@ in_out_widget::in_out_widget(QSettings *settings, const player_qt_internal *play
_output_combobox->setToolTip(output_label->toolTip());
_output_combobox->addItem("Left view");
_output_combobox->addItem("Right view");
+ _output_combobox->addItem("OpenGL stereo");
_output_combobox->addItem("Top/bottom");
_output_combobox->addItem("Top/bottom, half height");
_output_combobox->addItem("Left/right");
@@ -177,11 +178,15 @@ in_out_widget::in_out_widget(QSettings *settings, const player_qt_internal *play
_output_combobox->addItem("Even/odd rows");
_output_combobox->addItem("Even/odd columns");
_output_combobox->addItem("Checkerboard pattern");
- _output_combobox->addItem("Red/cyan glasses, Dubois method");
+ _output_combobox->addItem("Red/green glasses, monochrome method");
+ _output_combobox->addItem("Red/blue glasses, monochrome method");
_output_combobox->addItem("Red/cyan glasses, monochrome method");
- _output_combobox->addItem("Red/cyan glasses, full-color method");
_output_combobox->addItem("Red/cyan glasses, half-color method");
- _output_combobox->addItem("OpenGL stereo");
+ _output_combobox->addItem("Red/cyan glasses, full-color method");
+ _output_combobox->addItem("Red/cyan glasses, Dubois method (recommended)");
+ _output_combobox->addItem("Green/magenta glasses, monochrome method");
+ _output_combobox->addItem("Green/magenta glasses, half-color method");
+ _output_combobox->addItem("Green/magenta glasses, full-color method");
connect(_output_combobox, SIGNAL(currentIndexChanged(int)), this, SLOT(output_changed()));
layout2->addWidget(_output_combobox, 0, 1);
layout2->setColumnStretch(1, 1);
@@ -254,42 +259,57 @@ void in_out_widget::set_stereo_mode(parameters::stereo_mode_t stereo_mode, bool
case parameters::mono_right:
_output_combobox->setCurrentIndex(1);
break;
- case parameters::top_bottom:
+ case parameters::stereo:
_output_combobox->setCurrentIndex(2);
break;
- case parameters::top_bottom_half:
+ case parameters::top_bottom:
_output_combobox->setCurrentIndex(3);
break;
- case parameters::left_right:
+ case parameters::top_bottom_half:
_output_combobox->setCurrentIndex(4);
break;
- case parameters::left_right_half:
+ case parameters::left_right:
_output_combobox->setCurrentIndex(5);
break;
- case parameters::even_odd_rows:
+ case parameters::left_right_half:
_output_combobox->setCurrentIndex(6);
break;
- case parameters::even_odd_columns:
+ case parameters::even_odd_rows:
_output_combobox->setCurrentIndex(7);
break;
- case parameters::checkerboard:
+ case parameters::even_odd_columns:
_output_combobox->setCurrentIndex(8);
break;
- case parameters::anaglyph_red_cyan_dubois:
+ case parameters::checkerboard:
_output_combobox->setCurrentIndex(9);
break;
- case parameters::anaglyph_red_cyan_monochrome:
+ case parameters::red_green_monochrome:
_output_combobox->setCurrentIndex(10);
break;
- case parameters::anaglyph_red_cyan_full_color:
+ case parameters::red_blue_monochrome:
_output_combobox->setCurrentIndex(11);
break;
- case parameters::anaglyph_red_cyan_half_color:
+ case parameters::red_cyan_monochrome:
_output_combobox->setCurrentIndex(12);
break;
- case parameters::stereo:
+ case parameters::red_cyan_half_color:
_output_combobox->setCurrentIndex(13);
break;
+ case parameters::red_cyan_full_color:
+ _output_combobox->setCurrentIndex(14);
+ break;
+ case parameters::red_cyan_dubois:
+ _output_combobox->setCurrentIndex(15);
+ break;
+ case parameters::green_magenta_monochrome:
+ _output_combobox->setCurrentIndex(16);
+ break;
+ case parameters::green_magenta_half_color:
+ _output_combobox->setCurrentIndex(17);
+ break;
+ case parameters::green_magenta_full_color:
+ _output_combobox->setCurrentIndex(18);
+ break;
}
_swap_checkbox->setChecked(stereo_mode_swap);
}
@@ -372,7 +392,7 @@ void in_out_widget::output_changed()
{
QMessageBox::critical(this, "Error",
"The display does not support OpenGL stereo mode.");
- _output_combobox->setCurrentIndex(9);
+ _output_combobox->setCurrentIndex(15);
return;
}
std::ostringstream oss;
@@ -501,40 +521,55 @@ void in_out_widget::get_stereo_mode(parameters::stereo_mode_t &stereo_mode, bool
stereo_mode = parameters::mono_right;
break;
case 2:
- stereo_mode = parameters::top_bottom;
+ stereo_mode = parameters::stereo;
break;
case 3:
- stereo_mode = parameters::top_bottom_half;
+ stereo_mode = parameters::top_bottom;
break;
case 4:
- stereo_mode = parameters::left_right;
+ stereo_mode = parameters::top_bottom_half;
break;
case 5:
- stereo_mode = parameters::left_right_half;
+ stereo_mode = parameters::left_right;
break;
case 6:
- stereo_mode = parameters::even_odd_rows;
+ stereo_mode = parameters::left_right_half;
break;
case 7:
- stereo_mode = parameters::even_odd_columns;
+ stereo_mode = parameters::even_odd_rows;
break;
case 8:
- stereo_mode = parameters::checkerboard;
+ stereo_mode = parameters::even_odd_columns;
break;
case 9:
- stereo_mode = parameters::anaglyph_red_cyan_dubois;
+ stereo_mode = parameters::checkerboard;
break;
case 10:
- stereo_mode = parameters::anaglyph_red_cyan_monochrome;
+ stereo_mode = parameters::red_green_monochrome;
break;
case 11:
- stereo_mode = parameters::anaglyph_red_cyan_full_color;
+ stereo_mode = parameters::red_blue_monochrome;
break;
case 12:
- stereo_mode = parameters::anaglyph_red_cyan_half_color;
+ stereo_mode = parameters::red_cyan_monochrome;
break;
case 13:
- stereo_mode = parameters::stereo;
+ stereo_mode = parameters::red_cyan_half_color;
+ break;
+ case 14:
+ stereo_mode = parameters::red_cyan_full_color;
+ break;
+ case 15:
+ stereo_mode = parameters::red_cyan_dubois;
+ break;
+ case 16:
+ stereo_mode = parameters::green_magenta_monochrome;
+ break;
+ case 17:
+ stereo_mode = parameters::green_magenta_half_color;
+ break;
+ case 18:
+ stereo_mode = parameters::green_magenta_full_color;
break;
}
stereo_mode_swap = _swap_checkbox->isChecked();
diff --git a/src/video_output.cpp b/src/video_output.cpp
index 3974d72..c16cff8 100644
--- a/src/video_output.cpp
+++ b/src/video_output.cpp
@@ -512,10 +512,15 @@ void video_output::render_init()
_params.stereo_mode == parameters::even_odd_rows ? "mode_even_odd_rows"
: _params.stereo_mode == parameters::even_odd_columns ? "mode_even_odd_columns"
: _params.stereo_mode == parameters::checkerboard ? "mode_checkerboard"
- : _params.stereo_mode == parameters::anaglyph_red_cyan_monochrome ? "mode_anaglyph_monochrome"
- : _params.stereo_mode == parameters::anaglyph_red_cyan_full_color ? "mode_anaglyph_full_color"
- : _params.stereo_mode == parameters::anaglyph_red_cyan_half_color ? "mode_anaglyph_half_color"
- : _params.stereo_mode == parameters::anaglyph_red_cyan_dubois ? "mode_anaglyph_dubois"
+ : _params.stereo_mode == parameters::red_green_monochrome ? "mode_red_green_monochrome"
+ : _params.stereo_mode == parameters::red_blue_monochrome ? "mode_red_blue_monochrome"
+ : _params.stereo_mode == parameters::red_cyan_monochrome ? "mode_red_cyan_monochrome"
+ : _params.stereo_mode == parameters::red_cyan_half_color ? "mode_red_cyan_half_color"
+ : _params.stereo_mode == parameters::red_cyan_full_color ? "mode_red_cyan_full_color"
+ : _params.stereo_mode == parameters::red_cyan_dubois ? "mode_red_cyan_dubois"
+ : _params.stereo_mode == parameters::green_magenta_monochrome ? "mode_green_magenta_monochrome"
+ : _params.stereo_mode == parameters::green_magenta_half_color ? "mode_green_magenta_half_color"
+ : _params.stereo_mode == parameters::green_magenta_full_color ? "mode_green_magenta_full_color"
: "mode_onechannel");
std::string srgb_broken_str = (_srgb_textures_are_broken ? "1" : "0");
std::string render_fs_src(VIDEO_OUTPUT_RENDER_FS_GLSL_STR);
@@ -755,10 +760,15 @@ void video_output::display_current_frame(bool mono_right_instead_of_left,
glUniform1i(glGetUniformLocation(_render_prg, "rgb_l"), left);
glUniform1i(glGetUniformLocation(_render_prg, "rgb_r"), right);
glUniform1f(glGetUniformLocation(_render_prg, "parallax"), _params.parallax * 0.05f);
- if (_params.stereo_mode != parameters::anaglyph_red_cyan_monochrome
- && _params.stereo_mode != parameters::anaglyph_red_cyan_full_color
- && _params.stereo_mode != parameters::anaglyph_red_cyan_half_color
- && _params.stereo_mode != parameters::anaglyph_red_cyan_dubois)
+ if (_params.stereo_mode != parameters::red_green_monochrome
+ && _params.stereo_mode != parameters::red_blue_monochrome
+ && _params.stereo_mode != parameters::red_cyan_monochrome
+ && _params.stereo_mode != parameters::red_cyan_half_color
+ && _params.stereo_mode != parameters::red_cyan_full_color
+ && _params.stereo_mode != parameters::red_cyan_dubois
+ && _params.stereo_mode != parameters::green_magenta_monochrome
+ && _params.stereo_mode != parameters::green_magenta_half_color
+ && _params.stereo_mode != parameters::green_magenta_full_color)
{
glUniform3f(glGetUniformLocation(_render_prg, "crosstalk"),
_params.crosstalk_r * _params.ghostbust,
@@ -806,10 +816,15 @@ void video_output::display_current_frame(bool mono_right_instead_of_left,
glVertex2f(x, y + h);
glEnd();
}
- else if (_params.stereo_mode == parameters::anaglyph_red_cyan_monochrome
- || _params.stereo_mode == parameters::anaglyph_red_cyan_full_color
- || _params.stereo_mode == parameters::anaglyph_red_cyan_half_color
- || _params.stereo_mode == parameters::anaglyph_red_cyan_dubois)
+ else if (_params.stereo_mode == parameters::red_green_monochrome
+ || _params.stereo_mode == parameters::red_blue_monochrome
+ || _params.stereo_mode == parameters::red_cyan_monochrome
+ || _params.stereo_mode == parameters::red_cyan_half_color
+ || _params.stereo_mode == parameters::red_cyan_full_color
+ || _params.stereo_mode == parameters::red_cyan_dubois
+ || _params.stereo_mode == parameters::green_magenta_monochrome
+ || _params.stereo_mode == parameters::green_magenta_half_color
+ || _params.stereo_mode == parameters::green_magenta_full_color)
{
draw_quad(x, y, w, h);
}
diff --git a/src/video_output_render.fs.glsl b/src/video_output_render.fs.glsl
index 6222dbc..87e73d2 100644
--- a/src/video_output_render.fs.glsl
+++ b/src/video_output_render.fs.glsl
@@ -22,10 +22,15 @@
#version 120
// mode_onechannel
-// mode_anaglyph_monochrome
-// mode_anaglyph_full_color
-// mode_anaglyph_half_color
-// mode_anaglyph_dubois
+// mode_red_green_monochrome
+// mode_red_blue_monochrome
+// mode_red_cyan_monochrome
+// mode_red_cyan_half_color
+// mode_red_cyan_full_color
+// mode_red_cyan_dubois
+// mode_green_magenta_monochrome
+// mode_green_magenta_half_color
+// mode_green_magenta_full_color
// mode_even_odd_rows
// mode_even_odd_columns
// mode_checkerboard
@@ -49,7 +54,7 @@ uniform float step_y;
uniform vec3 crosstalk;
#endif
-#if defined(mode_anaglyph_monochrome) || defined(mode_anaglyph_half_color)
+#if defined(mode_red_green_monochrome) || defined(mode_red_blue_monochrome) || defined(mode_red_cyan_monochrome) || defined(mode_red_cyan_half_color) || defined(mode_green_magenta_monochrome) || defined(mode_green_magenta_half_color)
float srgb_to_lum(vec3 srgb)
{
// Values taken from http://www.fourcc.org/fccyvrgb.php
@@ -161,17 +166,21 @@ void main()
# endif
srgb = rgb_to_srgb(ghostbust(mix(rgbc_r, rgbc_l, m), mix(rgbc_l, rgbc_r, m)));
-#else // mode_anaglyph_*
+#else // anaglyph modes
vec3 l = rgb_to_srgb(tex_l(gl_TexCoord[0].xy));
vec3 r = rgb_to_srgb(tex_r(gl_TexCoord[0].xy));
-# if defined(mode_anaglyph_monochrome)
+# if defined(mode_red_green_monochrome)
+ srgb = vec3(srgb_to_lum(l), srgb_to_lum(r), 0.0);
+# elif defined(mode_red_blue_monochrome)
+ srgb = vec3(srgb_to_lum(l), 0.0, srgb_to_lum(r));
+# elif defined(mode_red_cyan_monochrome)
srgb = vec3(srgb_to_lum(l), srgb_to_lum(r), srgb_to_lum(r));
-# elif defined(mode_anaglyph_full_color)
- srgb = vec3(l.r, r.gb);
-# elif defined(mode_anaglyph_half_color)
- srgb = vec3(srgb_to_lum(l), r.gb);
-# elif defined(mode_anaglyph_dubois)
+# elif defined(mode_red_cyan_half_color)
+ srgb = vec3(srgb_to_lum(l), r.g, r.b);
+# elif defined(mode_red_cyan_full_color)
+ srgb = vec3(l.r, r.g, r.b);
+# elif defined(mode_red_cyan_dubois)
// Dubois anaglyph method.
// Authors page: http://www.site.uottawa.ca/~edubois/anaglyph/
// This method depends on the characteristics of the display device
@@ -191,6 +200,12 @@ void main()
-0.0365, 0.7333, -0.1286,
-0.0060, 0.0111, 1.2968);
srgb = m0 * l + m1 * r;
+# elif defined(mode_green_magenta_monochrome)
+ srgb = vec3(srgb_to_lum(r), srgb_to_lum(l), srgb_to_lum(r));
+# elif defined(mode_green_magenta_half_color)
+ srgb = vec3(r.r, srgb_to_lum(l), r.b);
+# elif defined(mode_green_magenta_full_color)
+ srgb = vec3(r.r, l.g, r.b);
# endif
#endif