mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-04 10:54:24 -04:00
Added derivative textures
This commit is contained in:
parent
8f74f5eaaf
commit
9478e2bf08
@ -1,90 +1,90 @@
|
|||||||
###########################################################
|
###########################################################
|
||||||
### ###
|
### ###
|
||||||
### Panda3D Configuration File - Auto-Generated Portion ###
|
### Panda3D Configuration File - Auto-Generated Portion ###
|
||||||
### ###
|
### ###
|
||||||
### Editing this file is not recommended. Most of these ###
|
### Editing this file is not recommended. Most of these ###
|
||||||
### directives can be overriden in Config.prc ###
|
### directives can be overriden in Config.prc ###
|
||||||
### ###
|
### ###
|
||||||
###########################################################
|
###########################################################
|
||||||
|
|
||||||
# Define the display types that have been compiled in. Panda will
|
# Define the display types that have been compiled in. Panda will
|
||||||
# pick one of these by going through the list in this order until one
|
# pick one of these by going through the list in this order until one
|
||||||
# is found that works, unless the user specifically requests a
|
# is found that works, unless the user specifically requests a
|
||||||
# particular display type with the load-display directive.
|
# particular display type with the load-display directive.
|
||||||
|
|
||||||
aux-display pandagl
|
aux-display pandagl
|
||||||
aux-display pandadx9
|
aux-display pandadx9
|
||||||
aux-display pandadx8
|
aux-display pandadx8
|
||||||
aux-display pandadx7
|
aux-display pandadx7
|
||||||
|
|
||||||
# The egg loader is handy to have available by default. This allows
|
# The egg loader is handy to have available by default. This allows
|
||||||
# clients to load egg files. (The bam loader is built-in so bam files
|
# clients to load egg files. (The bam loader is built-in so bam files
|
||||||
# are always loadable).
|
# are always loadable).
|
||||||
|
|
||||||
# By qualifying with the extension "egg", we indicate the egg loader
|
# By qualifying with the extension "egg", we indicate the egg loader
|
||||||
# should be made available only if you explicitly name a file with an
|
# should be made available only if you explicitly name a file with an
|
||||||
# .egg extension.
|
# .egg extension.
|
||||||
|
|
||||||
load-file-type egg pandaegg
|
load-file-type egg pandaegg
|
||||||
|
|
||||||
# The following lines define some handy object types to use within the
|
# The following lines define some handy object types to use within the
|
||||||
# egg syntax. This remaps <ObjectType> { name } into whatever egg
|
# egg syntax. This remaps <ObjectType> { name } into whatever egg
|
||||||
# syntax is given by egg-object-type-name, which makes a handy
|
# syntax is given by egg-object-type-name, which makes a handy
|
||||||
# abbreviation for modeling packages (like Maya) to insert
|
# abbreviation for modeling packages (like Maya) to insert
|
||||||
# sophisticated egg syntax into the generated egg file, using a single
|
# sophisticated egg syntax into the generated egg file, using a single
|
||||||
# object type string.
|
# object type string.
|
||||||
|
|
||||||
egg-object-type-portal <Scalar> portal { 1 }
|
egg-object-type-portal <Scalar> portal { 1 }
|
||||||
egg-object-type-polylight <Scalar> polylight { 1 }
|
egg-object-type-polylight <Scalar> polylight { 1 }
|
||||||
egg-object-type-seq24 <Switch> { 1 } <Scalar> fps { 24 }
|
egg-object-type-seq24 <Switch> { 1 } <Scalar> fps { 24 }
|
||||||
egg-object-type-seq12 <Switch> { 1 } <Scalar> fps { 12 }
|
egg-object-type-seq12 <Switch> { 1 } <Scalar> fps { 12 }
|
||||||
egg-object-type-indexed <Scalar> indexed { 1 }
|
egg-object-type-indexed <Scalar> indexed { 1 }
|
||||||
|
|
||||||
# These are just shortcuts to define the Model and DCS flags, which
|
# These are just shortcuts to define the Model and DCS flags, which
|
||||||
# indicate nodes that should not be flattened out of the hierarchy
|
# indicate nodes that should not be flattened out of the hierarchy
|
||||||
# during the conversion process. DCS goes one step further and
|
# during the conversion process. DCS goes one step further and
|
||||||
# indicates that the node's transform is important and should be
|
# indicates that the node's transform is important and should be
|
||||||
# preserved (DCS stands for Dynamic Coordinate System).
|
# preserved (DCS stands for Dynamic Coordinate System).
|
||||||
|
|
||||||
egg-object-type-model <Model> { 1 }
|
egg-object-type-model <Model> { 1 }
|
||||||
egg-object-type-dcs <DCS> { 1 }
|
egg-object-type-dcs <DCS> { 1 }
|
||||||
|
|
||||||
# The following define various kinds of collision geometry. These
|
# The following define various kinds of collision geometry. These
|
||||||
# mark the geometry at this level and below as invisible collision
|
# mark the geometry at this level and below as invisible collision
|
||||||
# polygons, which can be used by Panda's collision system to detect
|
# polygons, which can be used by Panda's collision system to detect
|
||||||
# collisions more optimally than regular visible polygons.
|
# collisions more optimally than regular visible polygons.
|
||||||
|
|
||||||
egg-object-type-barrier <Collide> { Polyset descend }
|
egg-object-type-barrier <Collide> { Polyset descend }
|
||||||
egg-object-type-sphere <Collide> { Sphere descend }
|
egg-object-type-sphere <Collide> { Sphere descend }
|
||||||
egg-object-type-invsphere <Collide> { InvSphere descend }
|
egg-object-type-invsphere <Collide> { InvSphere descend }
|
||||||
egg-object-type-tube <Collide> { Tube descend }
|
egg-object-type-tube <Collide> { Tube descend }
|
||||||
|
|
||||||
# As above, but these are flagged to be "intangible", so that they
|
# As above, but these are flagged to be "intangible", so that they
|
||||||
# will trigger an event but not stop an object from passing through.
|
# will trigger an event but not stop an object from passing through.
|
||||||
|
|
||||||
egg-object-type-trigger <Collide> { Polyset descend intangible }
|
egg-object-type-trigger <Collide> { Polyset descend intangible }
|
||||||
egg-object-type-trigger-sphere <Collide> { Sphere descend intangible }
|
egg-object-type-trigger-sphere <Collide> { Sphere descend intangible }
|
||||||
|
|
||||||
# "bubble" puts an invisible bubble around an object, but does not
|
# "bubble" puts an invisible bubble around an object, but does not
|
||||||
# otherwise remove the geometry.
|
# otherwise remove the geometry.
|
||||||
|
|
||||||
egg-object-type-bubble <Collide> { Sphere keep descend }
|
egg-object-type-bubble <Collide> { Sphere keep descend }
|
||||||
|
|
||||||
# "ghost" turns off the normal collide bit that is set on visible
|
# "ghost" turns off the normal collide bit that is set on visible
|
||||||
# geometry by default, so that if you are using visible geometry for
|
# geometry by default, so that if you are using visible geometry for
|
||||||
# collisions, this particular geometry will not be part of those
|
# collisions, this particular geometry will not be part of those
|
||||||
# collisions--it is ghostlike.
|
# collisions--it is ghostlike.
|
||||||
|
|
||||||
egg-object-type-ghost <Scalar> collide-mask { 0 }
|
egg-object-type-ghost <Scalar> collide-mask { 0 }
|
||||||
|
|
||||||
# This module allows direct loading of formats like .flt, .mb, or .dxf
|
# This module allows direct loading of formats like .flt, .mb, or .dxf
|
||||||
|
|
||||||
load-file-type ptloader
|
load-file-type ptloader
|
||||||
|
|
||||||
# Define a new egg object type. See the comments in _panda.prc about this.
|
# Define a new egg object type. See the comments in _panda.prc about this.
|
||||||
|
|
||||||
egg-object-type-direct-widget <Scalar> collide-mask { 0x80000000 } <Collide> { Polyset descend }
|
egg-object-type-direct-widget <Scalar> collide-mask { 0x80000000 } <Collide> { Polyset descend }
|
||||||
|
|
||||||
# Define a new cull bin that will render on top of everything else.
|
# Define a new cull bin that will render on top of everything else.
|
||||||
|
|
||||||
cull-bin gui-popup 60 unsorted
|
cull-bin gui-popup 60 unsorted
|
||||||
|
@ -1,74 +1,74 @@
|
|||||||
###########################################################
|
###########################################################
|
||||||
### ###
|
### ###
|
||||||
### Panda3D Configuration File - User-Editable Portion ###
|
### Panda3D Configuration File - User-Editable Portion ###
|
||||||
### ###
|
### ###
|
||||||
###########################################################
|
###########################################################
|
||||||
|
|
||||||
# Uncomment one of the following lines to choose whether you should
|
# Uncomment one of the following lines to choose whether you should
|
||||||
# run using OpenGL or DirectX rendering.
|
# run using OpenGL or DirectX rendering.
|
||||||
|
|
||||||
load-display pandagl
|
load-display pandagl
|
||||||
|
|
||||||
# These control the placement and size of the default rendering window.
|
# These control the placement and size of the default rendering window.
|
||||||
|
|
||||||
win-origin 100 0
|
win-origin 100 0
|
||||||
win-size 800 600
|
win-size 800 600
|
||||||
|
|
||||||
# Uncomment this line if you want to run Panda fullscreen instead of
|
# Uncomment this line if you want to run Panda fullscreen instead of
|
||||||
# in a window.
|
# in a window.
|
||||||
|
|
||||||
fullscreen #f
|
fullscreen #f
|
||||||
|
|
||||||
# If you don't object to running OpenGL in software leave the keyword
|
# If you don't object to running OpenGL in software leave the keyword
|
||||||
# "software" in the following line, otherwise remove it to force
|
# "software" in the following line, otherwise remove it to force
|
||||||
# hardware only.
|
# hardware only.
|
||||||
|
|
||||||
framebuffer-mode rgba double-buffer depth hardware
|
framebuffer-mode rgba double-buffer depth hardware
|
||||||
|
|
||||||
# These control the amount of output Panda gives for some various
|
# These control the amount of output Panda gives for some various
|
||||||
# categories. The severity levels, in order, are "spam", "debug",
|
# categories. The severity levels, in order, are "spam", "debug",
|
||||||
# "info", "warning", and "fatal"; the default is "info". Uncomment
|
# "info", "warning", and "fatal"; the default is "info". Uncomment
|
||||||
# one (or define a new one for the particular category you wish to
|
# one (or define a new one for the particular category you wish to
|
||||||
# change) to control this output.
|
# change) to control this output.
|
||||||
|
|
||||||
notify-level warning
|
notify-level warning
|
||||||
default-directnotify-level warning
|
default-directnotify-level warning
|
||||||
|
|
||||||
# These specify where model files may be loaded from. You probably
|
# These specify where model files may be loaded from. You probably
|
||||||
# want to set this to a sensible path for yourself. $THIS_PRC_DIR is
|
# want to set this to a sensible path for yourself. $THIS_PRC_DIR is
|
||||||
# a special variable that indicates the same directory as this
|
# a special variable that indicates the same directory as this
|
||||||
# particular Config.prc file.
|
# particular Config.prc file.
|
||||||
|
|
||||||
model-path .
|
model-path .
|
||||||
model-path $THIS_PRC_DIR/..
|
model-path $THIS_PRC_DIR/..
|
||||||
model-path $THIS_PRC_DIR/../models
|
model-path $THIS_PRC_DIR/../models
|
||||||
sound-path .
|
sound-path .
|
||||||
sound-path $THIS_PRC_DIR/..
|
sound-path $THIS_PRC_DIR/..
|
||||||
sound-path $THIS_PRC_DIR/../models
|
sound-path $THIS_PRC_DIR/../models
|
||||||
texture-path .
|
texture-path .
|
||||||
texture-path $THIS_PRC_DIR/..
|
texture-path $THIS_PRC_DIR/..
|
||||||
texture-path $THIS_PRC_DIR/../models
|
texture-path $THIS_PRC_DIR/../models
|
||||||
|
|
||||||
# This enable the automatic creation of a TK window when running
|
# This enable the automatic creation of a TK window when running
|
||||||
# Direct.
|
# Direct.
|
||||||
|
|
||||||
want-directtools #f
|
want-directtools #f
|
||||||
want-tk #f
|
want-tk #f
|
||||||
|
|
||||||
# Enable/disable performance profiling tool and frame-rate meter
|
# Enable/disable performance profiling tool and frame-rate meter
|
||||||
|
|
||||||
want-pstats #f
|
want-pstats #f
|
||||||
show-frame-rate-meter #f
|
show-frame-rate-meter #f
|
||||||
|
|
||||||
# This enables simple networked programs to easily provide a DC file
|
# This enables simple networked programs to easily provide a DC file
|
||||||
|
|
||||||
dc-file sample.dc
|
dc-file sample.dc
|
||||||
|
|
||||||
# Enable audio using the FMod audio library by default:
|
# Enable audio using the FMod audio library by default:
|
||||||
|
|
||||||
audio-library-name fmod_audio
|
audio-library-name fmod_audio
|
||||||
|
|
||||||
# The new version of panda supports hardware vertex animation, but it's not quite ready
|
# The new version of panda supports hardware vertex animation, but it's not quite ready
|
||||||
|
|
||||||
hardware-animated-vertices 0
|
hardware-animated-vertices 0
|
||||||
|
|
||||||
|
@ -362,6 +362,13 @@ update_shader_texture_bindings(CLP(ShaderContext) *prev, GSG *gsg)
|
|||||||
TextureStage *stage = gsg->_target._texture->get_on_stage(_cg_texbind[i].stage);
|
TextureStage *stage = gsg->_target._texture->get_on_stage(_cg_texbind[i].stage);
|
||||||
tex = gsg->_target._texture->get_on_texture(stage);
|
tex = gsg->_target._texture->get_on_texture(stage);
|
||||||
}
|
}
|
||||||
|
if (_cg_texbind[i].suffix != 0) {
|
||||||
|
// The suffix feature is inefficient. It is a temporary hack.
|
||||||
|
if (tex == 0) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
tex = tex->load_related(_cg_texbind[i].suffix);
|
||||||
|
}
|
||||||
if ((tex == 0) || (tex->get_texture_type() != _cg_texbind[i].desiredtype)) {
|
if ((tex == 0) || (tex->get_texture_type() != _cg_texbind[i].desiredtype)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -824,11 +831,14 @@ compile_cg_parameter(CGparameter p)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (pieces[0] == "tex") {
|
if (pieces[0] == "tex") {
|
||||||
if ((!errchk_cg_parameter_words(p,2)) ||
|
if ((!errchk_cg_parameter_direction(p, CG_IN)) ||
|
||||||
(!errchk_cg_parameter_direction(p, CG_IN)) ||
|
|
||||||
(!errchk_cg_parameter_variance(p, CG_UNIFORM)) ||
|
(!errchk_cg_parameter_variance(p, CG_UNIFORM)) ||
|
||||||
(!errchk_cg_parameter_sampler(p)))
|
(!errchk_cg_parameter_sampler(p)))
|
||||||
return false;
|
return false;
|
||||||
|
if ((pieces.size() != 2)&&(pieces.size() != 3)) {
|
||||||
|
errchk_cg_output(p, "Invalid parameter name");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
ShaderTexBind bind;
|
ShaderTexBind bind;
|
||||||
bind.parameter = p;
|
bind.parameter = p;
|
||||||
bind.name = 0;
|
bind.name = 0;
|
||||||
@ -842,6 +852,9 @@ compile_cg_parameter(CGparameter p)
|
|||||||
errchk_cg_output(p, "Invalid type for a tex-parameter");
|
errchk_cg_output(p, "Invalid type for a tex-parameter");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
if (pieces.size()==3) {
|
||||||
|
bind.suffix = InternalName::make(((string)"-") + pieces[2]);
|
||||||
|
}
|
||||||
_cg_texbind.push_back(bind);
|
_cg_texbind.push_back(bind);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -65,6 +65,7 @@ private:
|
|||||||
PT(InternalName) name;
|
PT(InternalName) name;
|
||||||
int stage;
|
int stage;
|
||||||
int desiredtype;
|
int desiredtype;
|
||||||
|
PT(InternalName) suffix;
|
||||||
};
|
};
|
||||||
struct ShaderTransBind {
|
struct ShaderTransBind {
|
||||||
CGparameter parameter;
|
CGparameter parameter;
|
||||||
|
@ -750,6 +750,45 @@ store(PNMImage &pnmimage, int z) const {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: Texture::load_related
|
||||||
|
// Access: Published
|
||||||
|
// Description: Loads a texture whose filename is derived by
|
||||||
|
// concatenating a suffix to the filename of this
|
||||||
|
// texture. May return NULL, for example, if this
|
||||||
|
// texture doesn't have a filename.
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
Texture *Texture::
|
||||||
|
load_related(const PT(InternalName) &suffix) const {
|
||||||
|
RelatedTextures::const_iterator ti;
|
||||||
|
ti = _related_textures.find(suffix);
|
||||||
|
if (ti != _related_textures.end()) {
|
||||||
|
return (*ti).second;
|
||||||
|
}
|
||||||
|
if (!has_fullpath()) {
|
||||||
|
return (Texture*)NULL;
|
||||||
|
}
|
||||||
|
Filename main = get_fullpath();
|
||||||
|
main.set_basename_wo_extension(main.get_basename_wo_extension() +
|
||||||
|
suffix->get_name());
|
||||||
|
Texture *res;
|
||||||
|
if (has_alpha_fullpath()) {
|
||||||
|
Filename alph = get_alpha_fullpath();
|
||||||
|
alph.set_basename_wo_extension(alph.get_basename_wo_extension() +
|
||||||
|
suffix->get_name());
|
||||||
|
res = TexturePool::load_texture(main, alph,
|
||||||
|
_primary_file_num_channels,
|
||||||
|
_alpha_file_channel);
|
||||||
|
} else {
|
||||||
|
res = TexturePool::load_texture(main,
|
||||||
|
_primary_file_num_channels);
|
||||||
|
}
|
||||||
|
// I'm casting away the const-ness of 'this' because this
|
||||||
|
// field is only a cache.
|
||||||
|
((Texture *)this)->_related_textures.insert(RelatedTextures::value_type(suffix, res));
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
// Function: Texture::set_wrap_u
|
// Function: Texture::set_wrap_u
|
||||||
// Access: Published
|
// Access: Published
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
#include "filename.h"
|
#include "filename.h"
|
||||||
#include "typedWritableReferenceCount.h"
|
#include "typedWritableReferenceCount.h"
|
||||||
#include "namable.h"
|
#include "namable.h"
|
||||||
|
#include "internalName.h"
|
||||||
#include "graphicsStateGuardianBase.h"
|
#include "graphicsStateGuardianBase.h"
|
||||||
#include "pmap.h"
|
#include "pmap.h"
|
||||||
|
|
||||||
@ -181,6 +182,8 @@ PUBLISHED:
|
|||||||
virtual bool load(const PNMImage &pnmimage, int z = 0);
|
virtual bool load(const PNMImage &pnmimage, int z = 0);
|
||||||
bool store(PNMImage &pnmimage, int z = 0) const;
|
bool store(PNMImage &pnmimage, int z = 0) const;
|
||||||
|
|
||||||
|
Texture *load_related(const PT(InternalName) &suffix) const;
|
||||||
|
|
||||||
INLINE bool has_filename() const;
|
INLINE bool has_filename() const;
|
||||||
INLINE const Filename &get_filename() const;
|
INLINE const Filename &get_filename() const;
|
||||||
INLINE bool has_alpha_filename() const;
|
INLINE bool has_alpha_filename() const;
|
||||||
@ -353,6 +356,14 @@ protected:
|
|||||||
typedef pmap<PreparedGraphicsObjects *, TextureContext *> Contexts;
|
typedef pmap<PreparedGraphicsObjects *, TextureContext *> Contexts;
|
||||||
Contexts _contexts;
|
Contexts _contexts;
|
||||||
|
|
||||||
|
// It is common, when using normal maps, specular maps, gloss maps,
|
||||||
|
// and such, to use a file naming convention where the filenames
|
||||||
|
// of the special maps are derived by concatenating a suffix to
|
||||||
|
// the name of the diffuse map. The following table enables
|
||||||
|
// lookup of the special maps given the diffuse map and the suffix.
|
||||||
|
typedef pmap<PT(InternalName), PT(Texture)> RelatedTextures;
|
||||||
|
RelatedTextures _related_textures;
|
||||||
|
|
||||||
// This value represents the intersection of all the dirty flags of
|
// This value represents the intersection of all the dirty flags of
|
||||||
// the various TextureContexts that might be associated with this
|
// the various TextureContexts that might be associated with this
|
||||||
// texture.
|
// texture.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user