From 9cea8f3074a80dcaa852a1bd01bc34c5c479d8ba Mon Sep 17 00:00:00 2001 From: David Rose Date: Mon, 13 May 2002 16:18:12 +0000 Subject: [PATCH] move mayaShader into maya --- pandatool/src/maya/Sources.pp | 2 + .../src/{mayaegg => maya}/mayaShader.cxx | 67 +++---------------- pandatool/src/{mayaegg => maya}/mayaShader.h | 13 ++-- .../src/{mayaegg => maya}/mayaShaders.cxx | 14 ++-- pandatool/src/{mayaegg => maya}/mayaShaders.h | 5 +- pandatool/src/mayaegg/Sources.pp | 2 - pandatool/src/mayaegg/mayaToEggConverter.cxx | 42 +++++++++++- pandatool/src/mayaegg/mayaToEggConverter.h | 3 + 8 files changed, 69 insertions(+), 79 deletions(-) rename pandatool/src/{mayaegg => maya}/mayaShader.cxx (79%) rename pandatool/src/{mayaegg => maya}/mayaShader.h (83%) rename pandatool/src/{mayaegg => maya}/mayaShaders.cxx (95%) rename pandatool/src/{mayaegg => maya}/mayaShaders.h (92%) diff --git a/pandatool/src/maya/Sources.pp b/pandatool/src/maya/Sources.pp index eba75c24d4..4cd966dc49 100644 --- a/pandatool/src/maya/Sources.pp +++ b/pandatool/src/maya/Sources.pp @@ -13,6 +13,8 @@ #define SOURCES \ config_maya.cxx config_maya.h \ mayaApi.cxx mayaApi.h \ + mayaShader.cxx mayaShader.h \ + mayaShaders.cxx mayaShaders.h \ maya_funcs.I maya_funcs.cxx maya_funcs.h \ post_maya_include.h pre_maya_include.h diff --git a/pandatool/src/mayaegg/mayaShader.cxx b/pandatool/src/maya/mayaShader.cxx similarity index 79% rename from pandatool/src/mayaegg/mayaShader.cxx rename to pandatool/src/maya/mayaShader.cxx index 1a407a47d8..11ae71c17f 100644 --- a/pandatool/src/mayaegg/mayaShader.cxx +++ b/pandatool/src/maya/mayaShader.cxx @@ -18,12 +18,7 @@ #include "mayaShader.h" #include "maya_funcs.h" -#include "mayaToEggConverter.h" -#include "config_mayaegg.h" - -#include "eggPrimitive.h" -#include "eggTexture.h" -#include "eggTextureCollection.h" +#include "config_maya.h" #include "pre_maya_include.h" #include @@ -42,9 +37,7 @@ // relevant shader properties. //////////////////////////////////////////////////////////////////// MayaShader:: -MayaShader(MObject engine, MayaToEggConverter *converter) : - _converter(converter) -{ +MayaShader(MObject engine) { _has_color = false; _transparency = 0.0; @@ -67,8 +60,8 @@ MayaShader(MObject engine, MayaToEggConverter *converter) : _name = engine_fn.name().asChar(); - if (mayaegg_cat.is_debug()) { - mayaegg_cat.debug() + if (maya_cat.is_debug()) { + maya_cat.debug() << "Reading shading engine " << _name << "\n"; } @@ -85,44 +78,6 @@ MayaShader(MObject engine, MayaToEggConverter *converter) : } } -//////////////////////////////////////////////////////////////////// -// Function: MayaShader::set_attributes -// Access: Public -// Description: Applies the known shader attributes to the indicated -// egg primitive. -//////////////////////////////////////////////////////////////////// -void MayaShader:: -set_attributes(EggPrimitive &primitive, MayaToEggConverter &conv) { - // In Maya, a polygon is either textured or colored. The texture, - // if present, replaces the color. - - if (_has_texture) { - EggTextureCollection &textures = conv._textures; - - Filename pathname = _converter->convert_texture_path(_texture); - EggTexture tex(_name, pathname); - tex.set_wrap_u(_wrap_u ? EggTexture::WM_repeat : EggTexture::WM_clamp); - tex.set_wrap_v(_wrap_v ? EggTexture::WM_repeat : EggTexture::WM_clamp); - - // Let's mipmap all textures by default. - tex.set_minfilter(EggTexture::FT_linear_mipmap_linear); - tex.set_magfilter(EggTexture::FT_linear); - - LMatrix3d mat = compute_texture_matrix(); - if (!mat.almost_equal(LMatrix3d::ident_mat())) { - tex.set_transform(mat); - } - - EggTexture *new_tex = - textures.create_unique_texture(tex, ~EggTexture::E_tref_name); - - primitive.set_texture(new_tex); - - } else if (_has_color) { - primitive.set_color(Colorf(_color[0], _color[1], _color[2], 1.0)); - } -} - //////////////////////////////////////////////////////////////////// // Function: MayaShader::compute_texture_matrix // Access: Public @@ -181,8 +136,8 @@ read_surface_shader(MObject shader) { MStatus status; MFnDependencyNode shader_fn(shader); - if (mayaegg_cat.is_spam()) { - mayaegg_cat.spam() + if (maya_cat.is_spam()) { + maya_cat.spam() << " Reading surface shader " << shader_fn.name() << "\n"; } @@ -212,8 +167,8 @@ read_surface_shader(MObject shader) { } if (!_has_color && !_has_texture) { - if (mayaegg_cat.is_spam()) { - mayaegg_cat.spam() + if (maya_cat.is_spam()) { + maya_cat.spam() << " Color definition not found.\n"; } } @@ -251,8 +206,8 @@ read_surface_color(MObject color) { } else { // This shader wasn't understood. - if (mayaegg_cat.is_debug()) { - mayaegg_cat.info() + if (maya_cat.is_debug()) { + maya_cat.info() << "**Don't know how to interpret color attribute type " << color.apiTypeStr() << "\n"; @@ -261,7 +216,7 @@ read_surface_color(MObject color) { // of unsupportted shader once. static pset bad_types; if (bad_types.insert(color.apiType()).second) { - mayaegg_cat.info() + maya_cat.info() << "**Don't know how to interpret color attribute type " << color.apiTypeStr() << "\n"; } diff --git a/pandatool/src/mayaegg/mayaShader.h b/pandatool/src/maya/mayaShader.h similarity index 83% rename from pandatool/src/mayaegg/mayaShader.h rename to pandatool/src/maya/mayaShader.h index adada511e2..ab91ebe9f8 100644 --- a/pandatool/src/mayaegg/mayaShader.h +++ b/pandatool/src/maya/mayaShader.h @@ -25,20 +25,19 @@ #include "lmatrix.h" class MObject; -class MayaToEggConverter; -class EggPrimitive; //////////////////////////////////////////////////////////////////// // Class : MayaShader // Description : Corresponds to a single "shader" in Maya. This // extracts out all the parameters of a Maya shader that -// are meaningful to egg. +// we might care about. There are many more parameters +// that we don't care about or don't know enough to +// extract. //////////////////////////////////////////////////////////////////// class MayaShader { public: - MayaShader(MObject engine, MayaToEggConverter *converter); + MayaShader(MObject engine); - void set_attributes(EggPrimitive &primitive, MayaToEggConverter &conv); LMatrix3d compute_texture_matrix(); void output(ostream &out) const; @@ -68,11 +67,9 @@ public: private: bool read_surface_shader(MObject shader); void read_surface_color(MObject color); - - MayaToEggConverter *_converter; }; -inline ostream &operator << (ostream &out, const MayaShader &shader) { +INLINE ostream &operator << (ostream &out, const MayaShader &shader) { shader.output(out); return out; } diff --git a/pandatool/src/mayaegg/mayaShaders.cxx b/pandatool/src/maya/mayaShaders.cxx similarity index 95% rename from pandatool/src/mayaegg/mayaShaders.cxx rename to pandatool/src/maya/mayaShaders.cxx index 5024a22099..203eb86250 100644 --- a/pandatool/src/mayaegg/mayaShaders.cxx +++ b/pandatool/src/maya/mayaShaders.cxx @@ -19,7 +19,7 @@ #include "mayaShaders.h" #include "mayaShader.h" #include "maya_funcs.h" -#include "config_mayaegg.h" +#include "config_maya.h" #include "pre_maya_include.h" #include @@ -36,9 +36,7 @@ // Description: //////////////////////////////////////////////////////////////////// MayaShaders:: -MayaShaders(MayaToEggConverter *converter) : - _converter(converter) -{ +MayaShaders() { } //////////////////////////////////////////////////////////////////// @@ -65,7 +63,7 @@ find_shader_for_node(MObject node) { MObject iog_attr = node_fn.attribute("instObjGroups", &status); if (!status) { // The node is not renderable. What are you thinking? - mayaegg_cat.error() + maya_cat.error() << node_fn.name() << " : not a renderable object.\n"; return (MayaShader *)NULL; } @@ -79,7 +77,7 @@ find_shader_for_node(MObject node) { iog_plug.elementByLogicalIndex(0).connectedTo(iog_pa, false, true, &status); if (!status) { // No shading group defined for this object. - mayaegg_cat.error() + maya_cat.error() << node_fn.name() << " : no shading group defined.\n"; return (MayaShader *)NULL; } @@ -97,7 +95,7 @@ find_shader_for_node(MObject node) { } // Well, we didn't find a ShadingEngine after all. Huh. - mayaegg_cat.info() + maya_cat.info() << node_fn.name() << " : no shading engine found.\n"; return (MayaShader *)NULL; } @@ -123,7 +121,7 @@ find_shader_for_shading_engine(MObject engine) { // All right, this is a newly encountered shading engine. Create a // new MayaShader object to represent it. - MayaShader *shader = new MayaShader(engine, _converter); + MayaShader *shader = new MayaShader(engine); // Record this for the future. _shaders.insert(Shaders::value_type(engine_name, shader)); diff --git a/pandatool/src/mayaegg/mayaShaders.h b/pandatool/src/maya/mayaShaders.h similarity index 92% rename from pandatool/src/mayaegg/mayaShaders.h rename to pandatool/src/maya/mayaShaders.h index 5ecf8e1ec6..6fc7b409c7 100644 --- a/pandatool/src/mayaegg/mayaShaders.h +++ b/pandatool/src/maya/mayaShaders.h @@ -24,7 +24,6 @@ #include "pmap.h" class MayaShader; -class MayaToEggConverter; class MObject; //////////////////////////////////////////////////////////////////// @@ -34,7 +33,7 @@ class MObject; //////////////////////////////////////////////////////////////////// class MayaShaders { public: - MayaShaders(MayaToEggConverter *converter); + MayaShaders(); ~MayaShaders(); MayaShader *find_shader_for_node(MObject node); MayaShader *find_shader_for_shading_engine(MObject engine); @@ -44,8 +43,6 @@ public: private: typedef pmap Shaders; Shaders _shaders; - - MayaToEggConverter *_converter; }; #endif diff --git a/pandatool/src/mayaegg/Sources.pp b/pandatool/src/mayaegg/Sources.pp index 38c7bb0520..59305f774f 100644 --- a/pandatool/src/mayaegg/Sources.pp +++ b/pandatool/src/mayaegg/Sources.pp @@ -16,8 +16,6 @@ #define SOURCES \ config_mayaegg.cxx config_mayaegg.h \ - mayaShader.cxx mayaShader.h \ - mayaShaders.cxx mayaShaders.h \ mayaToEggConverter.cxx mayaToEggConverter.h #end ss_lib_target diff --git a/pandatool/src/mayaegg/mayaToEggConverter.cxx b/pandatool/src/mayaegg/mayaToEggConverter.cxx index 477aea221a..4073d31afa 100644 --- a/pandatool/src/mayaegg/mayaToEggConverter.cxx +++ b/pandatool/src/mayaegg/mayaToEggConverter.cxx @@ -28,6 +28,9 @@ #include "eggNurbsSurface.h" #include "eggNurbsCurve.h" #include "eggPolygon.h" +#include "eggPrimitive.h" +#include "eggTexture.h" +#include "eggTextureCollection.h" #include "string_utils.h" #include "pre_maya_include.h" @@ -627,7 +630,7 @@ make_nurbs_surface(const MDagPath &dag_path, MFnNurbsSurface &surface, egg_group->add_child(egg_nurbs); if (shader != (MayaShader *)NULL) { - shader->set_attributes(*egg_nurbs, *this); + set_shader_attributes(*egg_nurbs, *shader); } } @@ -979,3 +982,40 @@ get_egg_group(const string &name, EggData &data) { _groups.insert(Groups::value_type(name, egg_group)); return egg_group; } + +//////////////////////////////////////////////////////////////////// +// Function: MayaShader::set_shader_attributes +// Access: Public +// Description: Applies the known shader attributes to the indicated +// egg primitive. +//////////////////////////////////////////////////////////////////// +void MayaToEggConverter:: +set_shader_attributes(EggPrimitive &primitive, const MayaShader &shader) { + // In Maya, a polygon is either textured or colored. The texture, + // if present, replaces the color. + + if (shader._has_texture) { + Filename pathname = convert_texture_path(_texture); + EggTexture tex(shader._name, pathname); + tex.set_wrap_u(shader._wrap_u ? EggTexture::WM_repeat : EggTexture::WM_clamp); + tex.set_wrap_v(shader._wrap_v ? EggTexture::WM_repeat : EggTexture::WM_clamp); + + // Let's mipmap all textures by default. + tex.set_minfilter(EggTexture::FT_linear_mipmap_linear); + tex.set_magfilter(EggTexture::FT_linear); + + LMatrix3d mat = shader.compute_texture_matrix(); + if (!mat.almost_equal(LMatrix3d::ident_mat())) { + tex.set_transform(mat); + } + + EggTexture *new_tex = + _textures.create_unique_texture(tex, ~EggTexture::E_tref_name); + + primitive.set_texture(new_tex); + + } else if (shader._has_color) { + primitive.set_color(Colorf(shader._color[0], shader._color[1], + shader._color[2], 1.0f)); + } +} diff --git a/pandatool/src/mayaegg/mayaToEggConverter.h b/pandatool/src/mayaegg/mayaToEggConverter.h index a4deb91a5b..b8d904174e 100644 --- a/pandatool/src/mayaegg/mayaToEggConverter.h +++ b/pandatool/src/mayaegg/mayaToEggConverter.h @@ -32,6 +32,7 @@ class EggData; class EggGroup; class EggVertexPool; class EggNurbsCurve; +class EggPrimitive; class MDagPath; class MFnNurbsSurface; @@ -89,6 +90,8 @@ private: MayaShader *default_shader = NULL); EggGroup *get_egg_group(const string &name, EggData &data); + void set_shader_attributes(EggPrimitive &primitive, + const MayaShader &shader); typedef pmap Groups; Groups _groups;