diff --git a/CMakeLists.txt b/CMakeLists.txt index 0bde4c0aeb..e73887b6d2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,7 +11,7 @@ if (MATERIALX_BUILD_JS) if (EMSDK_PATH) # NOTE: Setting the CMAKE_TOOLCHAIN_FILE needs to happen before calling project() - set(CMAKE_TOOLCHAIN_FILE "${MATERIALX_EMSDK_PATH}/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake") + set(CMAKE_TOOLCHAIN_FILE "${EMSDK_PATH}/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake") else() message("The EMSDK path was not supplied, disabling MATERIALX_BUILD_JS") set(MATERIALX_BUILD_JS OFF) diff --git a/source/JsMaterialX/CMakeLists.txt b/source/JsMaterialX/CMakeLists.txt index ab38fa3f67..f49389500c 100644 --- a/source/JsMaterialX/CMakeLists.txt +++ b/source/JsMaterialX/CMakeLists.txt @@ -18,51 +18,56 @@ set(CORE_DEPS ${OUTPUT_CORE}JsTypes.cpp ${OUTPUT_CORE}JsGeom.cpp ${OUTPUT_CORE}JsVariant.cpp ${OUTPUT_CORE}JsValue.cpp - ${OUTPUT_CORE}JsMaterial.cpp ${OUTPUT_CORE}JsRegisteredVectors.cpp ${OUTPUT_CORE}JsTraversal.cpp) set(FORMAT_DEPS ${OUTPUT_FORMAT}JsXmlIo.cpp) -set(LIB_DEPS ${OUTPUT_LIBS}MaterialXCore/libMaterialXCore.a ${OUTPUT_LIBS}MaterialXFormat/libMaterialXFormat.a) - # Include the source directory -set(JS_FLAGS "-I${SOURCE_FOLDER} ") +set(JS_LINK_FLAGS "-I${SOURCE_FOLDER} ") # Add all of the required flags for emcc -string(APPEND JS_FLAGS "-s WASM=1 -s DISABLE_EXCEPTION_CATCHING=0 -s MODULARIZE=1 -s EXPORT_ES6=1 -s USE_ES6_IMPORT_META=0 -s MEMORY_GROWTH_LINEAR_STEP=32MB -s ALLOW_MEMORY_GROWTH=1 ") +string(APPEND JS_LINK_FLAGS "-s WASM=1 -s DISABLE_EXCEPTION_CATCHING=0 -s MODULARIZE=1 -s EXPORT_ES6=1 -s USE_ES6_IMPORT_META=0 -s MEMORY_GROWTH_LINEAR_STEP=32MB -s ALLOW_MEMORY_GROWTH=1 ") # Add the post javascript core files -string(APPEND JS_FLAGS "--post-js ${OUTPUT_CORE}JsTypes.js --post-js ${OUTPUT_CORE}JsUnit.js --post-js ${OUTPUT_CORE}JsGeom.js --post-js ${OUTPUT_CORE}JsDefinition.js --post-js ${OUTPUT_CORE}JsDocument.js --post-js ${OUTPUT_CORE}JsElement.js --post-js ${OUTPUT_CORE}JsInterface.js --post-js ${OUTPUT_CORE}JsLook.js --post-js ${OUTPUT_CORE}JsMaterial.js --post-js ${OUTPUT_CORE}JsNode.js --post-js ${OUTPUT_CORE}JsProperty.js --post-js ${OUTPUT_CORE}JsTraversal.js --post-js ${OUTPUT_CORE}JsUtil.js --post-js ${OUTPUT_CORE}JsValue.js --post-js ${OUTPUT_CORE}JsVariant.js ") +string(APPEND JS_LINK_FLAGS "--post-js ${OUTPUT_CORE}JsTypes.js --post-js ${OUTPUT_CORE}JsUnit.js --post-js ${OUTPUT_CORE}JsGeom.js --post-js ${OUTPUT_CORE}JsDefinition.js --post-js ${OUTPUT_CORE}JsDocument.js --post-js ${OUTPUT_CORE}JsElement.js --post-js ${OUTPUT_CORE}JsInterface.js --post-js ${OUTPUT_CORE}JsLook.js --post-js ${OUTPUT_CORE}JsNode.js --post-js ${OUTPUT_CORE}JsProperty.js --post-js ${OUTPUT_CORE}JsTraversal.js --post-js ${OUTPUT_CORE}JsUtil.js --post-js ${OUTPUT_CORE}JsValue.js --post-js ${OUTPUT_CORE}JsVariant.js ") # Add the post javascript format files -string(APPEND JS_FLAGS "--post-js ${OUTPUT_FORMAT}JsXmlIo.js --post-js ${CMAKE_CURRENT_SOURCE_DIR}/initMaterialX.js ") +string(APPEND JS_LINK_FLAGS "--post-js ${OUTPUT_FORMAT}JsXmlIo.js --post-js ${CMAKE_CURRENT_SOURCE_DIR}/initMaterialX.js ") if (EXTERNAL_LINK_FLAGS) - string(APPEND JS_FLAGS "${EXTERNAL_LINK_FLAGS} ") + string(APPEND JS_LINK_FLAGS "${EXTERNAL_LINK_FLAGS} ") +endif() + +set(JS_COMPILE_FLAGS "") +if (EXTERNAL_COMPILE_FLAGS) + string(APPEND JS_COMPILE_FLAGS "${EXTERNAL_COMPILE_FLAGS} ") endif() + if (CMAKE_BUILD_TYPE MATCHES Debug) message("JS: Building Debug") - string(APPEND JS_FLAGS "--bind ") + string(APPEND JS_LINK_FLAGS "--bind ") else() message("JS: Building Release") - string(APPEND JS_FLAGS "-Os --bind ") + string(APPEND JS_LINK_FLAGS "-flto -Os --bind ") + string(APPEND JS_COMPILE_FLAGS "-flto -Os ") endif() -add_executable(JsMaterialX MaterialXLib.cpp) +add_executable(JsMaterialX MaterialXLib.cpp + ${CORE_DEPS} + ${FORMAT_DEPS}) set_target_properties(JsMaterialX PROPERTIES OUTPUT_NAME JsMaterialX - COMPILE_FLAGS "${EXTERNAL_COMPILE_FLAGS}" - LINK_FLAGS "${JS_FLAGS}" + COMPILE_FLAGS "${JS_COMPILE_FLAGS}" + LINK_FLAGS "${JS_LINK_FLAGS}" SOVERSION "${MATERIALX_MAJOR_VERSION}") target_link_libraries(JsMaterialX - PUBLIC ${CORE_DEPS} - PUBLIC ${FORMAT_DEPS} - PUBLIC ${LIB_DEPS} + PUBLIC MaterialXCore + PUBLIC MaterialXFormat PRIVATE ${CMAKE_DL_LIBS}) # Install the JavaScript output diff --git a/source/JsMaterialX/JsMaterialXCore/JsDefinition.cpp b/source/JsMaterialX/JsMaterialXCore/JsDefinition.cpp index 84ddbb8cd0..f96a460461 100644 --- a/source/JsMaterialX/JsMaterialXCore/JsDefinition.cpp +++ b/source/JsMaterialX/JsMaterialXCore/JsDefinition.cpp @@ -22,7 +22,6 @@ extern "C" .function("hasNodeGroup", &mx::NodeDef::hasNodeGroup) .function("getNodeGroup", &mx::NodeDef::getNodeGroup) .function("getImplementation", &mx::NodeDef::getImplementation) - .function("getInstantiatingShaderRefs", &mx::NodeDef::getInstantiatingShaderRefs) .function("isVersionCompatible", &mx::NodeDef::isVersionCompatible) .class_property("CATEGORY", &mx::NodeDef::CATEGORY) .class_property("NODE_ATTRIBUTE", &mx::NodeDef::NODE_ATTRIBUTE) diff --git a/source/JsMaterialX/JsMaterialXCore/JsDefinition.js b/source/JsMaterialX/JsMaterialXCore/JsDefinition.js index 45f0f1904a..47ed9fc3b6 100644 --- a/source/JsMaterialX/JsMaterialXCore/JsDefinition.js +++ b/source/JsMaterialX/JsMaterialXCore/JsDefinition.js @@ -2,7 +2,7 @@ addWrapper(function(Module, api) { /** Setup the NodeDef class */ api.NodeDef = wrapperFactory(Module.NodeDef, { - getImplementation: ['', ''] + getImplementation: [api.EMPTY_STRING] }); /** Setup the Implementation class */ @@ -10,7 +10,7 @@ addWrapper(function(Module, api) { /** Setup the TypeDef class */ api.TypeDef = wrapperFactory(Module.TypeDef, { - addMember: [''] + addMember: [api.EMPTY_STRING] }); /** Setup the Member class */ diff --git a/source/JsMaterialX/JsMaterialXCore/JsDocument.cpp b/source/JsMaterialX/JsMaterialXCore/JsDocument.cpp index ae4ec94c9d..bc92a88662 100644 --- a/source/JsMaterialX/JsMaterialXCore/JsDocument.cpp +++ b/source/JsMaterialX/JsMaterialXCore/JsDocument.cpp @@ -28,10 +28,6 @@ extern "C" .function("getNodeGraphs", &mx::Document::getNodeGraphs) .function("removeNodeGraph", &mx::Document::removeNodeGraph) .function("getMatchingPorts", &mx::Document::getMatchingPorts) - .function("addMaterial", &mx::Document::addMaterial) - .function("getMaterial", &mx::Document::getMaterial) - .function("getMaterials", &mx::Document::getMaterials) - .function("removeMaterial", &mx::Document::removeMaterial) .function("addGeomInfo", &mx::Document::addGeomInfo) .function("getGeomInfo", &mx::Document::getGeomInfo) .function("getGeomInfos", &mx::Document::getGeomInfos) @@ -67,7 +63,7 @@ extern "C" const std::string& version1 = version; const std::string &nodeGroup1 = nodeGroup; std::string &newGraphName1 = newGraphName; - return self.mx::Document::addNodeDefFromGraph(nodeGraph, nodeDefName1, node1, + return self.addNodeDefFromGraph(nodeGraph, nodeDefName1, node1, version1, isDefaultVersion, nodeGroup1, newGraphName1); })) .function("getNodeDef", &mx::Document::getNodeDef) diff --git a/source/JsMaterialX/JsMaterialXCore/JsDocument.js b/source/JsMaterialX/JsMaterialXCore/JsDocument.js index a798165bad..2108ad7edf 100644 --- a/source/JsMaterialX/JsMaterialXCore/JsDocument.js +++ b/source/JsMaterialX/JsMaterialXCore/JsDocument.js @@ -4,23 +4,22 @@ addWrapper(function(Module, api) { api.createDocument = wrapperFunction(Module.createDocument); api.Document = wrapperFactory(Module.Document, { - addNodeGraph: [''], + addNodeGraph: [api.EMPTY_STRING], getMatchingPorts: [REQUIRED], - addMaterial: [''], - addGeomInfo: ['', api.UNIVERSAL_GEOM_NAME], - getGeomAttrValue: [REQUIRED, api.UNIVERSAL_GEOM_NAME], - addLook: [''], - addLookGroup: [''], - addCollection: [''], + addGeomInfo: [api.EMPTY_STRING, api.UNIVERSAL_GEOM_NAME], + getGeomPropValue: [REQUIRED, api.UNIVERSAL_GEOM_NAME], + addLook: [api.EMPTY_STRING], + addLookGroup: [api.EMPTY_STRING], + addCollection: [api.EMPTY_STRING], getMatchingImplementations: [REQUIRED], - addPropertySet: [''], - addVariantSet: [''], - addTypeDef: [''], - addNodeDef: ['', api.DEFAULT_TYPE_STRING, ''], + addPropertySet: [api.EMPTY_STRING], + addVariantSet: [api.EMPTY_STRING], + addTypeDef: [REQUIRED], + addNodeDef: [api.EMPTY_STRING, api.DEFAULT_TYPE_STRING, api.EMPTY_STRING], getMatchingNodeDefs: [REQUIRED], - addImplementation: [''], + addImplementation: [api.EMPTY_STRING], getGeomPropValue: [REQUIRED, api.UNIVERSAL_GEOM_NAME], - addNodeDefFromGraph: [REQUIRED, REQUIRED, REQUIRED, REQUIRED, ''] + addNodeDefFromGraph: [REQUIRED, REQUIRED, REQUIRED, REQUIRED, REQUIRED, REQUIRED, REQUIRED, ''] }); }); diff --git a/source/JsMaterialX/JsMaterialXCore/JsElement.cpp b/source/JsMaterialX/JsMaterialXCore/JsElement.cpp index bd56ca7e21..3ef0563634 100644 --- a/source/JsMaterialX/JsMaterialXCore/JsElement.cpp +++ b/source/JsMaterialX/JsMaterialXCore/JsElement.cpp @@ -38,11 +38,8 @@ extern "C" .function("setFilePrefix", &mx::Element::setFilePrefix) .function("setColorSpace", &mx::Element::setColorSpace) .function("setGeomPrefix", &mx::Element::setGeomPrefix) - .function("setTarget", &mx::Element::setTarget) .function("setInheritString", &mx::Element::setInheritString) .function("setNamespace", &mx::Element::setNamespace) - .function("setVersionString", &mx::Element::setVersionString) - .function("setDefaultVersion", &mx::Element::setDefaultVersion) .function("setDocString", &mx::Element::setDocString) .function("addChildOfCategory", &mx::Element::addChildOfCategory) .function("getActiveFilePrefix", &mx::Element::getActiveFilePrefix) @@ -54,24 +51,13 @@ extern "C" .function("hasFilePrefix", &mx::Element::hasFilePrefix) .function("hasGeomPrefix", &mx::Element::hasGeomPrefix) .function("hasColorSpace", &mx::Element::hasColorSpace) - .function("hasTarget", &mx::Element::hasTarget) .function("hasInheritString", &mx::Element::hasInheritString) .function("hasNamespace", &mx::Element::hasNamespace) - .function("hasVersionString", &mx::Element::hasVersionString) .function("getFilePrefix", &mx::Element::getFilePrefix) .function("getGeomPrefix", &mx::Element::getGeomPrefix) .function("getColorSpace", &mx::Element::getColorSpace) - .function("getTarget", &mx::Element::getTarget) .function("getInheritString", &mx::Element::getInheritString) .function("getNamespace", &mx::Element::getNamespace) - .function("getVersionString", &mx::Element::getVersionString) - .function("getVersionIntegers", ems::optional_override([](mx::Element &self) { - // std::pair throws a unbound type error when envoving the function in javascript - // As a result, the std:pair will be converted into an array. - std::pair versionInts = self.mx::Element::getVersionIntegers(); - return arrayToVec((int *)&versionInts, 2); - })) - .function("getDefaultVersion", &mx::Element::getDefaultVersion) .function("getDocString", &mx::Element::getDocString) .function("getChild", &mx::Element::getChild) @@ -122,25 +108,19 @@ extern "C" .function("createStringResolver", &mx::Element::createStringResolver) .function("asString", &mx::Element::asString) .function("__str__", &mx::Element::asString) - BIND_ELEMENT_FUNC_INSTANCE(mx::BindParam) - BIND_ELEMENT_FUNC_INSTANCE(mx::BindInput) - BIND_ELEMENT_FUNC_INSTANCE(mx::BindToken) BIND_ELEMENT_FUNC_INSTANCE(mx::Collection) BIND_ELEMENT_FUNC_INSTANCE(mx::Document) BIND_ELEMENT_FUNC_INSTANCE(mx::GeomInfo) BIND_ELEMENT_FUNC_INSTANCE(mx::GeomProp) BIND_ELEMENT_FUNC_INSTANCE(mx::Implementation) BIND_ELEMENT_FUNC_INSTANCE(mx::Look) - BIND_ELEMENT_FUNC_INSTANCE(mx::Material) BIND_ELEMENT_FUNC_INSTANCE(mx::MaterialAssign) BIND_ELEMENT_FUNC_INSTANCE(mx::Node) BIND_ELEMENT_FUNC_INSTANCE(mx::NodeDef) BIND_ELEMENT_FUNC_INSTANCE(mx::NodeGraph) - BIND_ELEMENT_FUNC_INSTANCE(mx::Parameter) BIND_ELEMENT_FUNC_INSTANCE(mx::Property) BIND_ELEMENT_FUNC_INSTANCE(mx::PropertySet) BIND_ELEMENT_FUNC_INSTANCE(mx::PropertySetAssign) - BIND_ELEMENT_FUNC_INSTANCE(mx::ShaderRef) BIND_ELEMENT_FUNC_INSTANCE(mx::Token) BIND_ELEMENT_FUNC_INSTANCE(mx::TypeDef) BIND_ELEMENT_FUNC_INSTANCE(mx::Visibility) @@ -148,9 +128,6 @@ extern "C" .class_property("FILE_PREFIX_ATTRIBUTE", &mx::Element::FILE_PREFIX_ATTRIBUTE) .class_property("GEOM_PREFIX_ATTRIBUTE", &mx::Element::GEOM_PREFIX_ATTRIBUTE) .class_property("COLOR_SPACE_ATTRIBUTE", &mx::Element::COLOR_SPACE_ATTRIBUTE) - .class_property("TARGET_ATTRIBUTE", &mx::Element::TARGET_ATTRIBUTE) - .class_property("VERSION_ATTRIBUTE", &mx::Element::VERSION_ATTRIBUTE) - .class_property("DEFAULT_VERSION_ATTRIBUTE", &mx::Element::DEFAULT_VERSION_ATTRIBUTE) .class_property("INHERIT_ATTRIBUTE", &mx::Element::INHERIT_ATTRIBUTE) .class_property("NAMESPACE_ATTRIBUTE", &mx::Element::NAMESPACE_ATTRIBUTE) .class_property("DOC_ATTRIBUTE", &mx::Element::DOC_ATTRIBUTE); @@ -179,7 +156,6 @@ extern "C" .function("hasImplementationName", &mx::ValueElement::hasImplementationName) .function("getImplementationName", &mx::ValueElement::getImplementationName) .function("getValue", &mx::ValueElement::getValue) - .function("getBoundValue", &mx::ValueElement::getBoundValue) .function("getDefaultValue", &mx::ValueElement::getDefaultValue) .function("setUnit", &mx::ValueElement::setUnit) .function("hasUnit", &mx::ValueElement::hasUnit) @@ -208,7 +184,6 @@ extern "C" BIND_VALUE_ELEMENT_FUNC_INSTANCE(integer, int) BIND_VALUE_ELEMENT_FUNC_INSTANCE(boolean, bool) BIND_VALUE_ELEMENT_FUNC_INSTANCE(float, float) - BIND_VALUE_ELEMENT_FUNC_INSTANCE(color2, mx::Color2) BIND_VALUE_ELEMENT_FUNC_INSTANCE(color3, mx::Color3) BIND_VALUE_ELEMENT_FUNC_INSTANCE(color4, mx::Color4) BIND_VALUE_ELEMENT_FUNC_INSTANCE(vector2, mx::Vector2) diff --git a/source/JsMaterialX/JsMaterialXCore/JsElement.js b/source/JsMaterialX/JsMaterialXCore/JsElement.js index 341ca14033..75b2722015 100644 --- a/source/JsMaterialX/JsMaterialXCore/JsElement.js +++ b/source/JsMaterialX/JsMaterialXCore/JsElement.js @@ -4,13 +4,13 @@ addWrapper(function (Module, api) { /** Setup the Element class */ api.Element = wrapperFactory(Module.Element, { getNamePath: [null], - addChildOfCategory: [REQUIRED, '', true], - copyContentFrom: [REQUIRED, null], - getUpstreamEdge: [null, 0], - getUpstreamElement: [null, 0], + addChildOfCategory: [REQUIRED, api.EMPTY_STRING], + copyContentFrom: [REQUIRED], + getUpstreamEdge: [0], + getUpstreamElement: [0], validate: [''], - createStringResolver: ['', null, '', ''], - traverseGraph: [null], + createStringResolver: [api.EMPTY_STRING], + traverseGraph: [], }); /** Setup the TypedElement class */ @@ -20,7 +20,6 @@ addWrapper(function (Module, api) { 'setValueinteger', 'setValueboolean', 'setValuefloat', - 'setValuecolor2', 'setValuecolor3', 'setValuecolor4', 'setValuevector2', @@ -41,7 +40,7 @@ addWrapper(function (Module, api) { for (var i = 0; i < funcs.length; i++) { var name = funcs[parseInt(i, 10)]; - defaultArgs[String(name)] = [REQUIRED, '']; + defaultArgs[String(name)] = [REQUIRED, api.EMPTY_STRING]; } /** Setup the ValueElement class */ @@ -52,4 +51,6 @@ addWrapper(function (Module, api) { /** Setup the StringResolver class */ api.StringResolver = wrapperFactory(Module.StringResolver); + + api.prettyPrint = Module.prettyPrint; }); diff --git a/source/JsMaterialX/JsMaterialXCore/JsGeom.cpp b/source/JsMaterialX/JsMaterialXCore/JsGeom.cpp index 0505d979be..3089ca1382 100644 --- a/source/JsMaterialX/JsMaterialXCore/JsGeom.cpp +++ b/source/JsMaterialX/JsMaterialXCore/JsGeom.cpp @@ -41,7 +41,6 @@ extern "C" BIND_GEOMINFO_FUNC_INSTANCE(integer, int) BIND_GEOMINFO_FUNC_INSTANCE(boolean, bool) BIND_GEOMINFO_FUNC_INSTANCE(float, float) - BIND_GEOMINFO_FUNC_INSTANCE(color2, mx::Color2) BIND_GEOMINFO_FUNC_INSTANCE(color3, mx::Color3) BIND_GEOMINFO_FUNC_INSTANCE(color4, mx::Color4) BIND_GEOMINFO_FUNC_INSTANCE(vector2, mx::Vector2) diff --git a/source/JsMaterialX/JsMaterialXCore/JsInterface.cpp b/source/JsMaterialX/JsMaterialXCore/JsInterface.cpp index c2b3444336..cb2d0fbcd0 100644 --- a/source/JsMaterialX/JsMaterialXCore/JsInterface.cpp +++ b/source/JsMaterialX/JsMaterialXCore/JsInterface.cpp @@ -24,7 +24,9 @@ extern "C" .function("setChannels", &mx::PortElement::setChannels) .function("getChannels", &mx::PortElement::getChannels) .function("setConnectedNode", &mx::PortElement::setConnectedNode) - .function("getConnectedNode", &mx::PortElement::getConnectedNode); + .function("getConnectedNode", &mx::PortElement::getConnectedNode) + .function("hasOutputString", &mx::PortElement::hasOutputString) + .function("getOutputString", &mx::PortElement::getOutputString); ems::class_>("Input") .smart_ptr_constructor("Input", &std::make_shared) @@ -33,6 +35,7 @@ extern "C" .function("hasDefaultGeomPropString", &mx::Input::hasDefaultGeomPropString) .function("getDefaultGeomPropString", &mx::Input::getDefaultGeomPropString) .function("getDefaultGeomProp", &mx::Input::getDefaultGeomProp) + .function("getConnectedOutput", &mx::Input::getConnectedOutput) .class_property("CATEGORY", &mx::Input::CATEGORY); ems::class_>("Output") @@ -75,6 +78,22 @@ extern "C" .function("getActiveValueElements", &mx::InterfaceElement::getActiveValueElements) .function("getInputValue", &mx::InterfaceElement::getInputValue) + .function("setTarget", &mx::InterfaceElement::setTarget) + .function("getTarget", &mx::InterfaceElement::getTarget) + .function("hasTarget", &mx::InterfaceElement::hasTarget) + + .function("setVersionString", &mx::InterfaceElement::setVersionString) + .function("getVersionString", &mx::InterfaceElement::getVersionString) + .function("hasVersionString", &mx::InterfaceElement::hasVersionString) + .function("setDefaultVersion", &mx::InterfaceElement::setDefaultVersion) + .function("getDefaultVersion", &mx::InterfaceElement::getDefaultVersion) + .function("getVersionIntegers", ems::optional_override([](mx::InterfaceElement &self) { + // std::pair throws a unbound type error when invoking the function in javascript + // As a result, the std:pair will be converted into an array. + std::pair versionInts = self.getVersionIntegers(); + return arrayToVec((int *)&versionInts, 2); + })) + .function("setTokenValue", &mx::InterfaceElement::setTokenValue) .function("getTokenValue", &mx::InterfaceElement::getTokenValue) .function("getDeclaration", &mx::InterfaceElement::getDeclaration) @@ -82,7 +101,6 @@ extern "C" BIND_INTERFACE_TYPE_INSTANCE(integer, int) BIND_INTERFACE_TYPE_INSTANCE(boolean, bool) BIND_INTERFACE_TYPE_INSTANCE(float, float) - BIND_INTERFACE_TYPE_INSTANCE(color2, mx::Color2) BIND_INTERFACE_TYPE_INSTANCE(color3, mx::Color3) BIND_INTERFACE_TYPE_INSTANCE(color4, mx::Color4) BIND_INTERFACE_TYPE_INSTANCE(vector2, mx::Vector2) @@ -96,6 +114,9 @@ extern "C" BIND_INTERFACE_TYPE_INSTANCE(floatarray, mx::FloatVec) BIND_INTERFACE_TYPE_INSTANCE(stringarray, mx::StringVec) - .class_property("NODE_DEF_ATTRIBUTE", &mx::InterfaceElement::NODE_DEF_ATTRIBUTE); + .class_property("NODE_DEF_ATTRIBUTE", &mx::InterfaceElement::NODE_DEF_ATTRIBUTE) + .class_property("TARGET_ATTRIBUTE", &mx::InterfaceElement::TARGET_ATTRIBUTE) + .class_property("VERSION_ATTRIBUTE", &mx::InterfaceElement::VERSION_ATTRIBUTE) + .class_property("DEFAULT_VERSION_ATTRIBUTE", &mx::InterfaceElement::DEFAULT_VERSION_ATTRIBUTE); } } \ No newline at end of file diff --git a/source/JsMaterialX/JsMaterialXCore/JsInterface.js b/source/JsMaterialX/JsMaterialXCore/JsInterface.js index e8966e2d17..a8e8bf38e9 100644 --- a/source/JsMaterialX/JsMaterialXCore/JsInterface.js +++ b/source/JsMaterialX/JsMaterialXCore/JsInterface.js @@ -14,7 +14,6 @@ addWrapper(function(Module, api) { 'setInputValueinteger', 'setInputValueboolean', 'setInputValuefloat', - 'setInputValuecolor2', 'setInputValuecolor3', 'setInputValuecolor4', 'setInputValuevector2', @@ -30,16 +29,16 @@ addWrapper(function(Module, api) { ]; var defaultArgs = { - addInput: [api.DEFAULT_TYPE_STRING, api.DEFAULT_TYPE_STRING], - addOutput: ['', api.DEFAULT_TYPE_STRING], - addToken: [''], - getInputValue: [REQUIRED, ''], - getDeclaration: [''] + addInput: [api.EMPTY_STRING, api.DEFAULT_TYPE_STRING], + addOutput: [api.EMPTY_STRING, api.DEFAULT_TYPE_STRING], + addToken: [api.EMPTY_STRING], + getInputValue: [REQUIRED, api.EMPTY_STRING], + getDeclaration: [api.EMPTY_STRING] }; for (var i = 0; i < funcs.length; i++) { var name = funcs[parseInt(i, 10)]; - defaultArgs[String(name)] = [REQUIRED, REQUIRED, '']; + defaultArgs[String(name)] = [REQUIRED, REQUIRED, api.EMPTY_STRING]; } /** Setup the InterfaceElement class */ diff --git a/source/JsMaterialX/JsMaterialXCore/JsLook.cpp b/source/JsMaterialX/JsMaterialXCore/JsLook.cpp index e96d39d3c6..13b37147a4 100644 --- a/source/JsMaterialX/JsMaterialXCore/JsLook.cpp +++ b/source/JsMaterialX/JsMaterialXCore/JsLook.cpp @@ -48,11 +48,11 @@ extern "C" .smart_ptr>("LookGroup") .function("getLooks", &mx::LookGroup::getLooks) .function("setLooks", &mx::LookGroup::setLooks) - .function("getActiveLook", &mx::LookGroup::getActiveLook) - .function("setActiveLook", &mx::LookGroup::setActiveLook) + .function("getEnabledLooksString", &mx::LookGroup::getEnabledLooksString) + .function("setEnabledLooks", &mx::LookGroup::setEnabledLooks) .class_property("CATEGORY", &mx::LookGroup::CATEGORY) .class_property("LOOKS_ATTRIBUTE", &mx::LookGroup::LOOKS_ATTRIBUTE) - .class_property("ACTIVE_ATTRIBUTE", &mx::LookGroup::ACTIVE_ATTRIBUTE); + .class_property("ENABLED_ATTRIBUTE", &mx::LookGroup::ENABLED_ATTRIBUTE); ems::class_>("MaterialAssign") .smart_ptr_constructor("MaterialAssign", &std::make_shared) @@ -63,7 +63,6 @@ extern "C" .function("setExclusive", &mx::MaterialAssign::setExclusive) .function("getExclusive", &mx::MaterialAssign::getExclusive) .function("getReferencedMaterial", &mx::MaterialAssign::getReferencedMaterial) - .function("getReferencedMaterialNode", &mx::MaterialAssign::getReferencedMaterialNode) .class_property("CATEGORY", &mx::MaterialAssign::CATEGORY); ems::class_>("Visibility") diff --git a/source/JsMaterialX/JsMaterialXCore/JsLook.js b/source/JsMaterialX/JsMaterialXCore/JsLook.js index 264370bcde..9885fb0f7d 100644 --- a/source/JsMaterialX/JsMaterialXCore/JsLook.js +++ b/source/JsMaterialX/JsMaterialXCore/JsLook.js @@ -2,11 +2,11 @@ addWrapper(function(Module, api) { /** Setup the Look class */ api.Look = wrapperFactory(Module.Look, { - addMaterialAssign: ['', ''], - addPropertyAssign: [''], - addPropertySetAssign: [''], - addVariantAssign: [''], - addVisibility: [''] + addMaterialAssign: [api.EMPTY_STRING, api.EMPTY_STRING], + addPropertyAssign: [api.EMPTY_STRING], + addPropertySetAssign: [api.EMPTY_STRING], + addVariantAssign: [api.EMPTY_STRING], + addVisibility: [api.EMPTY_STRING] }); /** Setup the LookGroup class */ diff --git a/source/JsMaterialX/JsMaterialXCore/JsNode.js b/source/JsMaterialX/JsMaterialXCore/JsNode.js index 77b794e7a3..e1a077fd30 100644 --- a/source/JsMaterialX/JsMaterialXCore/JsNode.js +++ b/source/JsMaterialX/JsMaterialXCore/JsNode.js @@ -2,17 +2,17 @@ addWrapper(function(Module, api) { /** Setup the Node class */ api.Node = wrapperFactory(Module.Node, { - getNodeDef: [''], - getImplementation: ['', ''] + getNodeDef: [api.EMPTY_STRING], + getImplementation: [api.EMPTY_STRING] }); /** Setup the GraphElement class */ api.GraphElement = wrapperFactory(Module.GraphElement, { - addNode: [REQUIRED, '', api.DEFAULT_TYPE_STRING], - addNodeInstance: [REQUIRED, ''], - getNodes: [''], - addBackdrop: [''], - flattenSubgraphs: [''] + addNode: [REQUIRED, api.EMPTY_STRING, api.DEFAULT_TYPE_STRING], + addNodeInstance: [REQUIRED, api.EMPTY_STRING], + getNodes: [api.EMPTY_STRING], + addBackdrop: [api.EMPTY_STRING], + flattenSubgraphs: [api.EMPTY_STRING, null] }); /** Setup the NodeGraph class */ diff --git a/source/JsMaterialX/JsMaterialXCore/JsProperty.cpp b/source/JsMaterialX/JsMaterialXCore/JsProperty.cpp index ba77864995..7eddc6fab5 100644 --- a/source/JsMaterialX/JsMaterialXCore/JsProperty.cpp +++ b/source/JsMaterialX/JsMaterialXCore/JsProperty.cpp @@ -46,7 +46,6 @@ extern "C" BIND_PROPERTYSET_TYPE_INSTANCE(integer, int) BIND_PROPERTYSET_TYPE_INSTANCE(boolean, bool) BIND_PROPERTYSET_TYPE_INSTANCE(float, float) - BIND_PROPERTYSET_TYPE_INSTANCE(color2, mx::Color2) BIND_PROPERTYSET_TYPE_INSTANCE(color3, mx::Color3) BIND_PROPERTYSET_TYPE_INSTANCE(color4, mx::Color4) BIND_PROPERTYSET_TYPE_INSTANCE(vector2, mx::Vector2) diff --git a/source/JsMaterialX/JsMaterialXCore/JsRegisteredVectors.cpp b/source/JsMaterialX/JsMaterialXCore/JsRegisteredVectors.cpp index 43723c5256..e3cfbbd173 100644 --- a/source/JsMaterialX/JsMaterialXCore/JsRegisteredVectors.cpp +++ b/source/JsMaterialX/JsMaterialXCore/JsRegisteredVectors.cpp @@ -28,11 +28,9 @@ extern "C" ems::register_vector("vector"); ems::register_vector("vector"); ems::register_vector("vector"); - ems::register_vector("vector"); ems::register_vector("vector"); ems::register_vector("vector"); ems::register_vector("vector"); - ems::register_vector("vector"); ems::register_vector("vector"); ems::register_vector("vector"); ems::register_vector("vector"); @@ -45,10 +43,6 @@ extern "C" ems::register_vector("vector"); ems::register_vector("vector"); ems::register_vector("vector"); - ems::register_vector("vector"); - ems::register_vector("vector"); - ems::register_vector("vector"); - ems::register_vector("vector"); ems::register_vector("vector"); ems::register_vector("vector"); ems::register_vector("vector"); diff --git a/source/JsMaterialX/JsMaterialXCore/JsTraversal.cpp b/source/JsMaterialX/JsMaterialXCore/JsTraversal.cpp index 98b6bc996d..52fa09bb44 100644 --- a/source/JsMaterialX/JsMaterialXCore/JsTraversal.cpp +++ b/source/JsMaterialX/JsMaterialXCore/JsTraversal.cpp @@ -36,7 +36,7 @@ extern "C" })); ems::class_("GraphIterator") - .smart_ptr_constructor("GraphIterator", &std::make_shared) + .smart_ptr_constructor("GraphIterator", &std::make_shared) .function("getDownstreamElement", &mx::GraphIterator::getDownstreamElement) .function("getConnectingElement", &mx::GraphIterator::getConnectingElement) .function("getUpstreamElement", &mx::GraphIterator::getUpstreamElement) diff --git a/source/JsMaterialX/JsMaterialXCore/JsTypes.cpp b/source/JsMaterialX/JsMaterialXCore/JsTypes.cpp index 121bd4920f..3c90b89408 100644 --- a/source/JsMaterialX/JsMaterialXCore/JsTypes.cpp +++ b/source/JsMaterialX/JsMaterialXCore/JsTypes.cpp @@ -69,11 +69,6 @@ extern "C" .constructor() BIND_VECTOR_SUBCLASS(mx::Vector4); - ems::class_>("Color2") - .constructor<>() - .constructor() - BIND_VECTOR_SUBCLASS(mx::Color2); - ems::class_>("Color3") .constructor<>() .constructor() @@ -113,6 +108,9 @@ extern "C" ems::function("DEFAULT_TYPE_STRING", ems::optional_override([]() { return mx::DEFAULT_TYPE_STRING; })); + ems::function("EMPTY_STRING", ems::optional_override([]() { + return mx::EMPTY_STRING; + })); ems::function("FILENAME_TYPE_STRING", ems::optional_override([]() { return mx::FILENAME_TYPE_STRING; })); diff --git a/source/JsMaterialX/JsMaterialXCore/JsTypes.js b/source/JsMaterialX/JsMaterialXCore/JsTypes.js index 6cb4e1e1f2..a2f9496a01 100644 --- a/source/JsMaterialX/JsMaterialXCore/JsTypes.js +++ b/source/JsMaterialX/JsMaterialXCore/JsTypes.js @@ -3,12 +3,12 @@ addWrapper(function(Module, api) { api.Vector2 = wrapperFactory(Module.Vector2); api.Vector3 = wrapperFactory(Module.Vector3); api.Vector4 = wrapperFactory(Module.Vector4); - api.Color2 = wrapperFactory(Module.Color2); api.Color3 = wrapperFactory(Module.Color3); api.Color4 = wrapperFactory(Module.Color4); api.Matrix33 = wrapperFactory(Module.Matrix33); api.Matrix44 = wrapperFactory(Module.Matrix44); api.DEFAULT_TYPE_STRING = Module.DEFAULT_TYPE_STRING(); + api.EMPTY_STRING = Module.EMPTY_STRING(); api.FILENAME_TYPE_STRING = Module.FILENAME_TYPE_STRING(); api.GEOMNAME_TYPE_STRING = Module.GEOMNAME_TYPE_STRING(); api.SURFACE_SHADER_TYPE_STRING = Module.SURFACE_SHADER_TYPE_STRING(); diff --git a/source/JsMaterialX/JsMaterialXCore/JsUtil.js b/source/JsMaterialX/JsMaterialXCore/JsUtil.js index 1875f65dde..747688369e 100644 --- a/source/JsMaterialX/JsMaterialXCore/JsUtil.js +++ b/source/JsMaterialX/JsMaterialXCore/JsUtil.js @@ -1,11 +1,11 @@ // jsUtil addWrapper(function(Module, api) { + // TODO: Wrap functions and provide default args api.getVersionString = Module.getVersionString; api.createValidName = function(str, char) { return Module.createValidName(str, char.charCodeAt(0)); }; - api.makeVersionString = Module.makeVersionString; api.isValidName = Module.isValidName; api.incrementName = Module.incrementName; @@ -13,6 +13,8 @@ addWrapper(function(Module, api) { var vec = Module.getVersionIntegers(); return vecToArray(vec); }; + + // TODO: Do we really need to map such helper functions? JS already has a String.split method. api.splitString = function(str, spl) { var vecStr = Module.splitString(str, spl); var size = vecStr.size(); @@ -24,5 +26,4 @@ addWrapper(function(Module, api) { }; api.replaceSubstrings = Module.replaceSubstrings; - api.prettyPrint = Module.prettyPrint; }); diff --git a/source/JsMaterialX/JsMaterialXCore/JsValue.cpp b/source/JsMaterialX/JsMaterialXCore/JsValue.cpp index a7ca9b0b7b..dd47e66b7b 100644 --- a/source/JsMaterialX/JsMaterialXCore/JsValue.cpp +++ b/source/JsMaterialX/JsMaterialXCore/JsValue.cpp @@ -29,7 +29,6 @@ extern "C" BIND_TYPE_INSTANCE(integer, int) BIND_TYPE_INSTANCE(boolean, bool) BIND_TYPE_INSTANCE(float, float) - BIND_TYPE_INSTANCE(color2, mx::Color2) BIND_TYPE_INSTANCE(color3, mx::Color3) BIND_TYPE_INSTANCE(color4, mx::Color4) BIND_TYPE_INSTANCE(vector2, mx::Vector2) diff --git a/source/JsMaterialX/JsMaterialXCore/JsValue.js b/source/JsMaterialX/JsMaterialXCore/JsValue.js index df7cc12e71..22cb101eb9 100644 --- a/source/JsMaterialX/JsMaterialXCore/JsValue.js +++ b/source/JsMaterialX/JsMaterialXCore/JsValue.js @@ -4,7 +4,6 @@ addWrapper(function(Module, api) { 'TypedValue_integer', 'TypedValue_boolean', 'TypedValue_float', - 'TypedValue_color2', 'TypedValue_color3', 'TypedValue_color4', 'TypedValue_vector2', diff --git a/source/JsMaterialX/JsMaterialXFormat/JsXmlIo.cpp b/source/JsMaterialX/JsMaterialXFormat/JsXmlIo.cpp index 404872a325..05137adb18 100644 --- a/source/JsMaterialX/JsMaterialXFormat/JsXmlIo.cpp +++ b/source/JsMaterialX/JsMaterialXFormat/JsXmlIo.cpp @@ -15,8 +15,7 @@ extern "C" ems::class_("XmlReadOptions") .constructor<>() .property("readXIncludeFunction", &mx::XmlReadOptions::readXIncludeFunction) - .property("parentXIncludes", &mx::XmlReadOptions::parentXIncludes) - .property("applyFutureUpdates", &mx::XmlReadOptions::applyFutureUpdates); + .property("parentXIncludes", &mx::XmlReadOptions::parentXIncludes); ems::class_("XmlWriteOptions") .constructor<>() .property("writeXIncludeEnable", &mx::XmlWriteOptions::writeXIncludeEnable) diff --git a/source/JsMaterialX/initMaterialX.js b/source/JsMaterialX/initMaterialX.js index 73e3011342..94244bf89e 100644 --- a/source/JsMaterialX/initMaterialX.js +++ b/source/JsMaterialX/initMaterialX.js @@ -56,8 +56,8 @@ function argGen(args, defaultArgs = []) { function catchPtrError(func, handle, args, defaultArgs) { var funcName = func.name; + var args1 = argGen(args, defaultArgs); try { - var args1 = argGen(args, defaultArgs); return func.apply(handle, args1); } catch (exception) { throw new Error(`${funcName}: ${Module.getExceptionMessage(exception)}`); diff --git a/source/JsMaterialX/test/basics.spec.js b/source/JsMaterialX/test/basics.spec.js index 172fe8542c..63bb65a59a 100644 --- a/source/JsMaterialX/test/basics.spec.js +++ b/source/JsMaterialX/test/basics.spec.js @@ -9,7 +9,6 @@ describe('Basics', () => { integer: '1', boolean: 'true', float: '1.1', - color2: '0.1, 0.2', color3: '0.1, 0.2, 0.3', color4: '0.1, 0.2, 0.3, 0.4', vector2: '1.1, 2.1', diff --git a/source/JsMaterialX/test/codeExamples.spec.js b/source/JsMaterialX/test/codeExamples.spec.js index 6db9928a50..777e8fe1e5 100644 --- a/source/JsMaterialX/test/codeExamples.spec.js +++ b/source/JsMaterialX/test/codeExamples.spec.js @@ -84,9 +84,7 @@ describe('Code Examples', () => { // Read a document from disk. const doc = mx.createDocument(); - const readOptions = new mx.XmlReadOptions(); - readOptions.applyFutureUpdates = true; - mx.readFromXmlString(doc, xmlStr, readOptions); + mx.readFromXmlString(doc, xmlStr); // Traverse the document tree in depth-first order. const elements = doc.traverseTree(); @@ -110,7 +108,7 @@ describe('Code Examples', () => { } elem = elements.next(); } - expect(elementCount).to.equal(23); + expect(elementCount).to.equal(21); expect(nodeCount).to.equal(5); expect(fileCount).to.equal(1); }); diff --git a/source/JsMaterialX/test/package.json b/source/JsMaterialX/test/package.json index ff88849eb3..d3b163d4dc 100644 --- a/source/JsMaterialX/test/package.json +++ b/source/JsMaterialX/test/package.json @@ -6,8 +6,9 @@ "scripts": { "clean": "node ./node_modules/rimraf/bin.js ./_build/", "copyBuild": "node ./node_modules/copyfiles/copyfiles -f ../../../build/source/JsMaterialX/JsMaterialX* _build", + "mocha": "mocha '*.spec.js' --require @babel/register --timeout 5000", "pretest": "npm run clean && npm run copyBuild", - "test": "mocha '*.spec.js' --require @babel/register --timeout 5000" + "test": "npm run mocha" }, "keywords": [], "author": "",