Apply fixed size properly for mono/stereo rendering.
(cherry picked from commit aac883849e835eb8ff4e3bf2a0737355b55784e5)
This commit is contained in:
committed by
Thaddeus Crews
parent
ede2931d88
commit
f721d684fb
@@ -48,6 +48,12 @@ RENDER_MOTION_VECTORS = false
|
||||
#define SHADER_IS_SRGB true
|
||||
#define SHADER_SPACE_FAR -1.0
|
||||
|
||||
#ifdef USE_MULTIVIEW
|
||||
#define OUTPUT_IS_MULTIVIEW true
|
||||
#else
|
||||
#define OUTPUT_IS_MULTIVIEW false
|
||||
#endif
|
||||
|
||||
#if defined(RENDER_SHADOWS) || defined(RENDER_SHADOWS_LINEAR)
|
||||
#define IN_SHADOW_PASS true
|
||||
#else
|
||||
@@ -1021,6 +1027,12 @@ void main() {
|
||||
#define SHADER_IS_SRGB true
|
||||
#define SHADER_SPACE_FAR -1.0
|
||||
|
||||
#ifdef USE_MULTIVIEW
|
||||
#define OUTPUT_IS_MULTIVIEW true
|
||||
#else
|
||||
#define OUTPUT_IS_MULTIVIEW false
|
||||
#endif
|
||||
|
||||
#if defined(RENDER_SHADOWS) || defined(RENDER_SHADOWS_LINEAR)
|
||||
#define IN_SHADOW_PASS true
|
||||
#else
|
||||
|
||||
@@ -1328,6 +1328,7 @@ MaterialStorage::MaterialStorage() {
|
||||
actions.renames["CAMERA_VISIBLE_LAYERS"] = "scene_data_block.data.camera_visible_layers";
|
||||
actions.renames["NODE_POSITION_VIEW"] = "(scene_data_block.data.view_matrix * model_matrix)[3].xyz";
|
||||
|
||||
actions.renames["IS_MULTIVIEW"] = "OUTPUT_IS_MULTIVIEW";
|
||||
actions.renames["VIEW_INDEX"] = "ViewIndex";
|
||||
actions.renames["VIEW_MONO_LEFT"] = "uint(0)";
|
||||
actions.renames["VIEW_RIGHT"] = "uint(1)";
|
||||
|
||||
@@ -1367,7 +1367,15 @@ void vertex() {)";
|
||||
MODELVIEW_MATRIX[2] *= sc;
|
||||
} else {
|
||||
// Scale by depth.
|
||||
float sc = -(MODELVIEW_MATRIX)[3].z;
|
||||
float sc;
|
||||
if (IS_MULTIVIEW) {
|
||||
// Assuming stereo rendering.
|
||||
// Moving in the z-plane gives the illusion of the object growing/shrinking in size.
|
||||
// We need to take the full distance to camera to compensate.
|
||||
sc = length((MODELVIEW_MATRIX)[3].xyz);
|
||||
} else {
|
||||
sc = -(MODELVIEW_MATRIX)[3].z;
|
||||
}
|
||||
MODELVIEW_MATRIX[0] *= sc;
|
||||
MODELVIEW_MATRIX[1] *= sc;
|
||||
MODELVIEW_MATRIX[2] *= sc;
|
||||
|
||||
@@ -3299,6 +3299,7 @@ const VisualShaderNodeInput::Port VisualShaderNodeInput::ports[] = {
|
||||
{ Shader::MODE_SPATIAL, VisualShader::TYPE_VERTEX, VisualShaderNode::PORT_TYPE_VECTOR_2D, "uv2", "UV2" },
|
||||
{ Shader::MODE_SPATIAL, VisualShader::TYPE_VERTEX, VisualShaderNode::PORT_TYPE_VECTOR_3D, "vertex", "VERTEX" },
|
||||
{ Shader::MODE_SPATIAL, VisualShader::TYPE_VERTEX, VisualShaderNode::PORT_TYPE_SCALAR_INT, "vertex_id", "VERTEX_ID" },
|
||||
{ Shader::MODE_SPATIAL, VisualShader::TYPE_VERTEX, VisualShaderNode::PORT_TYPE_BOOLEAN, "is_multiview", "IS_MULTIVIEW" },
|
||||
{ Shader::MODE_SPATIAL, VisualShader::TYPE_VERTEX, VisualShaderNode::PORT_TYPE_SCALAR_INT, "view_index", "VIEW_INDEX" },
|
||||
{ Shader::MODE_SPATIAL, VisualShader::TYPE_VERTEX, VisualShaderNode::PORT_TYPE_TRANSFORM, "view_matrix", "VIEW_MATRIX" },
|
||||
{ Shader::MODE_SPATIAL, VisualShader::TYPE_VERTEX, VisualShaderNode::PORT_TYPE_SCALAR_INT, "view_mono_left", "VIEW_MONO_LEFT" },
|
||||
@@ -3332,6 +3333,7 @@ const VisualShaderNodeInput::Port VisualShaderNodeInput::ports[] = {
|
||||
{ Shader::MODE_SPATIAL, VisualShader::TYPE_FRAGMENT, VisualShaderNode::PORT_TYPE_VECTOR_2D, "uv2", "UV2" },
|
||||
{ Shader::MODE_SPATIAL, VisualShader::TYPE_FRAGMENT, VisualShaderNode::PORT_TYPE_VECTOR_3D, "vertex", "VERTEX" },
|
||||
{ Shader::MODE_SPATIAL, VisualShader::TYPE_FRAGMENT, VisualShaderNode::PORT_TYPE_VECTOR_3D, "view", "VIEW" },
|
||||
{ Shader::MODE_SPATIAL, VisualShader::TYPE_FRAGMENT, VisualShaderNode::PORT_TYPE_BOOLEAN, "is_multiview", "IS_MULTIVIEW" },
|
||||
{ Shader::MODE_SPATIAL, VisualShader::TYPE_FRAGMENT, VisualShaderNode::PORT_TYPE_SCALAR_INT, "view_index", "VIEW_INDEX" },
|
||||
{ Shader::MODE_SPATIAL, VisualShader::TYPE_FRAGMENT, VisualShaderNode::PORT_TYPE_TRANSFORM, "view_matrix", "VIEW_MATRIX" },
|
||||
{ Shader::MODE_SPATIAL, VisualShader::TYPE_FRAGMENT, VisualShaderNode::PORT_TYPE_SCALAR_INT, "view_mono_left", "VIEW_MONO_LEFT" },
|
||||
@@ -3366,6 +3368,7 @@ const VisualShaderNodeInput::Port VisualShaderNodeInput::ports[] = {
|
||||
{ Shader::MODE_SPATIAL, VisualShader::TYPE_LIGHT, VisualShaderNode::PORT_TYPE_VECTOR_3D, "view", "VIEW" },
|
||||
{ Shader::MODE_SPATIAL, VisualShader::TYPE_LIGHT, VisualShaderNode::PORT_TYPE_TRANSFORM, "view_matrix", "VIEW_MATRIX" },
|
||||
{ Shader::MODE_SPATIAL, VisualShader::TYPE_LIGHT, VisualShaderNode::PORT_TYPE_VECTOR_2D, "viewport_size", "VIEWPORT_SIZE" },
|
||||
{ Shader::MODE_SPATIAL, VisualShader::TYPE_LIGHT, VisualShaderNode::PORT_TYPE_BOOLEAN, "is_multiview", "IS_MULTIVIEW" },
|
||||
|
||||
// Canvas Item
|
||||
|
||||
|
||||
@@ -785,6 +785,7 @@ void SceneShaderForwardClustered::init(const String p_defines) {
|
||||
actions.renames["CAMERA_VISIBLE_LAYERS"] = "scene_data.camera_visible_layers";
|
||||
actions.renames["NODE_POSITION_VIEW"] = "(read_view_matrix * read_model_matrix)[3].xyz";
|
||||
|
||||
actions.renames["IS_MULTIVIEW"] = "OUTPUT_IS_MULTIVIEW";
|
||||
actions.renames["VIEW_INDEX"] = "ViewIndex";
|
||||
actions.renames["VIEW_MONO_LEFT"] = "0";
|
||||
actions.renames["VIEW_RIGHT"] = "1";
|
||||
|
||||
@@ -719,6 +719,7 @@ void SceneShaderForwardMobile::init(const String p_defines) {
|
||||
actions.renames["CAMERA_VISIBLE_LAYERS"] = "scene_data.camera_visible_layers";
|
||||
actions.renames["NODE_POSITION_VIEW"] = "(read_view_matrix * read_model_matrix)[3].xyz";
|
||||
|
||||
actions.renames["IS_MULTIVIEW"] = "OUTPUT_IS_MULTIVIEW";
|
||||
actions.renames["VIEW_INDEX"] = "ViewIndex";
|
||||
actions.renames["VIEW_MONO_LEFT"] = "0";
|
||||
actions.renames["VIEW_RIGHT"] = "1";
|
||||
|
||||
@@ -12,6 +12,12 @@
|
||||
#define SHADER_IS_SRGB false
|
||||
#define SHADER_SPACE_FAR 0.0
|
||||
|
||||
#ifdef USE_MULTIVIEW
|
||||
#define OUTPUT_IS_MULTIVIEW true
|
||||
#else
|
||||
#define OUTPUT_IS_MULTIVIEW false
|
||||
#endif
|
||||
|
||||
/* INPUT ATTRIBS */
|
||||
|
||||
// Always contains vertex position in XYZ, can contain tangent angle in W.
|
||||
@@ -863,6 +869,12 @@ void main() {
|
||||
#define SHADER_IS_SRGB false
|
||||
#define SHADER_SPACE_FAR 0.0
|
||||
|
||||
#ifdef USE_MULTIVIEW
|
||||
#define OUTPUT_IS_MULTIVIEW true
|
||||
#else
|
||||
#define OUTPUT_IS_MULTIVIEW false
|
||||
#endif
|
||||
|
||||
/* Include half precision types. */
|
||||
#include "../half_inc.glsl"
|
||||
|
||||
|
||||
@@ -19,6 +19,12 @@
|
||||
#define IN_SHADOW_PASS false
|
||||
#endif
|
||||
|
||||
#ifdef USE_MULTIVIEW
|
||||
#define OUTPUT_IS_MULTIVIEW true
|
||||
#else
|
||||
#define OUTPUT_IS_MULTIVIEW false
|
||||
#endif
|
||||
|
||||
/* INPUT ATTRIBS */
|
||||
|
||||
// Always contains vertex position in XYZ, can contain tangent angle in W.
|
||||
@@ -826,6 +832,12 @@ void main() {
|
||||
#define IN_SHADOW_PASS false
|
||||
#endif
|
||||
|
||||
#ifdef USE_MULTIVIEW
|
||||
#define OUTPUT_IS_MULTIVIEW true
|
||||
#else
|
||||
#define OUTPUT_IS_MULTIVIEW false
|
||||
#endif
|
||||
|
||||
/* Include half precision types. */
|
||||
#include "../half_inc.glsl"
|
||||
|
||||
|
||||
@@ -84,6 +84,7 @@ ShaderTypes::ShaderTypes() {
|
||||
shader_modes[RS::SHADER_SPATIAL].functions["constants"].built_ins["E"] = constvt(ShaderLanguage::TYPE_FLOAT, { e_scalar });
|
||||
shader_modes[RS::SHADER_SPATIAL].functions["constants"].built_ins["OUTPUT_IS_SRGB"] = constt(ShaderLanguage::TYPE_BOOL);
|
||||
shader_modes[RS::SHADER_SPATIAL].functions["constants"].built_ins["CLIP_SPACE_FAR"] = constt(ShaderLanguage::TYPE_FLOAT);
|
||||
shader_modes[RS::SHADER_SPATIAL].functions["constants"].built_ins["IS_MULTIVIEW"] = constt(ShaderLanguage::TYPE_BOOL);
|
||||
|
||||
shader_modes[RS::SHADER_SPATIAL].functions["vertex"].built_ins["VERTEX"] = ShaderLanguage::TYPE_VEC3;
|
||||
shader_modes[RS::SHADER_SPATIAL].functions["vertex"].built_ins["NORMAL"] = ShaderLanguage::TYPE_VEC3;
|
||||
|
||||
Reference in New Issue
Block a user