diff options
| author | Martin Lambers <marlam@marlam.de> | 2011-02-13 21:57:30 +0100 |
|---|---|---|
| committer | Martin Lambers <marlam@marlam.de> | 2011-02-13 21:57:30 +0100 |
| commit | 6f09ac72483d1ea3103506066012844147c4d4bb (patch) | |
| tree | 8f62b197c230d8ed75ca9f8d09172cc524b64d99 | |
| parent | 90e4ba79a239073a4b04cc68c55e7c64a0035267 (diff) | |
| download | bino-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.1 | 25 | ||||
| -rw-r--r-- | doc/bino.texi | 24 | ||||
| -rw-r--r-- | src/main.cpp | 145 | ||||
| -rw-r--r-- | src/media_data.cpp | 67 | ||||
| -rw-r--r-- | src/media_data.h | 13 | ||||
| -rw-r--r-- | src/player.cpp | 2 | ||||
| -rw-r--r-- | src/player_qt.cpp | 91 | ||||
| -rw-r--r-- | src/video_output.cpp | 39 | ||||
| -rw-r--r-- | src/video_output_render.fs.glsl | 39 |
9 files changed, 287 insertions, 158 deletions
@@ -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 |
