HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
IMaterial.h
Go to the documentation of this file.
1 //-*****************************************************************************
2 //
3 // Copyright (c) 2009-2015,
4 // Sony Pictures Imageworks Inc. and
5 // Industrial Light & Magic, a division of Lucasfilm Entertainment Company Ltd.
6 //
7 // All rights reserved.
8 //
9 // Redistribution and use in source and binary forms, with or without
10 // modification, are permitted provided that the following conditions are
11 // met:
12 // * Redistributions of source code must retain the above copyright
13 // notice, this list of conditions and the following disclaimer.
14 // * Redistributions in binary form must reproduce the above
15 // copyright notice, this list of conditions and the following disclaimer
16 // in the documentation and/or other materials provided with the
17 // distribution.
18 // * Neither the name of Sony Pictures Imageworks, nor
19 // Industrial Light & Magic, nor the names of their contributors may be used
20 // to endorse or promote products derived from this software without specific
21 // prior written permission.
22 //
23 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
24 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
25 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
26 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
27 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
28 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
29 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
30 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
31 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
32 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
33 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34 //
35 //-*****************************************************************************
36 
37 #ifndef Alembic_AbcMaterial_IMaterial_h
38 #define Alembic_AbcMaterial_IMaterial_h
39 
40 #include <Alembic/Abc/All.h>
41 #include <Alembic/Util/Export.h>
43 
44 namespace Alembic {
45 namespace AbcMaterial {
46 namespace ALEMBIC_VERSION_NS {
47 
48 //! Schema for reading and querying shader definitions from either an object or
49 //! compound property.
50 //! Only "monolithic" shader definitions (i.e. non network) are presently
51 //! supported in this implementation.
53  : public Abc::ISchema<MaterialSchemaInfo>
54 {
55 public:
56 
57  //-------------------------------------------------------------------------
58  //BOILERPLATE
59 
61 
63 
64  //! This constructor creates a new material reader.
65  //! The first argument is the parent ICompoundProperty, from which the
66  //! error handler policy for is derived. The second argument is the name
67  //! of the ICompoundProperty that contains this schemas properties. The
68  //! remaining optional arguments can be used to override the
69  //! ErrorHandlerPolicy and to specify schema interpretation matching.
70  IMaterialSchema( const ICompoundProperty &iParent,
71  const std::string &iName,
72  const Abc::Argument &iArg0 = Abc::Argument(),
73  const Abc::Argument &iArg1 = Abc::Argument() )
74 
75  : Abc::ISchema<MaterialSchemaInfo>( iParent, iName, iArg0, iArg1 )
76  {
77  init();
78  }
79 
80  //! This constructor wraps an existing ICompoundProperty as the material
81  //! reader, and the error handler policy is derived from it.
82  //! The remaining optional arguments can be used to override the
83  //! ErrorHandlerPolicy and to specify schema interpretation matching.
84  IMaterialSchema( const ICompoundProperty &iProp,
85  const Abc::Argument &iArg0 = Abc::Argument(),
86  const Abc::Argument &iArg1 = Abc::Argument() )
87  : Abc::ISchema<MaterialSchemaInfo>( iProp, iArg0, iArg1 )
88  {
89  init();
90  }
91 
92  //! Copy constructor.
94  : Abc::ISchema<MaterialSchemaInfo>()
95  {
96  *this = iCopy;
97  }
98 
99  //-------------------------------------------------------------------------
100  //ACTUAL STUFF
101 
102  //! Fills a list of target name strings for which either shader or
103  //! parameter definitions are locally present.
104  //! Target name values match an upon convention for a renderer
105  //! or application (i.e. "prman")
106  //! This gets the target names for the monolithic shaders
107  void getTargetNames( std::vector<std::string> & iTargetNames );
108 
109  //! Fills a list of shader type strings for which either shader or
110  //! parameter definitions are locally present for a given target.
111  //! Shader type names match an agreed upon convention for shader terminals
112  //! such as "surface," "displacement," "light", "coshader_somename."
113  void getShaderTypesForTarget( const std::string & iTargetName,
114  std::vector<std::string> & oShaderTypeNames );
115 
116  //! Returns true and fills result with the shader name for a given
117  //! target and shaderType if locally defined
118  bool getShader( const std::string & iTarget,
119  const std::string & iShaderType,
120  std::string & oResult );
121 
122  //! Returns the enclosing compound property for the given target and
123  //! shader type. Call .valid() on the result to determine whether it's
124  //! locally defined or not.
125  Abc::ICompoundProperty getShaderParameters(
126  const std::string & iTarget, const std::string & iShaderType );
127 
128  //-------------------------------------------------------------------------
129 
131  {
132  public:
133 
134  NetworkNode();
135  NetworkNode( Abc::ICompoundProperty iCompound );
137  const std::string & iNodeName );
138 
139  bool valid();
140 
142 
143  bool getTarget( std::string & oResult );
144  bool getNodeType( std::string & oResult );
145 
146  Abc::ICompoundProperty getParameters();
147 
148  size_t getNumConnections();
149  bool getConnection( size_t iIndex,
150  std::string & oInputName,
151  std::string & oConnectedNodeName,
152  std::string & oConnectedOutputName );
153 
154  bool getConnection( const std::string & iInputName,
155  std::string & oConnectedNodeName,
156  std::string & oConnectedOutputName );
157 
158  private:
159  Abc::ICompoundProperty m_compound;
160 
161  bool m_connectionsChecked;
162  std::vector< std::string > m_connections;
163  std::map< std::string, std::string > m_connectionsMap;
164 
165  void splitConnectionValue( const std::string & v,
166  std::string & a,
167  std::string & b );
168  };
169 
170  size_t getNumNetworkNodes();
171  void getNetworkNodeNames( std::vector<std::string> & oNames );
172 
173  NetworkNode getNetworkNode( size_t iIndex );
174  NetworkNode getNetworkNode( const std::string & iNodeName );
175 
176  void getNetworkTerminalTargetNames(
177  std::vector<std::string> & oTargetNames );
178 
179  void getNetworkTerminalShaderTypesForTarget(
180  const std::string & iTargetName,
181  std::vector<std::string> & oShaderTypeNames );
182 
183  bool getNetworkTerminal( const std::string & iTarget,
184  const std::string & iShaderType,
185  std::string & oNodeName,
186  std::string & oOutputName );
187 
188  size_t getNumNetworkInterfaceParameterMappings();
189  bool getNetworkInterfaceParameterMapping( size_t iIndex,
190  std::string & oInterfaceParamName,
191  std::string & oMapToNodeName,
192  std::string & oMapToParamName );
193 
194  void getNetworkInterfaceParameterMappingNames(
195  std::vector<std::string> & oNames );
196 
197  bool getNetworkInterfaceParameterMapping(
198  const std::string & iInterfaceParamName,
199  std::string & oMapToNodeName,
200  std::string & oMapToParamName );
201 
202  Abc::ICompoundProperty getNetworkInterfaceParameters();
203 
204 protected:
205 
206 private:
207 
208  void init();
209 
210  std::map<std::string, std::string> m_shaderNames;
211  std::map<std::string, std::string> m_terminals;
212  std::map<std::string, std::string> m_interfaceMap;
213  std::vector<std::string> m_interface;
214 
215  Abc::ICompoundProperty m_interfaceParams;
216  Abc::ICompoundProperty m_node;
217 };
218 
219 //! Object declaration
221 
222 typedef Util::shared_ptr< IMaterial > IMaterialPtr;
223 
224 } // End namespace ALEMBIC_VERSION_NS
225 
226 using namespace ALEMBIC_VERSION_NS;
227 
228 } // End namespace AbcMaterial
229 } // End namespace Alembic
230 
231 #endif
IMaterialSchema(const ICompoundProperty &iProp, const Abc::Argument &iArg0=Abc::Argument(), const Abc::Argument &iArg1=Abc::Argument())
Definition: IMaterial.h:84
const GLdouble * v
Definition: glcorearb.h:837
GLsizei const GLchar *const * string
Definition: glcorearb.h:814
GLboolean GLboolean GLboolean GLboolean a
Definition: glcorearb.h:1222
#define ALEMBIC_EXPORT
Definition: Export.h:51
IMaterialSchema(const IMaterialSchema &iCopy)
Copy constructor.
Definition: IMaterial.h:93
IMaterialSchema(const ICompoundProperty &iParent, const std::string &iName, const Abc::Argument &iArg0=Abc::Argument(), const Abc::Argument &iArg1=Abc::Argument())
Definition: IMaterial.h:70
PXL_API const char * getName(const ColorSpace *space)
Return the name of the color space.
GLboolean GLboolean GLboolean b
Definition: glcorearb.h:1222
Abc::ISchemaObject< IMaterialSchema > IMaterial
Object declaration.
Definition: IMaterial.h:220
Util::shared_ptr< IMaterial > IMaterialPtr
Definition: IMaterial.h:222
#define ALEMBIC_VERSION_NS
Definition: Foundation.h:88