A few fixes to support set_shader_input on attribs

This commit is contained in:
Josh Yelon 2005-10-17 23:09:19 +00:00
parent 4bb6fd3f1b
commit 28070dd33e
8 changed files with 205 additions and 73 deletions

View File

@ -142,7 +142,9 @@ Section "${SMDIRECTORY}" SecCore
SetOutPath $INSTDIR\models
File /r /x CVS ${PANDA}\models\*
SetOutPath $INSTDIR\samples
File /r /x CVS ${PSOURCE}\samples\*
File /r /x CVS /x GreetingCard ${PSOURCE}\samples\*
SetOutPath $INSTDIR\samples\GreetingCard
File /r /x CVS ${PANDA}\tmp\GreetingCard\*
SetOutPath $INSTDIR
WriteINIStr $INSTDIR\Website.url "InternetShortcut" "URL" "http://panda3d.etc.cmu.edu/"

View File

@ -1464,10 +1464,10 @@ def EnqueueLink(dll=0, obj=[], opts=[], xdep=[], ldef=0):
def CompileBam(preconv, bam, egg):
if (egg[-4:] == ".flt"):
ifile = os.path.basename(egg)
oscmd("built/bin/flt2egg -pr " + preconv + " -o built/tmp/"+ifile+".egg" + " " + egg)
oscmd("built/bin/flt2egg " + preconv + " -o built/tmp/"+ifile+".egg" + " " + egg)
oscmd("built/bin/egg2bam -o " + bam + " built/tmp/"+ifile+".egg")
else:
oscmd("built/bin/egg2bam -pr " + preconv + " -o " + bam + " " + egg)
oscmd("built/bin/egg2bam " + preconv + " -o " + bam + " " + egg)
def EnqueueBam(preconv, bam, egg):
if (sys.platform == "win32"):
@ -1578,6 +1578,9 @@ MakeDirectory("built/models/icons")
MakeDirectory("built/models/maps")
MakeDirectory("built/models/misc")
MakeDirectory("built/models/gui")
MakeDirectory("built/tmp/GreetingCard")
MakeDirectory("built/tmp/GreetingCard/models")
MakeDirectory("built/tmp/GreetingCard/sound")
if (OMIT.count("PYTHON")==0):
MakeDirectory("built/direct")
@ -4447,21 +4450,21 @@ if (OMIT.count("PANDAAPP")==0):
#
if (OMIT.count("PANDATOOL")==0):
EnqueueBam("../=", "built/models/gui/dialog_box_gui.bam", "dmodels/src/gui/dialog_box_gui.flt")
EnqueueBam("../=", "built/models/misc/camera.bam", "dmodels/src/misc/camera.flt")
EnqueueBam("../=", "built/models/misc/fade.bam", "dmodels/src/misc/fade.flt")
EnqueueBam("../=", "built/models/misc/fade_sphere.bam", "dmodels/src/misc/fade_sphere.flt")
EnqueueBam("../=", "built/models/misc/gridBack.bam", "dmodels/src/misc/gridBack.flt")
EnqueueBam("../=", "built/models/misc/iris.bam", "dmodels/src/misc/iris.flt")
EnqueueBam("../=", "built/models/misc/lilsmiley.bam", "dmodels/src/misc/lilsmiley.egg")
EnqueueBam("../=", "built/models/misc/objectHandles.bam", "dmodels/src/misc/objectHandles.flt")
EnqueueBam("../=", "built/models/misc/rgbCube.bam", "dmodels/src/misc/rgbCube.flt")
EnqueueBam("../=", "built/models/misc/smiley.bam", "dmodels/src/misc/smiley.egg")
EnqueueBam("../=", "built/models/misc/sphere.bam", "dmodels/src/misc/sphere.flt")
EnqueueBam("../=", "built/models/misc/Pointlight.bam", "dmodels/src/misc/Pointlight.egg")
EnqueueBam("../=", "built/models/misc/Dirlight.bam", "dmodels/src/misc/Dirlight.egg")
EnqueueBam("../=", "built/models/misc/Spotlight.bam", "dmodels/src/misc/Spotlight.egg")
#EnqueueBam("../=", "built/models/misc/xyzAxis.bam", "dmodels/src/misc/xyzAxis.flt")
EnqueueBam("-pr ../=", "built/models/gui/dialog_box_gui.bam", "dmodels/src/gui/dialog_box_gui.flt")
EnqueueBam("-pr ../=", "built/models/misc/camera.bam", "dmodels/src/misc/camera.flt")
EnqueueBam("-pr ../=", "built/models/misc/fade.bam", "dmodels/src/misc/fade.flt")
EnqueueBam("-pr ../=", "built/models/misc/fade_sphere.bam", "dmodels/src/misc/fade_sphere.flt")
EnqueueBam("-pr ../=", "built/models/misc/gridBack.bam", "dmodels/src/misc/gridBack.flt")
EnqueueBam("-pr ../=", "built/models/misc/iris.bam", "dmodels/src/misc/iris.flt")
EnqueueBam("-pr ../=", "built/models/misc/lilsmiley.bam", "dmodels/src/misc/lilsmiley.egg")
EnqueueBam("-pr ../=", "built/models/misc/objectHandles.bam", "dmodels/src/misc/objectHandles.flt")
EnqueueBam("-pr ../=", "built/models/misc/rgbCube.bam", "dmodels/src/misc/rgbCube.flt")
EnqueueBam("-pr ../=", "built/models/misc/smiley.bam", "dmodels/src/misc/smiley.egg")
EnqueueBam("-pr ../=", "built/models/misc/sphere.bam", "dmodels/src/misc/sphere.flt")
EnqueueBam("-pr ../=", "built/models/misc/Pointlight.bam", "dmodels/src/misc/Pointlight.egg")
EnqueueBam("-pr ../=", "built/models/misc/Dirlight.bam", "dmodels/src/misc/Dirlight.egg")
EnqueueBam("-pr ../=", "built/models/misc/Spotlight.bam", "dmodels/src/misc/Spotlight.egg")
EnqueueBam("-pr ../=", "built/models/misc/xyzAxis.bam", "dmodels/src/misc/xyzAxis.flt")
CopyAllFiles("built/models/audio/sfx/", "dmodels/src/audio/sfx/", ".wav")
CopyAllFiles("built/models/icons/", "dmodels/src/icons/", ".gif")
@ -4479,6 +4482,18 @@ if (OMIT.count("PANDATOOL")==0):
CopyAllFiles("built/models/maps/", "dmodels/src/maps/", ".rgb")
CopyAllFiles("built/models/maps/", "dmodels/src/maps/", ".rgba")
#
# egg2bam on the greeting card directory
#
if (INSTALLER):
CopyFile("built/tmp/GreetingCard/", "samples/GreetingCard/GreetingCard.py")
CopyFile("built/tmp/GreetingCard/sound/", "samples/GreetingCard/sound/soundtrack.mp3")
CopyAllFiles("built/tmp/GreetingCard/models/", "samples/GreetingCard/models/", ".jpg")
EnqueueBam("-ps strip", "built/tmp/GreetingCard/models/thankyou_card.bam", "samples/GreetingCard/models/thankyou_card.egg")
EnqueueBam("-ps strip", "built/tmp/GreetingCard/models/thankyou_anim.bam", "samples/GreetingCard/models/thankyou_anim.egg")
##########################################################################################
#
# Dependency-Based Distributed Build System.

View File

@ -335,14 +335,14 @@ issue_parameters(GSG *gsg)
// Pass in k-float parameters.
for (int i=0; i<(int)_cg_fbind.size(); i++) {
InternalName *id = _cg_fbind[i].name;
const ShaderInput *input = gsg->_target._shader->get_input(id);
const ShaderInput *input = gsg->_target._shader->get_shader_input(id);
cgGLSetParameter4fv(_cg_fbind[i].parameter, input->get_vector().get_data());
}
// Pass in k-float4x4 parameters.
for (int i=0; i<(int)_cg_npbind.size(); i++) {
InternalName *id = _cg_npbind[i].name;
const ShaderInput *input = gsg->_target._shader->get_input(id);
const ShaderInput *input = gsg->_target._shader->get_shader_input(id);
const float *dat;
if (input->get_nodepath().is_empty()) {
dat = LMatrix4f::ident_mat().get_data();
@ -515,7 +515,7 @@ update_shader_texture_bindings(CLP(ShaderContext) *prev, GSG *gsg)
Texture *tex = 0;
InternalName *id = _cg_texbind[i].name;
if (id != 0) {
const ShaderInput *input = gsg->_target._shader->get_input(id);
const ShaderInput *input = gsg->_target._shader->get_shader_input(id);
tex = input->get_texture();
} else {
if (_cg_texbind[i].stage >= gsg->_target._texture->get_num_on_stages()) {
@ -576,7 +576,7 @@ bind_cg_transform(const ShaderTransBind &stb, GSG *gsg)
} else if (stb.src_name == InternalName::get_world()) {
src = gsg->get_scene()->get_world_transform();
} else {
const ShaderInput *input = gsg->_target._shader->get_input(stb.src_name);
const ShaderInput *input = gsg->_target._shader->get_shader_input(stb.src_name);
if (input->get_nodepath().is_empty()) {
src = gsg->get_scene()->get_world_transform();
} else {
@ -594,7 +594,7 @@ bind_cg_transform(const ShaderTransBind &stb, GSG *gsg)
} else if (stb.rel_name == InternalName::get_world()) {
rel = gsg->get_scene()->get_world_transform();
} else {
const ShaderInput *input = gsg->_target._shader->get_input(stb.rel_name);
const ShaderInput *input = gsg->_target._shader->get_shader_input(stb.rel_name);
if (input->get_nodepath().is_empty()) {
rel = gsg->get_scene()->get_world_transform();
} else {

View File

@ -3141,11 +3141,11 @@ set_shader_input(const ShaderInput *inp) {
node()->get_attrib(ShaderAttrib::get_class_type());
if (attrib != (const RenderAttrib *)NULL) {
const ShaderAttrib *sa = DCAST(ShaderAttrib, attrib);
node()->set_attrib(sa->add_input(inp));
node()->set_attrib(sa->set_shader_input(inp));
} else {
// Create a new ShaderAttrib for this node.
CPT(ShaderAttrib) sa = DCAST(ShaderAttrib, ShaderAttrib::make());
node()->set_attrib(sa->add_input(inp));
node()->set_attrib(sa->set_shader_input(inp));
}
}
@ -3162,7 +3162,7 @@ get_shader_input(InternalName *id) const {
node()->get_attrib(ShaderAttrib::get_class_type());
if (attrib != (const RenderAttrib *)NULL) {
const ShaderAttrib *sa = DCAST(ShaderAttrib, attrib);
return sa->get_input(id);
return sa->get_shader_input(id);
}
return NULL;
}
@ -3180,7 +3180,7 @@ clear_shader_input(InternalName *id) {
node()->get_attrib(ShaderAttrib::get_class_type());
if (attrib != (const RenderAttrib *)NULL) {
const ShaderAttrib *sa = DCAST(ShaderAttrib, attrib);
node()->set_attrib(sa->clear_input(id));
node()->set_attrib(sa->clear_shader_input(id));
}
}

View File

@ -557,10 +557,7 @@ PUBLISHED:
void set_shader(Shader *sha, int priority = 0);
void set_shader_off(int priority = 0);
void clear_shader();
const Shader *get_shader() const;
void set_shader_input(const ShaderInput *inp);
const ShaderInput *get_shader_input(InternalName *id) const;
void clear_shader_input(InternalName *id);
void set_shader_input(InternalName *id, Texture *tex, int priority=0);
void set_shader_input(InternalName *id, const NodePath &np, int priority=0);
void set_shader_input(InternalName *id, const LVector4f &v, int priority=0);
@ -569,8 +566,12 @@ PUBLISHED:
void set_shader_input(const string &id, const NodePath &np, int priority=0);
void set_shader_input(const string &id, const LVector4f &v, int priority=0);
void set_shader_input(const string &id, double n1=0, double n2=0, double n3=0, double n4=1, int priority=0);
const ShaderInput *get_shader_input(const string &id) const;
void clear_shader_input(InternalName *id);
void clear_shader_input(const string &id);
const Shader *get_shader() const;
const ShaderInput *get_shader_input(InternalName *id) const;
const ShaderInput *get_shader_input(const string &id) const;
void set_tex_transform(TextureStage *stage, const TransformState *transform);
void clear_tex_transform();

View File

@ -40,19 +40,6 @@ ShaderAttrib(const ShaderAttrib &copy) :
{
}
////////////////////////////////////////////////////////////////////
// Function: ShaderAttrib::get_shader
// Access: Published
// Description: Returns the shader object associated with the node.
// If get_override returns true, but get_shader
// returns NULL, that means that this attribute should
// disable the shader.
////////////////////////////////////////////////////////////////////
INLINE const Shader *ShaderAttrib::
get_shader() const {
return _shader;
}
////////////////////////////////////////////////////////////////////
// Function: ShaderAttrib::has_shader
// Access: Published
@ -74,20 +61,3 @@ get_shader_priority() const {
return _shader_priority;
}
////////////////////////////////////////////////////////////////////
// Function: ShaderAttrib::get_input
// Access: Published
// Description: Returns the ShaderInput of the given name. If
// no such name is found, this function does not return
// NULL --- it returns the "blank" ShaderInput.
////////////////////////////////////////////////////////////////////
INLINE const ShaderInput *ShaderAttrib::
get_input(const InternalName *id) const {
Inputs::const_iterator i = _inputs.find(id);
if (i == _inputs.end()) {
return ShaderInput::get_blank();
} else {
return (*i).second;
}
}

View File

@ -110,12 +110,12 @@ clear_shader() const {
}
////////////////////////////////////////////////////////////////////
// Function: ShaderAttrib::add_input
// Function: ShaderAttrib::set_shader_input
// Access: Published
// Description:
////////////////////////////////////////////////////////////////////
CPT(RenderAttrib) ShaderAttrib::
add_input(const ShaderInput *input) const {
set_shader_input(const ShaderInput *input) const {
ShaderAttrib *result = new ShaderAttrib(*this);
Inputs::iterator i = result->_inputs.find(input->get_name());
if (i == result->_inputs.end()) {
@ -127,17 +127,149 @@ add_input(const ShaderInput *input) const {
}
////////////////////////////////////////////////////////////////////
// Function: ShaderAttrib::clear_input
// Function: ShaderAttrib::set_shader_input
// Access: Published
// Description:
////////////////////////////////////////////////////////////////////
CPT(RenderAttrib) ShaderAttrib::
clear_input(const InternalName *id) const {
set_shader_input(InternalName *id, Texture *tex, int priority) const {
return set_shader_input(new ShaderInput(id, tex, priority));
}
////////////////////////////////////////////////////////////////////
// Function: ShaderAttrib::set_shader_input
// Access: Published
// Description:
////////////////////////////////////////////////////////////////////
CPT(RenderAttrib) ShaderAttrib::
set_shader_input(InternalName *id, const NodePath &np, int priority) const {
return set_shader_input(new ShaderInput(id, np, priority));
}
////////////////////////////////////////////////////////////////////
// Function: ShaderAttrib::set_shader_input
// Access: Published
// Description:
////////////////////////////////////////////////////////////////////
CPT(RenderAttrib) ShaderAttrib::
set_shader_input(InternalName *id, const LVector4f &v, int priority) const {
return set_shader_input(new ShaderInput(id, v, priority));
}
////////////////////////////////////////////////////////////////////
// Function: ShaderAttrib::set_shader_input
// Access: Published
// Description:
////////////////////////////////////////////////////////////////////
CPT(RenderAttrib) ShaderAttrib::
set_shader_input(InternalName *id, double n1, double n2, double n3, double n4, int priority) const {
return set_shader_input(new ShaderInput(id, LVector4f(n1,n2,n3,n4), priority));
}
////////////////////////////////////////////////////////////////////
// Function: ShaderAttrib::set_shader_input
// Access: Published
// Description:
////////////////////////////////////////////////////////////////////
CPT(RenderAttrib) ShaderAttrib::
set_shader_input(const string &id, Texture *tex, int priority) const {
return set_shader_input(new ShaderInput(InternalName::make(id), tex, priority));
}
////////////////////////////////////////////////////////////////////
// Function: ShaderAttrib::set_shader_input
// Access: Published
// Description:
////////////////////////////////////////////////////////////////////
CPT(RenderAttrib) ShaderAttrib::
set_shader_input(const string &id, const NodePath &np, int priority) const {
return set_shader_input(new ShaderInput(InternalName::make(id), np, priority));
}
////////////////////////////////////////////////////////////////////
// Function: ShaderAttrib::set_shader_input
// Access: Published
// Description:
////////////////////////////////////////////////////////////////////
CPT(RenderAttrib) ShaderAttrib::
set_shader_input(const string &id, const LVector4f &v, int priority) const {
return set_shader_input(new ShaderInput(InternalName::make(id), v, priority));
}
////////////////////////////////////////////////////////////////////
// Function: ShaderAttrib::set_shader_input
// Access: Published
// Description:
////////////////////////////////////////////////////////////////////
CPT(RenderAttrib) ShaderAttrib::
set_shader_input(const string &id, double n1, double n2, double n3, double n4, int priority) const {
return set_shader_input(new ShaderInput(InternalName::make(id), LVector4f(n1,n2,n3,n4), priority));
}
////////////////////////////////////////////////////////////////////
// Function: ShaderAttrib::clear_shader_input
// Access: Published
// Description:
////////////////////////////////////////////////////////////////////
CPT(RenderAttrib) ShaderAttrib::
clear_shader_input(InternalName *id) const {
ShaderAttrib *result = new ShaderAttrib(*this);
result->_inputs.erase(id);
return return_new(result);
}
////////////////////////////////////////////////////////////////////
// Function: ShaderAttrib::clear_shader_input
// Access: Published
// Description:
////////////////////////////////////////////////////////////////////
CPT(RenderAttrib) ShaderAttrib::
clear_shader_input(const string &id) const {
return clear_shader_input(InternalName::make(id));
}
////////////////////////////////////////////////////////////////////
// Function: ShaderAttrib::get_shader_input
// Access: Published
// Description: Returns the ShaderInput of the given name. If
// no such name is found, this function does not return
// NULL --- it returns the "blank" ShaderInput.
////////////////////////////////////////////////////////////////////
const ShaderInput *ShaderAttrib::
get_shader_input(InternalName *id) const {
Inputs::const_iterator i = _inputs.find(id);
if (i == _inputs.end()) {
return ShaderInput::get_blank();
} else {
return (*i).second;
}
}
////////////////////////////////////////////////////////////////////
// Function: ShaderAttrib::get_shader_input
// Access: Published
// Description: Returns the ShaderInput of the given name. If
// no such name is found, this function does not return
// NULL --- it returns the "blank" ShaderInput.
////////////////////////////////////////////////////////////////////
const ShaderInput *ShaderAttrib::
get_shader_input(const string &id) const {
return get_shader_input(InternalName::make(id));
}
////////////////////////////////////////////////////////////////////
// Function: ShaderAttrib::get_shader
// Access: Published
// Description: Returns the shader object associated with the node.
// If get_override returns true, but get_shader
// returns NULL, that means that this attribute should
// disable the shader.
////////////////////////////////////////////////////////////////////
const Shader *ShaderAttrib::
get_shader() const {
return _shader;
}
////////////////////////////////////////////////////////////////////
// Function: ShaderAttrib::make_default_impl
// Access: Protected, Virtual

View File

@ -42,15 +42,27 @@ PUBLISHED:
INLINE bool has_shader() const;
INLINE int get_shader_priority() const;
INLINE const Shader *get_shader() const;
INLINE const ShaderInput *get_input(const InternalName *id) const;
CPT(RenderAttrib) clear_shader() const;
CPT(RenderAttrib) set_shader(const Shader *s, int priority=0) const;
CPT(RenderAttrib) set_shader_off(int priority=0) const;
CPT(RenderAttrib) add_input(const ShaderInput *input) const;
CPT(RenderAttrib) clear_input(const InternalName *id) const;
CPT(RenderAttrib) set_shader(const Shader *s, int priority=0) const;
CPT(RenderAttrib) set_shader_off(int priority=0) const;
CPT(RenderAttrib) clear_shader() const;
CPT(RenderAttrib) set_shader_input(const ShaderInput *inp) const;
CPT(RenderAttrib) set_shader_input(InternalName *id, Texture *tex, int priority=0) const;
CPT(RenderAttrib) set_shader_input(InternalName *id, const NodePath &np, int priority=0) const;
CPT(RenderAttrib) set_shader_input(InternalName *id, const LVector4f &v, int priority=0) const;
CPT(RenderAttrib) set_shader_input(InternalName *id, double n1=0, double n2=0, double n3=0, double n4=1,
int priority=0) const;
CPT(RenderAttrib) set_shader_input(const string &id, Texture *tex, int priority=0) const;
CPT(RenderAttrib) set_shader_input(const string &id, const NodePath &np, int priority=0) const;
CPT(RenderAttrib) set_shader_input(const string &id, const LVector4f &v, int priority=0) const;
CPT(RenderAttrib) set_shader_input(const string &id, double n1=0, double n2=0, double n3=0, double n4=1,
int priority=0) const;
CPT(RenderAttrib) clear_shader_input(InternalName *id) const;
CPT(RenderAttrib) clear_shader_input(const string &id) const;
const Shader *get_shader() const;
const ShaderInput *get_shader_input(InternalName *id) const;
const ShaderInput *get_shader_input(const string &id) const;
static void register_with_read_factory();