From 44db7716df4f01dcbe35b67208986c82317df0b6 Mon Sep 17 00:00:00 2001 From: rdb Date: Sun, 15 Jan 2012 21:27:03 +0000 Subject: [PATCH] use fregs on shadow coordinates, maybe this'll fix some of the shadow-related issues --- panda/src/pgraphnodes/shaderGenerator.cxx | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/panda/src/pgraphnodes/shaderGenerator.cxx b/panda/src/pgraphnodes/shaderGenerator.cxx index bced4ff5b2..c7ee0e3d3b 100644 --- a/panda/src/pgraphnodes/shaderGenerator.cxx +++ b/panda/src/pgraphnodes/shaderGenerator.cxx @@ -639,7 +639,8 @@ synthesize_shader(const RenderState *rs) { char *hbinormal_vreg = 0; pvector texcoord_vreg; pvector texcoord_freg; - pvector tslightvec_freg; + pvector dlightcoord_freg; + pvector slightcoord_freg; char *world_position_freg = 0; char *world_normal_freg = 0; char *eye_position_freg = 0; @@ -724,14 +725,20 @@ synthesize_shader(const RenderState *rs) { if (_shadows && _auto_shadow_on) { for (int i=0; i<(int)_dlights.size(); i++) { if (_dlights[i]->_shadow_caster) { + dlightcoord_freg.push_back(alloc_freg()); text << "\t uniform float4x4 trans_model_to_clip_of_dlight" << i << ",\n"; - text << "\t out float4 l_dlightcoord" << i << ",\n"; + text << "\t out float4 l_dlightcoord" << i << " : " << dlightcoord_freg[i] << ",\n"; + } else { + dlightcoord_freg.push_back(NULL); } } for (int i=0; i<(int)_slights.size(); i++) { if (_slights[i]->_shadow_caster) { + slightcoord_freg.push_back(alloc_freg()); text << "\t uniform float4x4 trans_model_to_clip_of_slight" << i << ",\n"; - text << "\t out float4 l_slightcoord" << i << ",\n"; + text << "\t out float4 l_slightcoord" << i << " : " << slightcoord_freg[i] << ",\n"; + } else { + slightcoord_freg.push_back(NULL); } } } @@ -847,7 +854,7 @@ synthesize_shader(const RenderState *rs) { } else { text << "\t uniform sampler2D k_dlighttex" << i << ",\n"; } - text << "\t float4 l_dlightcoord" << i << ",\n"; + text << "\t in float4 l_dlightcoord" << i << " : " << dlightcoord_freg[i] << ",\n"; } } for (int i=0; i<(int)_plights.size(); i++) { @@ -862,7 +869,7 @@ synthesize_shader(const RenderState *rs) { } else { text << "\t uniform sampler2D k_slighttex" << i << ",\n"; } - text << "\t float4 l_slightcoord" << i << ",\n"; + text << "\t in float4 l_slightcoord" << i << " : " << slightcoord_freg[i] << ",\n"; } } if (_need_material_props) {