mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-03-12 22:14:58 +00:00
vk/gl: add interlaced 3D mode
This commit is contained in:
parent
651f8512eb
commit
32f2b14429
@ -479,6 +479,7 @@ namespace gl
|
||||
program_handle.uniforms["limit_range"] = limited_rgb + 0;
|
||||
program_handle.uniforms["stereo_display_mode"] = static_cast<u8>(stereo_mode);
|
||||
program_handle.uniforms["stereo_image_count"] = (source[1] == GL_NONE? 1 : 2);
|
||||
program_handle.uniforms["height"] = viewport.height();
|
||||
|
||||
saved_sampler_state saved(31, m_sampler);
|
||||
cmd->bind_texture(31, GL_TEXTURE_2D, source[0]);
|
||||
|
@ -15,16 +15,17 @@ layout(location=0) out vec4 ocol;
|
||||
#define STEREO_MODE_DISABLED 0
|
||||
#define STEREO_MODE_SIDE_BY_SIDE 1
|
||||
#define STEREO_MODE_OVER_UNDER 2
|
||||
#define STEREO_MODE_ANAGLYPH_RED_GREEN 3
|
||||
#define STEREO_MODE_ANAGLYPH_RED_BLUE 4
|
||||
#define STEREO_MODE_ANAGLYPH_RED_CYAN 5
|
||||
#define STEREO_MODE_ANAGLYPH_MAGENTA_CYAN 6
|
||||
#define STEREO_MODE_ANAGLYPH_TRIOSCOPIC 7
|
||||
#define STEREO_MODE_INTERLACED 3
|
||||
#define STEREO_MODE_ANAGLYPH_RED_GREEN 4
|
||||
#define STEREO_MODE_ANAGLYPH_RED_BLUE 5
|
||||
#define STEREO_MODE_ANAGLYPH_RED_CYAN 6
|
||||
#define STEREO_MODE_ANAGLYPH_MAGENTA_CYAN 7
|
||||
#define STEREO_MODE_ANAGLYPH_TRIOSCOPIC 8
|
||||
|
||||
vec2 sbs_single_matrix = vec2(2.0,0.4898f);
|
||||
vec2 sbs_multi_matrix = vec2(2.0,1.0);
|
||||
vec2 ou_single_matrix = vec2(1.0,0.9796f);
|
||||
vec2 ou_multi_matrix = vec2(1.0,2.0);
|
||||
vec2 sbs_single_matrix = vec2(2.0, 0.4898f);
|
||||
vec2 sbs_multi_matrix = vec2(2.0, 1.0);
|
||||
vec2 ou_single_matrix = vec2(1.0, 0.9796f);
|
||||
vec2 ou_multi_matrix = vec2(1.0, 2.0);
|
||||
|
||||
#ifdef VULKAN
|
||||
layout(push_constant) uniform static_data
|
||||
@ -33,12 +34,14 @@ layout(push_constant) uniform static_data
|
||||
int limit_range;
|
||||
int stereo_display_mode;
|
||||
int stereo_image_count;
|
||||
int height;
|
||||
};
|
||||
#else
|
||||
uniform float gamma;
|
||||
uniform int limit_range;
|
||||
uniform int stereo_display_mode;
|
||||
uniform int stereo_image_count;
|
||||
uniform int height;
|
||||
#endif
|
||||
|
||||
vec4 read_source()
|
||||
@ -76,6 +79,9 @@ vec4 read_source()
|
||||
case STEREO_MODE_OVER_UNDER:
|
||||
if (tc0.y < 0.5) return texture(fs0, tc0* ou_single_matrix);
|
||||
else return texture(fs0, (tc0* ou_single_matrix) + vec2(0.f, 0.020408f) );
|
||||
case STEREO_MODE_INTERLACED:
|
||||
if (mod(height * tc0.y, 2.f) < 1.f) return texture(fs0, tc0 * vec2(1.f, 0.4898f));
|
||||
else return texture(fs0, (tc0 * vec2(1.f, 0.4898f)) + vec2(0.f, 0.510204f));
|
||||
default: // undefined behavior
|
||||
return texture(fs0,tc0);
|
||||
}
|
||||
@ -110,6 +116,9 @@ vec4 read_source()
|
||||
case STEREO_MODE_OVER_UNDER:
|
||||
if (tc0.y < 0.5) return texture(fs0,(tc0 * ou_multi_matrix));
|
||||
else return texture(fs1,(tc0 * ou_multi_matrix) + vec2(0.f,-1.f));
|
||||
case STEREO_MODE_INTERLACED:
|
||||
if (mod(height * tc0.y, 2.f) < 1.f) return texture(fs0, tc0);
|
||||
else return texture(fs1, tc0);
|
||||
default: // undefined behavior
|
||||
return texture(fs0,tc0);
|
||||
}
|
||||
|
@ -902,6 +902,7 @@ namespace vk
|
||||
config.limit_range = limited_rgb? 1 : 0;
|
||||
config.stereo_display_mode = static_cast<u8>(stereo_mode);
|
||||
config.stereo_image_count = std::min(::size32(src), 2u);
|
||||
config.height = src.empty() ? 720 : src.front()->height();
|
||||
|
||||
std::vector<vk::image_view*> views;
|
||||
views.reserve(2);
|
||||
|
@ -212,6 +212,7 @@ namespace vk
|
||||
int limit_range;
|
||||
int stereo_display_mode;
|
||||
int stereo_image_count;
|
||||
int height;
|
||||
};
|
||||
|
||||
float data[4];
|
||||
|
@ -642,6 +642,7 @@ void fmt_class_string<stereo_render_mode_options>::format(std::string& out, u64
|
||||
case stereo_render_mode_options::disabled: return "Disabled";
|
||||
case stereo_render_mode_options::side_by_side: return "Side-by-Side";
|
||||
case stereo_render_mode_options::over_under: return "Over-Under";
|
||||
case stereo_render_mode_options::interlaced: return "Interlaced";
|
||||
case stereo_render_mode_options::anaglyph_red_green: return "Anaglyph Red-Green";
|
||||
case stereo_render_mode_options::anaglyph_red_blue: return "Anaglyph Red-Blue";
|
||||
case stereo_render_mode_options::anaglyph_red_cyan: return "Anaglyph Red-Cyan";
|
||||
|
@ -318,6 +318,7 @@ enum class stereo_render_mode_options
|
||||
disabled,
|
||||
side_by_side,
|
||||
over_under,
|
||||
interlaced,
|
||||
anaglyph_red_green,
|
||||
anaglyph_red_blue,
|
||||
anaglyph_red_cyan,
|
||||
|
@ -1288,6 +1288,7 @@ QString emu_settings::GetLocalizedSetting(const QString& original, emu_settings_
|
||||
case stereo_render_mode_options::disabled: return tr("Disabled", "3D Display Mode");
|
||||
case stereo_render_mode_options::side_by_side: return tr("Side-by-side", "3D Display Mode");
|
||||
case stereo_render_mode_options::over_under: return tr("Over-under", "3D Display Mode");
|
||||
case stereo_render_mode_options::interlaced: return tr("Interlaced", "3D Display Mode");
|
||||
case stereo_render_mode_options::anaglyph_red_green: return tr("Anaglyph Red-Green", "3D Display Mode");
|
||||
case stereo_render_mode_options::anaglyph_red_blue: return tr("Anaglyph Red-Blue", "3D Display Mode");
|
||||
case stereo_render_mode_options::anaglyph_red_cyan: return tr("Anaglyph Red-Cyan", "3D Display Mode");
|
||||
|
Loading…
x
Reference in New Issue
Block a user