Overload improved (not optimal, but better than list of string arguments) to set_shader_auto to allow any of normal, glow, gloss, ramp, shadow to be turned on or off via bitmask

This commit is contained in:
Mike Christel 2010-05-03 16:41:16 +00:00
parent 6a7580ca45
commit ad30e4c71f
5 changed files with 32 additions and 25 deletions

View File

@ -60,6 +60,22 @@ PUBLISHED:
ST_geometry, ST_geometry,
}; };
enum AutoShaderSwitch {
AS_normal = 0x01,
AS_glow = 0x02,
AS_gloss = 0x04,
AS_ramp = 0x08,
AS_shadow = 0x10,
};
enum AutoShaderBit {
bit_AutoShaderNormal = 0, // bit for AS_normal
bit_AutoShaderGlow = 1, // bit for AS_glow
bit_AutoShaderGloss = 2, // bit for AS_gloss
bit_AutoShaderRamp = 3, // bit for AS_ramp
bit_AutoShaderShadow = 4, // bit for AS_shadow
};
static PT(Shader) load(const Filename &file, const ShaderLanguage &lang = SL_none); static PT(Shader) load(const Filename &file, const ShaderLanguage &lang = SL_none);
static PT(Shader) make(const string &body, const ShaderLanguage &lang = SL_none); static PT(Shader) make(const string &body, const ShaderLanguage &lang = SL_none);
static PT(Shader) load(const ShaderLanguage &lang, const Filename &vertex, const Filename &fragment, const Filename &geometry = ""); static PT(Shader) load(const ShaderLanguage &lang, const Filename &vertex, const Filename &fragment, const Filename &geometry = "");

View File

@ -2,7 +2,7 @@
// Created by: drose (25Feb02) // Created by: drose (25Feb02)
// Updated by: fperazzi, PandaSE (06Apr10) (added more overloads // Updated by: fperazzi, PandaSE (06Apr10) (added more overloads
// for set_shader_input) // for set_shader_input)
// Updated by: weifengh, PandaSE(15Apr10) (added set_shader_auto) // Updated by: weifengh, PandaSE(30Apr10) (added set_shader_auto)
// //
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
// //
@ -3725,11 +3725,10 @@ set_shader_auto(int priority) {
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
// Function: NodePath::set_shader_auto // Function: NodePath::set_shader_auto
// Access: Published // Access: Published
// Description: overloaded for auto shader selective on/off of // Description: overloaded for auto shader customization
// normal, glow, gloss, ramp, shadow
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
void NodePath:: void NodePath::
set_shader_auto(const char* normal_on, const char* glow_on, const char* gloss_on, const char* ramp_on, const char* shadow_on, int priority) { set_shader_auto(BitMask32 shader_switch, int priority) {
nassertv_always(!is_empty()); nassertv_always(!is_empty());
const RenderAttrib *attrib = const RenderAttrib *attrib =
@ -3738,11 +3737,11 @@ set_shader_auto(const char* normal_on, const char* glow_on, const char* gloss_on
priority = max(priority, priority = max(priority,
node()->get_state()->get_override(ShaderAttrib::get_class_slot())); node()->get_state()->get_override(ShaderAttrib::get_class_slot()));
const ShaderAttrib *sa = DCAST(ShaderAttrib, attrib); const ShaderAttrib *sa = DCAST(ShaderAttrib, attrib);
node()->set_attrib(sa->set_shader_auto(normal_on, glow_on, gloss_on, ramp_on, shadow_on, priority)); node()->set_attrib(sa->set_shader_auto(shader_switch, priority));
} else { } else {
// Create a new ShaderAttrib for this node. // Create a new ShaderAttrib for this node.
CPT(ShaderAttrib) sa = DCAST(ShaderAttrib, ShaderAttrib::make()); CPT(ShaderAttrib) sa = DCAST(ShaderAttrib, ShaderAttrib::make());
node()->set_attrib(sa->set_shader_auto(normal_on, glow_on, gloss_on, ramp_on, shadow_on, priority)); node()->set_attrib(sa->set_shader_auto(shader_switch, priority));
} }
} }
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////

View File

@ -2,7 +2,7 @@
// Created by: drose (25Feb02) // Created by: drose (25Feb02)
// Updated by: fperazzi, PandaSE (06Apr10) (added more overloads // Updated by: fperazzi, PandaSE (06Apr10) (added more overloads
// for set_shader_input) // for set_shader_input)
// Updated by: weifengh, PandaSE(15Apr10) // Updated by: weifengh, PandaSE(30Apr10)
// //
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
// //
@ -605,7 +605,7 @@ PUBLISHED:
void set_shader(const Shader *sha, int priority = 0); void set_shader(const Shader *sha, int priority = 0);
void set_shader_off(int priority = 0); void set_shader_off(int priority = 0);
void set_shader_auto(int priority = 0); void set_shader_auto(int priority = 0);
void set_shader_auto(const char* normal_on, const char* glow_on, const char* gloss_on, const char* ramp_on, const char* shadow_on, int priority=0); void set_shader_auto(BitMask32 shader_switch, int priority=0);
void clear_shader(); void clear_shader();
void set_shader_input(const ShaderInput *inp); void set_shader_input(const ShaderInput *inp);

View File

@ -132,30 +132,22 @@ set_shader_auto(int priority) const {
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
// Function: ShaderAttrib::set_shader_auto // Function: ShaderAttrib::set_shader_auto
// Access: Published // Access: Published
// Description: Set auto shader with control over whether to keep // Description: Set auto shader with bitmask to customize use,
// normal, glow, etc., on or off (e.g., all on via // e.g., to keep normal, glow, etc., on or off
// "normal-on","glow-on","gloss-on","ramp-on","shadow-on")
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
CPT(RenderAttrib) ShaderAttrib:: CPT(RenderAttrib) ShaderAttrib::
set_shader_auto(const char* normal_on, const char* glow_on, const char* gloss_on, const char* ramp_on, const char* shadow_on, int priority) const { set_shader_auto(BitMask32 shader_switch, int priority) const {
ShaderAttrib *result = new ShaderAttrib(*this); ShaderAttrib *result = new ShaderAttrib(*this);
result->_shader = NULL; result->_shader = NULL;
result->_shader_priority = priority; result->_shader_priority = priority;
result->_auto_shader = true; result->_auto_shader = true;
result->_has_shader = true; result->_has_shader = true;
string cleanedFlag; result->_auto_normal_on = shader_switch.get_bit(Shader::bit_AutoShaderNormal);
result->_auto_glow_on = shader_switch.get_bit(Shader::bit_AutoShaderGlow);
cleanedFlag = downcase(normal_on); result->_auto_gloss_on = shader_switch.get_bit(Shader::bit_AutoShaderGloss);
result->_auto_normal_on = (cleanedFlag == "normal_on"); result->_auto_ramp_on = shader_switch.get_bit(Shader::bit_AutoShaderRamp);
cleanedFlag = downcase(glow_on); result->_auto_shadow_on = shader_switch.get_bit(Shader::bit_AutoShaderShadow);
result->_auto_glow_on = (cleanedFlag == "glow_on");
cleanedFlag = downcase(gloss_on);
result->_auto_gloss_on = (cleanedFlag == "gloss_on");
cleanedFlag = downcase(ramp_on);
result->_auto_ramp_on = (cleanedFlag == "ramp_on");
cleanedFlag = downcase(shadow_on);
result->_auto_shadow_on = (cleanedFlag == "shadow_on");
return return_new(result); return return_new(result);
} }

View File

@ -66,7 +66,7 @@ PUBLISHED:
CPT(RenderAttrib) set_shader_off(int priority=0) const; CPT(RenderAttrib) set_shader_off(int priority=0) const;
CPT(RenderAttrib) set_shader_auto(int priority=0) const; CPT(RenderAttrib) set_shader_auto(int priority=0) const;
CPT(RenderAttrib) set_shader_auto(const char* normal_on, const char* glow_on, const char* gloss_on, const char* ramp_on, const char* shadow_on, int priority=0) const; CPT(RenderAttrib) set_shader_auto(BitMask32 shader_switch, int priority=0) const;
CPT(RenderAttrib) clear_shader() const; CPT(RenderAttrib) clear_shader() const;
// Shader Inputs // Shader Inputs