diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index e931e6a60b..b42ef2fe7b 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -198,7 +198,7 @@ jobs:
run: find source \( -name *.h -o -name *.cpp -o -name *.mm -o -name *.inl \) ! -path "*/External/*" ! -path "*/NanoGUI/*" | xargs clang-format -i --verbose
- name: CMake Generate
- run: cmake -S . -B build -DMATERIALX_BUILD_PYTHON=ON -DMATERIALX_BUILD_VIEWER=ON -DMATERIALX_BUILD_GRAPH_EDITOR=ON -DMATERIALX_TEST_RENDER=OFF -DMATERIALX_WARNINGS_AS_ERRORS=ON ${{matrix.cmake_config}}
+ run: cmake -S . -B build -DMATERIALX_BUILD_PYTHON=ON -DMATERIALX_BUILD_VIEWER=ON -DMATERIALX_BUILD_GRAPH_EDITOR=ON -DMATERIALX_BUILD_TESTS=ON -DMATERIALX_TEST_RENDER=OFF -DMATERIALX_WARNINGS_AS_ERRORS=ON ${{matrix.cmake_config}}
- name: CMake Build
run: cmake --build build --target install --config Release --parallel 2
diff --git a/CMakeLists.txt b/CMakeLists.txt
index e975cf6df9..c8e059ce0b 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -44,10 +44,11 @@ option(MATERIALX_BUILD_GEN_MDL "Build the MDL shader generator back-end." ON)
option(MATERIALX_BUILD_GEN_MSL "Build the MSL shader generator back-end." ON)
option(MATERIALX_BUILD_RENDER "Build the MaterialX Render modules." ON)
option(MATERIALX_BUILD_OIIO "Build OpenImageIO support for MaterialXRender." OFF)
-option(MATERIALX_BUILD_TESTS "Build unit tests." ON)
+option(MATERIALX_BUILD_TESTS "Build unit tests." OFF)
option(MATERIALX_BUILD_BENCHMARK_TESTS "Build benchmark tests." OFF)
option(MATERIALX_BUILD_SHARED_LIBS "Build MaterialX libraries as shared rather than static." OFF)
+option(MATERIALX_BUILD_MONOLITHIC "Build a single monolithic MaterialX library." OFF)
option(MATERIALX_PYTHON_LTO "Enable link-time optimizations for MaterialX Python." ON)
option(MATERIALX_INSTALL_PYTHON "Install the MaterialX Python package as a third-party library when the install target is built." ON)
option(MATERIALX_INSTALL_RESOURCES "Install the resources folder when building render modules." ON)
@@ -61,6 +62,7 @@ option(MATERIALX_BUILD_IOS "Build MaterialX for iOS." OFF)
if (MATERIALX_BUILD_IOS)
set(CMAKE_SYSTEM_NAME iOS)
add_definitions(-DTARGET_OS_IOS=1)
+ set(MATERIALX_BUILD_MONOLITHIC ON)
set(MATERIALX_BUILD_PYTHON OFF)
set(MATERIALX_BUILD_VIEWER OFF)
set(MATERIALX_BUILD_GRAPH_EDITOR OFF)
@@ -71,9 +73,6 @@ if (MATERIALX_BUILD_IOS)
endif()
if (MATERIALX_BUILD_JS)
- set(MATERIALX_BUILD_GEN_OSL OFF)
- set(MATERIALX_BUILD_GEN_MSL OFF)
- set(MATERIALX_BUILD_GEN_MDL OFF)
set(MATERIALX_BUILD_RENDER OFF)
set(MATERIALX_BUILD_TESTS OFF)
endif()
@@ -135,9 +134,9 @@ mark_as_advanced(MATERIALX_BUILD_GEN_MDL)
mark_as_advanced(MATERIALX_BUILD_GEN_MSL)
mark_as_advanced(MATERIALX_BUILD_RENDER)
mark_as_advanced(MATERIALX_BUILD_OIIO)
-mark_as_advanced(MATERIALX_BUILD_TESTS)
mark_as_advanced(MATERIALX_BUILD_BENCHMARK_TESTS)
mark_as_advanced(MATERIALX_BUILD_SHARED_LIBS)
+mark_as_advanced(MATERIALX_BUILD_MONOLITHIC)
mark_as_advanced(MATERIALX_NAMESPACE_SUFFIX)
mark_as_advanced(MATERIALX_LIBNAME_SUFFIX)
mark_as_advanced(MATERIALX_PYTHON_LTO)
@@ -267,6 +266,100 @@ function(assign_source_group prefix)
endforeach()
endfunction(assign_source_group)
+function(mx_add_library MATERIALX_MODULE_NAME)
+ set(options ADD_OBJECTIVE_C_CODE)
+ set(oneValueArgs EXPORT_DEFINE)
+ set(multiValueArgs
+ SOURCE_FILES
+ HEADER_FILES
+ LIBRARIES)
+ cmake_parse_arguments(args
+ "${options}"
+ "${oneValueArgs}"
+ "${multiValueArgs}"
+ ${ARGN})
+
+ if (APPLE AND args_ADD_OBJECTIVE_C_CODE)
+ file(GLOB_RECURSE materialx_source_oc "${CMAKE_CURRENT_SOURCE_DIR}/*.m*")
+ set_source_files_properties(${materialx_source_oc} PROPERTIES
+ COMPILE_FLAGS "-x objective-c++")
+ set(args_SOURCE_FILES ${args_SOURCE_FILES} ${materialx_source_oc})
+ endif()
+
+ assign_source_group("Source Files" ${args_SOURCE_FILES})
+ assign_source_group("Header Files" ${args_HEADER_FILES})
+
+ if (NOT MATERIALX_BUILD_MONOLITHIC)
+ set(TARGET_NAME ${MATERIALX_MODULE_NAME})
+ add_library(${TARGET_NAME} ${args_SOURCE_FILES} ${args_HEADER_FILES})
+
+ # Create version resource
+ if(MATERIALX_BUILD_SHARED_LIBS AND MSVC)
+ configure_file(${CMAKE_SOURCE_DIR}/cmake/modules/MaterialXVersion.rc.in ${CMAKE_CURRENT_BINARY_DIR}/version.rc)
+ target_sources(${TARGET_NAME} PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/version.rc)
+ endif()
+
+ target_link_libraries(
+ ${TARGET_NAME}
+ ${args_LIBRARIES}
+ ${CMAKE_DL_LIBS})
+
+ target_include_directories(${TARGET_NAME}
+ PUBLIC
+ $
+ $
+ PRIVATE
+ ${EXTERNAL_INCLUDE_DIRS})
+
+ set_target_properties(
+ ${TARGET_NAME} PROPERTIES
+ OUTPUT_NAME ${MATERIALX_MODULE_NAME}${MATERIALX_LIBNAME_SUFFIX}
+ COMPILE_FLAGS "${EXTERNAL_COMPILE_FLAGS}"
+ LINK_FLAGS "${EXTERNAL_LINK_FLAGS}"
+ INSTALL_RPATH "${MATERIALX_SAME_DIR_RPATH}"
+ VERSION "${MATERIALX_LIBRARY_VERSION}"
+ SOVERSION "${MATERIALX_MAJOR_VERSION}")
+ else()
+ set(TARGET_NAME ${MATERIALX_MONOLITHIC_TARGET})
+
+ target_sources(${TARGET_NAME} PRIVATE ${args_SOURCE_FILES})
+ target_sources(${TARGET_NAME} PRIVATE ${args_HEADER_FILES})
+
+ add_library(${MATERIALX_MODULE_NAME} ALIAS ${MATERIALX_MONOLITHIC_TARGET})
+
+ # Store the aliased MaterialX modules name to create cmake export aliases later.
+ set_property(GLOBAL APPEND PROPERTY MATERIALX_MODULES ${MATERIALX_MODULE_NAME})
+ endif()
+
+ target_include_directories(${TARGET_NAME} PUBLIC
+ $
+ $)
+
+ target_compile_definitions(${TARGET_NAME} PRIVATE "-D${args_EXPORT_DEFINE}")
+
+ if(NOT SKBUILD)
+ if(NOT MATERIALX_BUILD_MONOLITHIC)
+ install(TARGETS ${MATERIALX_MODULE_NAME}
+ EXPORT MaterialX
+ ARCHIVE DESTINATION ${MATERIALX_INSTALL_LIB_PATH}
+ LIBRARY DESTINATION ${MATERIALX_INSTALL_LIB_PATH}
+ RUNTIME DESTINATION bin)
+ endif()
+
+ install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/"
+ DESTINATION ${MATERIALX_INSTALL_INCLUDE_PATH}/${MATERIALX_MODULE_NAME}/ MESSAGE_NEVER
+ FILES_MATCHING
+ PATTERN "*.h*"
+ PATTERN "*.inl")
+
+ install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE}/${MATERIALX_MODULE_NAME}.pdb"
+ DESTINATION "${MATERIALX_INSTALL_LIB_PATH}/" OPTIONAL)
+ endif()
+
+ # pass TARGET_NAME back to call site - so caller can modify the build target
+ set(TARGET_NAME ${TARGET_NAME} PARENT_SCOPE)
+endfunction()
+
# Propagate shared library setting to NanoGUI:
if(MATERIALX_BUILD_SHARED_LIBS)
set(BUILD_SHARED_LIBS "ON")
@@ -274,6 +367,12 @@ else()
set(BUILD_SHARED_LIBS "OFF")
endif()
+# Build a monolithic target - needs to be added before the other build targets that may be included.
+if (MATERIALX_BUILD_MONOLITHIC)
+ set(MATERIALX_MONOLITHIC_TARGET MaterialX)
+ add_subdirectory(source)
+endif()
+
# Add core subdirectories
add_subdirectory(source/MaterialXCore)
add_subdirectory(source/MaterialXFormat)
@@ -359,6 +458,21 @@ if(NOT SKBUILD)
set(MATERIALX_GEN_CONFIG_PATH "${MATERIALX_INSTALL_LIB_PATH}/cmake/${CMAKE_PROJECT_NAME}")
include(CMakePackageConfigHelpers)
+
+ if (MATERIALX_BUILD_MONOLITHIC)
+ # export aliases for the MaterialX modules built in this monolithic build to be
+ # less disruptive to downstream probjects.
+ get_property(MATERIALX_MODULES GLOBAL PROPERTY MATERIALX_MODULES)
+ set(EXPORT_ALIASES "# Aliased targets for the the monolithic build\n")
+ foreach (MODULE ${MATERIALX_MODULES})
+ string(APPEND EXPORT_ALIASES "add_library(${MODULE} ALIAS MaterialX)\n")
+ endforeach ()
+
+ if (NOT MATERIALX_MODULES)
+ message(FATAL_ERROR "Building MaterialX as a monolithic library, but did not find any libraries to alias.")
+ endif()
+ endif()
+
configure_package_config_file(cmake/modules/MaterialXConfig.cmake.in
${CMAKE_BINARY_DIR}/cmake/${CMAKE_PROJECT_NAME}Config.cmake
INSTALL_DESTINATION "${MATERIALX_GEN_CONFIG_PATH}"
diff --git a/cmake/modules/MaterialXConfig.cmake.in b/cmake/modules/MaterialXConfig.cmake.in
index e1598087bf..0d631a9d31 100644
--- a/cmake/modules/MaterialXConfig.cmake.in
+++ b/cmake/modules/MaterialXConfig.cmake.in
@@ -27,3 +27,5 @@ if(@MATERIALX_BUILD_RENDER@ AND @MATERIALX_INSTALL_RESOURCES@)
endif()
check_required_components(@CMAKE_PROJECT_NAME@)
+
+@EXPORT_ALIASES@
diff --git a/javascript/MaterialXTest/browser/esslShaderGenerator.spec.js b/javascript/MaterialXTest/browser/esslShaderGenerator.spec.js
deleted file mode 100644
index dceba112e0..0000000000
--- a/javascript/MaterialXTest/browser/esslShaderGenerator.spec.js
+++ /dev/null
@@ -1,83 +0,0 @@
-// MaterialX is served through a script tag in the test setup.
-
-function createStandardSurfaceMaterial(mx)
-{
- const doc = mx.createDocument();
- const ssName = 'SR_default';
- const ssNode = doc.addChildOfCategory('standard_surface', ssName);
- ssNode.setType('surfaceshader');
- const smNode = doc.addChildOfCategory('surfacematerial', 'Default');
- smNode.setType('material');
- const shaderElement = smNode.addInput('surfaceshader');
- shaderElement.setType('surfaceshader');
- shaderElement.setNodeName(ssName);
- expect(doc.validate()).to.be.true;
- return doc;
-}
-
-describe('Generate ESSL Shaders', function ()
-{
- let mx;
- const canvas = document.createElement('canvas');
- const gl = canvas.getContext('webgl2');
-
- this.timeout(60000);
-
- before(async function ()
- {
- mx = await MaterialX();
- });
-
- it('Compile Shaders', () =>
- {
- const doc = createStandardSurfaceMaterial(mx);
-
- const gen = new mx.EsslShaderGenerator();
- const genContext = new mx.GenContext(gen);
- const stdlib = mx.loadStandardLibraries(genContext);
-
- doc.importLibrary(stdlib);
-
- const elem = mx.findRenderableElement(doc);
- try
- {
- const mxShader = gen.generate(elem.getNamePath(), elem, genContext);
-
- const fShader = mxShader.getSourceCode("pixel");
- const vShader = mxShader.getSourceCode("vertex");
-
- const glVertexShader = gl.createShader(gl.VERTEX_SHADER);
- gl.shaderSource(glVertexShader, vShader);
- gl.compileShader(glVertexShader);
- if (!gl.getShaderParameter(glVertexShader, gl.COMPILE_STATUS))
- {
- console.error("-------- VERTEX SHADER FAILED TO COMPILE: ----------------");
- console.error("--- VERTEX SHADER LOG ---");
- console.error(gl.getShaderInfoLog(glVertexShader));
- console.error("--- VERTEX SHADER START ---");
- console.error(fShader);
- console.error("--- VERTEX SHADER END ---");
- }
- expect(gl.getShaderParameter(glVertexShader, gl.COMPILE_STATUS)).to.equal(true);
-
- const glPixelShader = gl.createShader(gl.FRAGMENT_SHADER);
- gl.shaderSource(glPixelShader, fShader);
- gl.compileShader(glPixelShader);
- if (!gl.getShaderParameter(glPixelShader, gl.COMPILE_STATUS))
- {
- console.error("-------- PIXEL SHADER FAILED TO COMPILE: ----------------");
- console.error("--- PIXEL SHADER LOG ---");
- console.error(gl.getShaderInfoLog(glPixelShader));
- console.error("--- PIXEL SHADER START ---");
- console.error(fShader);
- console.error("--- PIXEL SHADER END ---");
- }
- expect(gl.getShaderParameter(glPixelShader, gl.COMPILE_STATUS)).to.equal(true);
- }
- catch (errPtr)
- {
- console.error("-------- Failed code generation: ----------------");
- console.error(mx.getExceptionMessage(errPtr));
- }
- });
-});
diff --git a/javascript/MaterialXTest/browser/shaderGenerator.spec.js b/javascript/MaterialXTest/browser/shaderGenerator.spec.js
new file mode 100644
index 0000000000..df44297d46
--- /dev/null
+++ b/javascript/MaterialXTest/browser/shaderGenerator.spec.js
@@ -0,0 +1,104 @@
+// MaterialX is served through a script tag in the test setup.
+
+function createStandardSurfaceMaterial(mx)
+{
+ const doc = mx.createDocument();
+ const ssName = 'SR_default';
+ const ssNode = doc.addChildOfCategory('standard_surface', ssName);
+ ssNode.setType('surfaceshader');
+ const smNode = doc.addChildOfCategory('surfacematerial', 'Default');
+ smNode.setType('material');
+ const shaderElement = smNode.addInput('surfaceshader');
+ shaderElement.setType('surfaceshader');
+ shaderElement.setNodeName(ssName);
+ expect(doc.validate()).to.be.true;
+ return doc;
+}
+
+describe('Generate Shaders', function ()
+{
+ let mx;
+ const canvas = document.createElement('canvas');
+ const gl = canvas.getContext('webgl2');
+
+ this.timeout(60000);
+
+ before(async function ()
+ {
+ mx = await MaterialX();
+ });
+
+ it('Compile Shaders', () =>
+ {
+ const doc = createStandardSurfaceMaterial(mx);
+
+ const generators = []
+ if (typeof mx.EsslShaderGenerator != 'undefined')
+ generators.push(new mx.EsslShaderGenerator());
+ if (typeof mx.GlslShaderGenerator != 'undefined')
+ generators.push(new mx.GlslShaderGenerator());
+ if (typeof mx.MslShaderGenerator != 'undefined')
+ generators.push(new mx.MslShaderGenerator());
+ if (typeof mx.OslShaderGenerator != 'undefined')
+ generators.push(new mx.OslShaderGenerator());
+ if (typeof mx.VkShaderGenerator != 'undefined')
+ generators.push(new mx.VkShaderGenerator());
+ if (typeof mx.MdlShaderGenerator != 'undefined')
+ generators.push(new mx.MdlShaderGenerator());
+
+ const elem = mx.findRenderableElement(doc);
+ for (let gen of generators)
+ {
+ console.log("Generating shader for " + gen.getTarget() + "...");
+
+ const genContext = new mx.GenContext(gen);
+ const stdlib = mx.loadStandardLibraries(genContext);
+ doc.importLibrary(stdlib);
+
+ try
+ {
+ const mxShader = gen.generate(elem.getNamePath(), elem, genContext);
+
+ const fShader = mxShader.getSourceCode("pixel");
+
+ if (gen.getTarget() == 'essl')
+ {
+ const vShader = mxShader.getSourceCode("vertex");
+
+ const glVertexShader = gl.createShader(gl.VERTEX_SHADER);
+ gl.shaderSource(glVertexShader, vShader);
+ gl.compileShader(glVertexShader);
+ if (!gl.getShaderParameter(glVertexShader, gl.COMPILE_STATUS))
+ {
+ console.error("-------- VERTEX SHADER FAILED TO COMPILE: ----------------");
+ console.error("--- VERTEX SHADER LOG ---");
+ console.error(gl.getShaderInfoLog(glVertexShader));
+ console.error("--- VERTEX SHADER START ---");
+ console.error(fShader);
+ console.error("--- VERTEX SHADER END ---");
+ }
+ expect(gl.getShaderParameter(glVertexShader, gl.COMPILE_STATUS)).to.equal(true);
+
+ const glPixelShader = gl.createShader(gl.FRAGMENT_SHADER);
+ gl.shaderSource(glPixelShader, fShader);
+ gl.compileShader(glPixelShader);
+ if (!gl.getShaderParameter(glPixelShader, gl.COMPILE_STATUS))
+ {
+ console.error("-------- PIXEL SHADER FAILED TO COMPILE: ----------------");
+ console.error("--- PIXEL SHADER LOG ---");
+ console.error(gl.getShaderInfoLog(glPixelShader));
+ console.error("--- PIXEL SHADER START ---");
+ console.error(fShader);
+ console.error("--- PIXEL SHADER END ---");
+ }
+ expect(gl.getShaderParameter(glPixelShader, gl.COMPILE_STATUS)).to.equal(true);
+ }
+ }
+ catch (errPtr)
+ {
+ console.error("-------- Failed code generation: ----------------");
+ console.error(mx.getExceptionMessage(errPtr));
+ }
+ }
+ });
+});
diff --git a/libraries/bxdf/open_pbr_surface.mtlx b/libraries/bxdf/open_pbr_surface.mtlx
index d0c7d84d08..b4a6fac5a3 100644
--- a/libraries/bxdf/open_pbr_surface.mtlx
+++ b/libraries/bxdf/open_pbr_surface.mtlx
@@ -201,6 +201,7 @@
+
diff --git a/libraries/pbrlib/genglsl/lib/mx_generate_prefilter_env.glsl b/libraries/pbrlib/genglsl/lib/mx_generate_prefilter_env.glsl
index 41bf33aae3..7a80d0d3ec 100644
--- a/libraries/pbrlib/genglsl/lib/mx_generate_prefilter_env.glsl
+++ b/libraries/pbrlib/genglsl/lib/mx_generate_prefilter_env.glsl
@@ -1,17 +1,5 @@
#include "mx_microfacet_specular.glsl"
-// Construct an orthonormal basis from a unit vector.
-// https://graphics.pixar.com/library/OrthonormalB/paper.pdf
-mat3 mx_orthonormal_basis(vec3 N)
-{
- float sign = (N.z < 0.0) ? -1.0 : 1.0;
- float a = -1.0 / (sign + N.z);
- float b = N.x * N.y * a;
- vec3 X = vec3(1.0 + sign * N.x * N.x * a, sign * b, -sign * N.x);
- vec3 Y = vec3(b, sign + N.y * N.y * a, -N.y);
- return mat3(X, Y, N);
-}
-
// Return the alpha associated with the given mip level in a prefiltered environment.
float mx_latlong_lod_to_alpha(float lod)
{
diff --git a/libraries/pbrlib/genglsl/lib/mx_microfacet.glsl b/libraries/pbrlib/genglsl/lib/mx_microfacet.glsl
index e59c3e6b51..567d713a6b 100644
--- a/libraries/pbrlib/genglsl/lib/mx_microfacet.glsl
+++ b/libraries/pbrlib/genglsl/lib/mx_microfacet.glsl
@@ -81,3 +81,15 @@ vec3 mx_uniform_sample_hemisphere(vec2 Xi)
sin(phi) * sinTheta,
cosTheta);
}
+
+// Construct an orthonormal basis from a unit vector.
+// https://graphics.pixar.com/library/OrthonormalB/paper.pdf
+mat3 mx_orthonormal_basis(vec3 N)
+{
+ float sign = (N.z < 0.0) ? -1.0 : 1.0;
+ float a = -1.0 / (sign + N.z);
+ float b = N.x * N.y * a;
+ vec3 X = vec3(1.0 + sign * N.x * N.x * a, sign * b, -sign * N.x);
+ vec3 Y = vec3(b, sign + N.y * N.y * a, -N.y);
+ return mat3(X, Y, N);
+}
diff --git a/libraries/pbrlib/genglsl/lib/mx_microfacet_diffuse.glsl b/libraries/pbrlib/genglsl/lib/mx_microfacet_diffuse.glsl
index 83d649ecca..622db85012 100644
--- a/libraries/pbrlib/genglsl/lib/mx_microfacet_diffuse.glsl
+++ b/libraries/pbrlib/genglsl/lib/mx_microfacet_diffuse.glsl
@@ -1,11 +1,14 @@
#include "mx_microfacet.glsl"
-// Based on the implementation of Oren-Nayar diffuse in Open Shading Language.
-// https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/blob/main/src/testrender/shading.cpp
+const float FUJII_CONSTANT_1 = 0.5 - 2.0 / (3.0 * M_PI);
+const float FUJII_CONSTANT_2 = 2.0 / 3.0 - 28.0 / (15.0 * M_PI);
+
+// Qualitative Oren-Nayar diffuse with simplified math:
+// https://www1.cs.columbia.edu/CAVE/publications/pdfs/Oren_SIGGRAPH94.pdf
float mx_oren_nayar_diffuse(float NdotV, float NdotL, float LdotV, float roughness)
{
float s = LdotV - NdotL * NdotV;
- float stinv = (s > 0.0f) ? s / max(NdotL, NdotV) : 0.0;
+ float stinv = (s > 0.0) ? s / max(NdotL, NdotV) : 0.0;
float sigma2 = mx_square(roughness);
float A = 1.0 - 0.5 * (sigma2 / (sigma2 + 0.33));
@@ -38,7 +41,7 @@ float mx_oren_nayar_diffuse_dir_albedo_table_lookup(float NdotV, float roughness
float mx_oren_nayar_diffuse_dir_albedo_monte_carlo(float NdotV, float roughness)
{
NdotV = clamp(NdotV, M_FLOAT_EPS, 1.0);
- vec3 V = vec3(sqrt(1.0f - mx_square(NdotV)), 0, NdotV);
+ vec3 V = vec3(sqrt(1.0 - mx_square(NdotV)), 0, NdotV);
float radiance = 0.0;
const int SAMPLE_COUNT = 64;
@@ -79,6 +82,59 @@ float mx_oren_nayar_diffuse_dir_albedo(float NdotV, float roughness)
return clamp(dirAlbedo, 0.0, 1.0);
}
+// Improved Oren-Nayar diffuse from Fujii:
+// https://mimosa-pudica.net/improved-oren-nayar.html
+float mx_oren_nayar_fujii_diffuse_dir_albedo(float cosTheta, float roughness)
+{
+ float A = 1.0 / (1.0 + FUJII_CONSTANT_1 * roughness);
+ float B = roughness * A;
+ float Si = sqrt(max(0.0, 1.0 - mx_square(cosTheta)));
+ float G = Si * (acos(clamp(cosTheta, -1.0, 1.0)) - Si * cosTheta) +
+ 2.0 * ((Si / cosTheta) * (1.0 - Si * Si * Si) - Si) / 3.0;
+ return A + (B * G * M_PI_INV);
+}
+
+float mx_oren_nayar_fujii_diffuse_avg_albedo(float roughness)
+{
+ float A = 1.0 / (1.0 + FUJII_CONSTANT_1 * roughness);
+ return A * (1.0 + FUJII_CONSTANT_2 * roughness);
+}
+
+// Energy-compensated Oren-Nayar diffuse from OpenPBR Surface:
+// https://academysoftwarefoundation.github.io/OpenPBR/
+vec3 mx_oren_nayar_compensated_diffuse(float NdotV, float NdotL, float LdotV, float roughness, vec3 color)
+{
+ float s = LdotV - NdotL * NdotV;
+ float stinv = (s > 0.0) ? s / max(NdotL, NdotV) : s;
+
+ // Compute the single-scatter lobe.
+ float A = 1.0 / (1.0 + FUJII_CONSTANT_1 * roughness);
+ vec3 lobeSingleScatter = color * A * (1.0 + roughness * stinv);
+
+ // Compute the multi-scatter lobe.
+ float dirAlbedoV = mx_oren_nayar_fujii_diffuse_dir_albedo(NdotV, roughness);
+ float dirAlbedoL = mx_oren_nayar_fujii_diffuse_dir_albedo(NdotL, roughness);
+ float avgAlbedo = mx_oren_nayar_fujii_diffuse_avg_albedo(roughness);
+ vec3 colorMultiScatter = mx_square(color) * avgAlbedo /
+ (vec3(1.0) - color * max(0.0, 1.0 - avgAlbedo));
+ vec3 lobeMultiScatter = colorMultiScatter *
+ max(M_FLOAT_EPS, 1.0 - dirAlbedoV) *
+ max(M_FLOAT_EPS, 1.0 - dirAlbedoL) /
+ max(M_FLOAT_EPS, 1.0 - avgAlbedo);
+
+ // Return the sum.
+ return lobeSingleScatter + lobeMultiScatter;
+}
+
+vec3 mx_oren_nayar_compensated_diffuse_dir_albedo(float cosTheta, float roughness, vec3 color)
+{
+ float dirAlbedo = mx_oren_nayar_fujii_diffuse_dir_albedo(cosTheta, roughness);
+ float avgAlbedo = mx_oren_nayar_fujii_diffuse_avg_albedo(roughness);
+ vec3 colorMultiScatter = mx_square(color) * avgAlbedo /
+ (vec3(1.0) - color * max(0.0, 1.0 - avgAlbedo));
+ return mix(colorMultiScatter, color, dirAlbedo);
+}
+
// https://media.disneyanimation.com/uploads/production/publication_asset/48/asset/s2012_pbs_disney_brdf_notes_v3.pdf
// Section 5.3
float mx_burley_diffuse(float NdotV, float NdotL, float LdotH, float roughness)
diff --git a/libraries/pbrlib/genglsl/lib/mx_microfacet_sheen.glsl b/libraries/pbrlib/genglsl/lib/mx_microfacet_sheen.glsl
index fc32ee05f7..512f351058 100644
--- a/libraries/pbrlib/genglsl/lib/mx_microfacet_sheen.glsl
+++ b/libraries/pbrlib/genglsl/lib/mx_microfacet_sheen.glsl
@@ -90,3 +90,62 @@ float mx_imageworks_sheen_dir_albedo(float NdotV, float roughness)
#endif
return clamp(dirAlbedo, 0.0, 1.0);
}
+
+// The following functions are adapted from https://github.com/tizian/ltc-sheen.
+// "Practical Multiple-Scattering Sheen Using Linearly Transformed Cosines", Zeltner et al.
+
+// Gaussian fit to directional albedo table.
+float mx_zeltner_sheen_dir_albedo(float x, float y)
+{
+ float s = y*(0.0206607 + 1.58491*y)/(0.0379424 + y*(1.32227 + y));
+ float m = y*(-0.193854 + y*(-1.14885 + y*(1.7932 - 0.95943*y*y)))/(0.046391 + y);
+ float o = y*(0.000654023 + (-0.0207818 + 0.119681*y)*y)/(1.26264 + y*(-1.92021 + y));
+ return exp(-0.5*mx_square((x - m)/s))/(s*sqrt(2.0*M_PI)) + o;
+}
+
+// Rational fits to LTC matrix coefficients.
+float mx_zeltner_sheen_ltc_aInv(float x, float y)
+{
+ return (2.58126*x + 0.813703*y)*y/(1.0 + 0.310327*x*x + 2.60994*x*y);
+}
+
+float mx_zeltner_sheen_ltc_bInv(float x, float y)
+{
+ return sqrt(1.0 - x)*(y - 1.0)*y*y*y/(0.0000254053 + 1.71228*x - 1.71506*x*y + 1.34174*y*y);
+}
+
+// V and N are assumed to be unit vectors.
+mat3 mx_orthonormal_basis_ltc(vec3 V, vec3 N, float NdotV)
+{
+ // Generate a tangent vector in the plane of V and N.
+ // This required to correctly orient the LTC lobe.
+ vec3 X = V - N*NdotV;
+ float lenSqr = dot(X, X);
+ if (lenSqr > 0.0)
+ {
+ X *= inversesqrt(lenSqr);
+ vec3 Y = cross(N, X);
+ return mat3(X, Y, N);
+ }
+
+ // If lenSqr == 0, then V == N, so any orthonormal basis will do.
+ return mx_orthonormal_basis(N);
+}
+
+// Multiplication by directional albedo is handled by the calling function.
+float mx_zeltner_sheen_brdf(vec3 L, vec3 V, vec3 N, float NdotV, float roughness)
+{
+ mat3 toLTCSpace = transpose(mx_orthonormal_basis_ltc(V, N, NdotV));
+ vec3 wi = toLTCSpace * L;
+
+ float aInv = mx_zeltner_sheen_ltc_aInv(NdotV, roughness);
+ float bInv = mx_zeltner_sheen_ltc_bInv(NdotV, roughness);
+
+ vec3 wiOrig = vec3(aInv*wi.x + bInv*wi.z, aInv * wi.y, wi.z);
+ float lenSqr = dot(wiOrig, wiOrig);
+
+ float det = aInv * aInv;
+ float jacobian = det / mx_square(lenSqr);
+
+ return jacobian * max(wiOrig.z, 0.0) * M_PI_INV;
+}
diff --git a/libraries/pbrlib/genglsl/mx_oren_nayar_diffuse_bsdf.glsl b/libraries/pbrlib/genglsl/mx_oren_nayar_diffuse_bsdf.glsl
index e80c413c29..0997e143f3 100644
--- a/libraries/pbrlib/genglsl/mx_oren_nayar_diffuse_bsdf.glsl
+++ b/libraries/pbrlib/genglsl/mx_oren_nayar_diffuse_bsdf.glsl
@@ -1,6 +1,6 @@
#include "lib/mx_microfacet_diffuse.glsl"
-void mx_oren_nayar_diffuse_bsdf_reflection(vec3 L, vec3 V, vec3 P, float occlusion, float weight, vec3 color, float roughness, vec3 normal, inout BSDF bsdf)
+void mx_oren_nayar_diffuse_bsdf_reflection(vec3 L, vec3 V, vec3 P, float occlusion, float weight, vec3 color, float roughness, vec3 normal, bool energy_compensation, inout BSDF bsdf)
{
bsdf.throughput = vec3(0.0);
@@ -15,14 +15,13 @@ void mx_oren_nayar_diffuse_bsdf_reflection(vec3 L, vec3 V, vec3 P, float occlusi
float NdotL = clamp(dot(normal, L), M_FLOAT_EPS, 1.0);
float LdotV = clamp(dot(L, V), M_FLOAT_EPS, 1.0);
- bsdf.response = color * occlusion * weight * NdotL * M_PI_INV;
- if (roughness > 0.0)
- {
- bsdf.response *= mx_oren_nayar_diffuse(NdotV, NdotL, LdotV, roughness);
- }
+ vec3 diffuse = energy_compensation ?
+ mx_oren_nayar_compensated_diffuse(NdotV, NdotL, LdotV, roughness, color) :
+ mx_oren_nayar_diffuse(NdotV, NdotL, LdotV, roughness) * color;
+ bsdf.response = diffuse * occlusion * weight * NdotL * M_PI_INV;
}
-void mx_oren_nayar_diffuse_bsdf_indirect(vec3 V, float weight, vec3 color, float roughness, vec3 normal, inout BSDF bsdf)
+void mx_oren_nayar_diffuse_bsdf_indirect(vec3 V, float weight, vec3 color, float roughness, vec3 normal, bool energy_compensation, inout BSDF bsdf)
{
bsdf.throughput = vec3(0.0);
@@ -35,7 +34,9 @@ void mx_oren_nayar_diffuse_bsdf_indirect(vec3 V, float weight, vec3 color, float
float NdotV = clamp(dot(normal, V), M_FLOAT_EPS, 1.0);
- vec3 Li = mx_environment_irradiance(normal) *
- mx_oren_nayar_diffuse_dir_albedo(NdotV, roughness);
- bsdf.response = Li * color * weight;
+ vec3 diffuse = energy_compensation ?
+ mx_oren_nayar_compensated_diffuse_dir_albedo(NdotV, roughness, color) :
+ mx_oren_nayar_diffuse_dir_albedo(NdotV, roughness) * color;
+ vec3 Li = mx_environment_irradiance(normal);
+ bsdf.response = Li * diffuse * weight;
}
diff --git a/libraries/pbrlib/genglsl/mx_sheen_bsdf.glsl b/libraries/pbrlib/genglsl/mx_sheen_bsdf.glsl
index 7ecd41d8a8..596307f62e 100644
--- a/libraries/pbrlib/genglsl/mx_sheen_bsdf.glsl
+++ b/libraries/pbrlib/genglsl/mx_sheen_bsdf.glsl
@@ -1,5 +1,9 @@
#include "lib/mx_microfacet_sheen.glsl"
+#define SHEEN_METHOD 0
+
+#if SHEEN_METHOD == 0
+
void mx_sheen_bsdf_reflection(vec3 L, vec3 V, vec3 P, float occlusion, float weight, vec3 color, float roughness, vec3 N, inout BSDF bsdf)
{
if (weight < M_FLOAT_EPS)
@@ -41,3 +45,43 @@ void mx_sheen_bsdf_indirect(vec3 V, float weight, vec3 color, float roughness, v
vec3 Li = mx_environment_irradiance(N);
bsdf.response = Li * color * dirAlbedo * weight;
}
+
+#elif SHEEN_METHOD == 1
+
+void mx_sheen_bsdf_reflection(vec3 L, vec3 V, vec3 P, float occlusion, float weight, vec3 color, float roughness, vec3 N, inout BSDF bsdf)
+{
+ if (weight < M_FLOAT_EPS)
+ {
+ return;
+ }
+
+ N = mx_forward_facing_normal(N, V);
+
+ float NdotV = min(dot(N, V), 1.0);
+
+ vec3 fr = color * mx_zeltner_sheen_brdf(L, V, N, NdotV, roughness);
+ float dirAlbedo = mx_zeltner_sheen_dir_albedo(NdotV, roughness);
+ bsdf.throughput = vec3(1.0 - dirAlbedo * weight);
+
+ bsdf.response = dirAlbedo * fr * occlusion * weight;
+}
+
+void mx_sheen_bsdf_indirect(vec3 V, float weight, vec3 color, float roughness, vec3 N, inout BSDF bsdf)
+{
+ if (weight < M_FLOAT_EPS)
+ {
+ return;
+ }
+
+ N = mx_forward_facing_normal(N, V);
+
+ float NdotV = min(dot(N, V), 1.0);
+
+ float dirAlbedo = mx_zeltner_sheen_dir_albedo(NdotV, roughness);
+ bsdf.throughput = vec3(1.0 - dirAlbedo * weight);
+
+ vec3 Li = mx_environment_irradiance(N);
+ bsdf.response = Li * color * dirAlbedo * weight;
+}
+
+#endif
diff --git a/libraries/pbrlib/pbrlib_defs.mtlx b/libraries/pbrlib/pbrlib_defs.mtlx
index b90cf3772d..3d0aaee762 100644
--- a/libraries/pbrlib/pbrlib_defs.mtlx
+++ b/libraries/pbrlib/pbrlib_defs.mtlx
@@ -28,6 +28,7 @@
+
diff --git a/resources/Materials/TestSuite/pbrlib/bsdf/oren_nayar_diffuse.mtlx b/resources/Materials/TestSuite/pbrlib/bsdf/oren_nayar_diffuse.mtlx
index 3b2fdb8497..15f652283c 100644
--- a/resources/Materials/TestSuite/pbrlib/bsdf/oren_nayar_diffuse.mtlx
+++ b/resources/Materials/TestSuite/pbrlib/bsdf/oren_nayar_diffuse.mtlx
@@ -5,6 +5,7 @@
+
@@ -14,6 +15,7 @@
+
@@ -23,6 +25,7 @@
+
@@ -32,6 +35,7 @@
+
@@ -41,6 +45,7 @@
+
diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt
new file mode 100644
index 0000000000..10279959bb
--- /dev/null
+++ b/source/CMakeLists.txt
@@ -0,0 +1,46 @@
+if (MATERIALX_BUILD_MONOLITHIC)
+ set(MATERIALX_MODULE_NAME ${MATERIALX_MONOLITHIC_TARGET})
+
+ # No sources are added - this will be added from each separate module, if the options are set
+ # such that the individual module would have been built if not in monolithic build mode
+ add_library(${MATERIALX_MODULE_NAME} "" "" )
+
+ # Create version resource
+ if(MATERIALX_BUILD_SHARED_LIBS AND MSVC)
+ configure_file(${CMAKE_SOURCE_DIR}/cmake/modules/MaterialXVersion.rc.in ${CMAKE_CURRENT_BINARY_DIR}/version.rc)
+ target_sources(${MATERIALX_MODULE_NAME} PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/version.rc)
+ endif()
+
+ set_target_properties(
+ ${MATERIALX_MODULE_NAME} PROPERTIES
+ OUTPUT_NAME ${MATERIALX_MODULE_NAME}${MATERIALX_LIBNAME_SUFFIX}
+ COMPILE_FLAGS "${EXTERNAL_COMPILE_FLAGS}"
+ LINK_FLAGS "${EXTERNAL_LINK_FLAGS}"
+ INSTALL_RPATH "${MATERIALX_SAME_DIR_RPATH}"
+ VERSION "${MATERIALX_LIBRARY_VERSION}"
+ SOVERSION "${MATERIALX_MAJOR_VERSION}")
+
+ target_link_libraries(
+ ${MATERIALX_MODULE_NAME}
+ ${CMAKE_DL_LIBS})
+
+ target_include_directories(${MATERIALX_MODULE_NAME}
+ PUBLIC
+ $
+ $
+ $
+ PRIVATE
+ ${EXTERNAL_INCLUDE_DIRS})
+
+ if(NOT SKBUILD)
+ install(TARGETS ${MATERIALX_MODULE_NAME}
+ EXPORT MaterialX
+ ARCHIVE DESTINATION ${MATERIALX_INSTALL_LIB_PATH}
+ LIBRARY DESTINATION ${MATERIALX_INSTALL_LIB_PATH}
+ RUNTIME DESTINATION bin)
+
+ # Note : we don't install the headers etc. here, and rely on each separate modules CMakeLists.txt
+ # to do that installation, thus we respect the build options configuration, and only install
+ # the headers for the modules we've built in to the monolithic build.
+ endif()
+endif()
diff --git a/source/JsMaterialX/CMakeLists.txt b/source/JsMaterialX/CMakeLists.txt
index 4c195201a9..0ec42b4c70 100644
--- a/source/JsMaterialX/CMakeLists.txt
+++ b/source/JsMaterialX/CMakeLists.txt
@@ -2,6 +2,11 @@ set(CORE ${CMAKE_CURRENT_SOURCE_DIR}/JsMaterialXCore/)
set(FORMAT ${CMAKE_CURRENT_SOURCE_DIR}/JsMaterialXFormat/)
set(GENSHADER ${CMAKE_CURRENT_SOURCE_DIR}/JsMaterialXGenShader/)
set(GENESSL ${CMAKE_CURRENT_SOURCE_DIR}/JsMaterialXGenEssl/)
+set(GENOSL ${CMAKE_CURRENT_SOURCE_DIR}/JsMaterialXGenOsl/)
+set(GENGLSL ${CMAKE_CURRENT_SOURCE_DIR}/JsMaterialXGenGlsl/)
+set(GENMSL ${CMAKE_CURRENT_SOURCE_DIR}/JsMaterialXGenMsl/)
+set(GENVK ${CMAKE_CURRENT_SOURCE_DIR}/JsMaterialXGenVk/)
+set(GENMDL ${CMAKE_CURRENT_SOURCE_DIR}/JsMaterialXGenMdl/)
set(SOURCE_FOLDER ${CMAKE_SOURCE_DIR}/source)
@@ -38,6 +43,11 @@ set(GENSHADER_DEPS ${GENSHADER}JsGenContext.cpp
${GENSHADER}JsUtil.cpp)
set(GENESSL_DEPS ${GENESSL}JsEsslShaderGenerator.cpp)
+set(GENOSL_DEPS ${GENOSL}JsOslShaderGenerator.cpp)
+set(GENGLSL_DEPS ${GENGLSL}JsGlslShaderGenerator.cpp)
+set(GENMSL_DEPS ${GENMSL}JsMslShaderGenerator.cpp)
+set(GENVK_DEPS ${GENVK}JsVkShaderGenerator.cpp)
+set(GENMDL_DEPS ${GENMDL}JsMdlShaderGenerator.cpp)
# Linker flags
set(JS_LINK_FLAGS_CORE "")
@@ -87,6 +97,23 @@ add_executable(JsMaterialXGenShader MaterialXLib.cpp
${GENSHADER_DEPS}
${GENESSL_DEPS})
+if (MATERIALX_BUILD_GEN_GLSL)
+ message("JS: Building JsMaterialXGenShader with GLSL, VK support")
+ target_sources(JsMaterialXGenShader PRIVATE ${GENGLSL_DEPS} ${GENVK_DEPS})
+endif()
+if (MATERIALX_BUILD_GEN_OSL)
+ message("JS: Building JsMaterialXGenShader with OSL support")
+ target_sources(JsMaterialXGenShader PRIVATE ${GENOSL_DEPS})
+endif()
+if (MATERIALX_BUILD_GEN_MDL)
+ message("JS: Building JsMaterialXGenShader with MDL support")
+ target_sources(JsMaterialXGenShader PRIVATE ${GENMDL_DEPS})
+endif()
+if (MATERIALX_BUILD_GEN_MSL)
+ message("JS: Building JsMaterialXGenShader with MSL support")
+ target_sources(JsMaterialXGenShader PRIVATE ${GENMSL_DEPS})
+endif()
+
set_target_properties(JsMaterialXCore
PROPERTIES
OUTPUT_NAME JsMaterialXCore
@@ -115,6 +142,16 @@ target_link_libraries(JsMaterialXGenShader
PUBLIC MaterialXGenGlsl
PRIVATE ${CMAKE_DL_LIBS})
+if (MATERIALX_BUILD_GEN_OSL)
+ target_link_libraries(JsMaterialXGenShader PUBLIC MaterialXGenOsl)
+endif()
+if (MATERIALX_BUILD_GEN_MDL)
+ target_link_libraries(JsMaterialXGenShader PRIVATE MaterialXGenMdl)
+endif()
+if (MATERIALX_BUILD_GEN_MSL)
+ target_link_libraries(JsMaterialXGenShader PUBLIC MaterialXGenMsl)
+endif()
+
# Install the JavaScript output
install(TARGETS JsMaterialXCore DESTINATION "JavaScript/MaterialX")
install(TARGETS JsMaterialXGenShader DESTINATION "JavaScript/MaterialX")
diff --git a/source/JsMaterialX/JsMaterialXGenGlsl/JsGlslShaderGenerator.cpp b/source/JsMaterialX/JsMaterialXGenGlsl/JsGlslShaderGenerator.cpp
new file mode 100644
index 0000000000..311296790f
--- /dev/null
+++ b/source/JsMaterialX/JsMaterialXGenGlsl/JsGlslShaderGenerator.cpp
@@ -0,0 +1,19 @@
+//
+// Copyright Contributors to the MaterialX Project
+// SPDX-License-Identifier: Apache-2.0
+//
+
+#include
+#include
+
+#include
+
+namespace ems = emscripten;
+namespace mx = MaterialX;
+
+EMSCRIPTEN_BINDINGS(GlslShaderGenerator)
+{
+ ems::class_>("GlslShaderGenerator")
+ .smart_ptr_constructor("GlslShaderGenerator", &std::make_shared)
+ ;
+}
diff --git a/source/JsMaterialX/JsMaterialXGenMdl/JsMdlShaderGenerator.cpp b/source/JsMaterialX/JsMaterialXGenMdl/JsMdlShaderGenerator.cpp
new file mode 100644
index 0000000000..9f075a3457
--- /dev/null
+++ b/source/JsMaterialX/JsMaterialXGenMdl/JsMdlShaderGenerator.cpp
@@ -0,0 +1,19 @@
+//
+// Copyright Contributors to the MaterialX Project
+// SPDX-License-Identifier: Apache-2.0
+//
+
+#include
+#include
+
+#include
+
+namespace ems = emscripten;
+namespace mx = MaterialX;
+
+EMSCRIPTEN_BINDINGS(MdlShaderGenerator)
+{
+ ems::class_>("MdlShaderGenerator")
+ .smart_ptr_constructor("MdlShaderGenerator", &std::make_shared)
+ ;
+}
diff --git a/source/JsMaterialX/JsMaterialXGenMsl/JsMslShaderGenerator.cpp b/source/JsMaterialX/JsMaterialXGenMsl/JsMslShaderGenerator.cpp
new file mode 100644
index 0000000000..38e0649ac9
--- /dev/null
+++ b/source/JsMaterialX/JsMaterialXGenMsl/JsMslShaderGenerator.cpp
@@ -0,0 +1,19 @@
+//
+// Copyright Contributors to the MaterialX Project
+// SPDX-License-Identifier: Apache-2.0
+//
+
+#include
+#include
+
+#include
+
+namespace ems = emscripten;
+namespace mx = MaterialX;
+
+EMSCRIPTEN_BINDINGS(MslShaderGenerator)
+{
+ ems::class_>("MslShaderGenerator")
+ .smart_ptr_constructor("MslShaderGenerator", &std::make_shared)
+ ;
+}
diff --git a/source/JsMaterialX/JsMaterialXGenOsl/JsOslShaderGenerator.cpp b/source/JsMaterialX/JsMaterialXGenOsl/JsOslShaderGenerator.cpp
new file mode 100644
index 0000000000..ebafa25363
--- /dev/null
+++ b/source/JsMaterialX/JsMaterialXGenOsl/JsOslShaderGenerator.cpp
@@ -0,0 +1,19 @@
+//
+// Copyright Contributors to the MaterialX Project
+// SPDX-License-Identifier: Apache-2.0
+//
+
+#include
+#include
+
+#include
+
+namespace ems = emscripten;
+namespace mx = MaterialX;
+
+EMSCRIPTEN_BINDINGS(OslShaderGenerator)
+{
+ ems::class_>("OslShaderGenerator")
+ .smart_ptr_constructor("OslShaderGenerator", &std::make_shared)
+ ;
+}
diff --git a/source/JsMaterialX/JsMaterialXGenVk/JsVkShaderGenerator.cpp b/source/JsMaterialX/JsMaterialXGenVk/JsVkShaderGenerator.cpp
new file mode 100644
index 0000000000..191f62664c
--- /dev/null
+++ b/source/JsMaterialX/JsMaterialXGenVk/JsVkShaderGenerator.cpp
@@ -0,0 +1,19 @@
+//
+// Copyright Contributors to the MaterialX Project
+// SPDX-License-Identifier: Apache-2.0
+//
+
+#include
+#include
+
+#include
+
+namespace ems = emscripten;
+namespace mx = MaterialX;
+
+EMSCRIPTEN_BINDINGS(VkShaderGenerator)
+{
+ ems::class_>("VkShaderGenerator")
+ .smart_ptr_constructor("VkShaderGenerator", &std::make_shared)
+ ;
+}
diff --git a/source/MaterialXCore/CMakeLists.txt b/source/MaterialXCore/CMakeLists.txt
index 33e4fafdf4..8fc8767061 100644
--- a/source/MaterialXCore/CMakeLists.txt
+++ b/source/MaterialXCore/CMakeLists.txt
@@ -1,50 +1,20 @@
-set(MATERIALX_MODULE_NAME MaterialXCore)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/Generated.h.in ${CMAKE_CURRENT_BINARY_DIR}/Generated.h)
file(GLOB materialx_source "${CMAKE_CURRENT_SOURCE_DIR}/*.cpp")
file(GLOB materialx_headers "${CMAKE_CURRENT_SOURCE_DIR}/*.h" "${CMAKE_CURRENT_BINARY_DIR}/*.h")
-add_library(${MATERIALX_MODULE_NAME} ${materialx_source} ${materialx_headers})
-
-add_definitions(-DMATERIALX_CORE_EXPORTS)
-
-# Create version resource
-if(MATERIALX_BUILD_SHARED_LIBS AND MSVC)
- configure_file(${CMAKE_SOURCE_DIR}/cmake/modules/MaterialXVersion.rc.in ${CMAKE_CURRENT_BINARY_DIR}/version.rc)
- target_sources(${MATERIALX_MODULE_NAME} PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/version.rc)
-endif()
-
-set_target_properties(
- ${MATERIALX_MODULE_NAME} PROPERTIES
- OUTPUT_NAME ${MATERIALX_MODULE_NAME}${MATERIALX_LIBNAME_SUFFIX}
- COMPILE_FLAGS "${EXTERNAL_COMPILE_FLAGS}"
- LINK_FLAGS "${EXTERNAL_LINK_FLAGS}"
- VERSION "${MATERIALX_LIBRARY_VERSION}"
- SOVERSION "${MATERIALX_MAJOR_VERSION}")
-
-target_link_libraries(
- ${MATERIALX_MODULE_NAME}
- ${CMAKE_DL_LIBS})
-
-target_include_directories(${MATERIALX_MODULE_NAME}
- PUBLIC
- $
+mx_add_library(MaterialXCore
+ SOURCE_FILES
+ ${materialx_source}
+ HEADER_FILES
+ ${materialx_headers}
+ EXPORT_DEFINE
+ MATERIALX_CORE_EXPORTS
+)
+
+# Need to add the binary directory to find the Generated.h file generated above.
+target_include_directories(${TARGET_NAME}
+ PUBLIC
$
- $
- PRIVATE
- ${EXTERNAL_INCLUDE_DIRS})
-
-if(NOT SKBUILD)
- install(TARGETS ${MATERIALX_MODULE_NAME}
- EXPORT MaterialX
- ARCHIVE DESTINATION ${MATERIALX_INSTALL_LIB_PATH}
- LIBRARY DESTINATION ${MATERIALX_INSTALL_LIB_PATH}
- RUNTIME DESTINATION bin)
-
- install(FILES ${materialx_headers}
- DESTINATION ${MATERIALX_INSTALL_INCLUDE_PATH}/${MATERIALX_MODULE_NAME}/)
-
- install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE}/${MATERIALX_MODULE_NAME}.pdb"
- DESTINATION "${MATERIALX_INSTALL_LIB_PATH}/" OPTIONAL)
-endif()
+)
diff --git a/source/MaterialXFormat/CMakeLists.txt b/source/MaterialXFormat/CMakeLists.txt
index 420149bae4..e884e6bcbc 100644
--- a/source/MaterialXFormat/CMakeLists.txt
+++ b/source/MaterialXFormat/CMakeLists.txt
@@ -1,53 +1,14 @@
-set(MATERIALX_MODULE_NAME MaterialXFormat)
file(GLOB_RECURSE materialx_source "${CMAKE_CURRENT_SOURCE_DIR}/*.cpp")
file(GLOB_RECURSE materialx_headers "${CMAKE_CURRENT_SOURCE_DIR}/*.h*")
-assign_source_group("Source Files" ${materialx_source})
-assign_source_group("Header Files" ${materialx_headers})
-
-add_library(${MATERIALX_MODULE_NAME} ${materialx_source} ${materialx_headers})
-
-add_definitions(-DMATERIALX_FORMAT_EXPORTS)
-
-# Create version resource
-if(MATERIALX_BUILD_SHARED_LIBS AND MSVC)
- configure_file(${CMAKE_SOURCE_DIR}/cmake/modules/MaterialXVersion.rc.in ${CMAKE_CURRENT_BINARY_DIR}/version.rc)
- target_sources(${MATERIALX_MODULE_NAME} PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/version.rc)
-endif()
-
-set_target_properties(
- ${MATERIALX_MODULE_NAME} PROPERTIES
- OUTPUT_NAME ${MATERIALX_MODULE_NAME}${MATERIALX_LIBNAME_SUFFIX}
- COMPILE_FLAGS "${EXTERNAL_COMPILE_FLAGS}"
- LINK_FLAGS "${EXTERNAL_LINK_FLAGS}"
- INSTALL_RPATH "${MATERIALX_SAME_DIR_RPATH}"
- VERSION "${MATERIALX_LIBRARY_VERSION}"
- SOVERSION "${MATERIALX_MAJOR_VERSION}")
-
-target_link_libraries(
- ${MATERIALX_MODULE_NAME}
- MaterialXCore
- ${CMAKE_DL_LIBS})
-
-target_include_directories(${MATERIALX_MODULE_NAME}
- PUBLIC
- $
- $
- PRIVATE
- ${EXTERNAL_INCLUDE_DIRS})
-
-if(NOT SKBUILD)
- install(TARGETS ${MATERIALX_MODULE_NAME}
- EXPORT MaterialX
- ARCHIVE DESTINATION ${MATERIALX_INSTALL_LIB_PATH}
- LIBRARY DESTINATION ${MATERIALX_INSTALL_LIB_PATH}
- RUNTIME DESTINATION bin)
-
- install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/"
- DESTINATION ${MATERIALX_INSTALL_INCLUDE_PATH}/${MATERIALX_MODULE_NAME}/ MESSAGE_NEVER
- FILES_MATCHING PATTERN "*.h*")
-
- install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE}/${MATERIALX_MODULE_NAME}.pdb"
- DESTINATION "${MATERIALX_INSTALL_LIB_PATH}/" OPTIONAL)
-endif()
+mx_add_library(MaterialXFormat
+ SOURCE_FILES
+ ${materialx_source}
+ HEADER_FILES
+ ${materialx_headers}
+ LIBRARIES
+ MaterialXCore
+ EXPORT_DEFINE
+ MATERIALX_FORMAT_EXPORTS
+)
diff --git a/source/MaterialXGenGlsl/CMakeLists.txt b/source/MaterialXGenGlsl/CMakeLists.txt
index da497f9f88..469d495e56 100644
--- a/source/MaterialXGenGlsl/CMakeLists.txt
+++ b/source/MaterialXGenGlsl/CMakeLists.txt
@@ -1,54 +1,15 @@
-set(MATERIALX_MODULE_NAME MaterialXGenGlsl)
file(GLOB_RECURSE materialx_source "${CMAKE_CURRENT_SOURCE_DIR}/*.cpp")
file(GLOB_RECURSE materialx_headers "${CMAKE_CURRENT_SOURCE_DIR}/*.h*")
-assign_source_group("Source Files" ${materialx_source})
-assign_source_group("Header Files" ${materialx_headers})
-
-add_library(${MATERIALX_MODULE_NAME} ${materialx_source} ${materialx_headers})
-
-add_definitions(-DMATERIALX_GENGLSL_EXPORTS)
-
-# Create version resource
-if(MATERIALX_BUILD_SHARED_LIBS AND MSVC)
- configure_file(${CMAKE_SOURCE_DIR}/cmake/modules/MaterialXVersion.rc.in ${CMAKE_CURRENT_BINARY_DIR}/version.rc)
- target_sources(${MATERIALX_MODULE_NAME} PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/version.rc)
-endif()
-
-set_target_properties(
- ${MATERIALX_MODULE_NAME} PROPERTIES
- OUTPUT_NAME ${MATERIALX_MODULE_NAME}${MATERIALX_LIBNAME_SUFFIX}
- COMPILE_FLAGS "${EXTERNAL_COMPILE_FLAGS}"
- LINK_FLAGS "${EXTERNAL_LINK_FLAGS}"
- INSTALL_RPATH "${MATERIALX_SAME_DIR_RPATH}"
- VERSION "${MATERIALX_LIBRARY_VERSION}"
- SOVERSION "${MATERIALX_MAJOR_VERSION}")
-
-target_link_libraries(
- ${MATERIALX_MODULE_NAME}
- MaterialXGenShader
- MaterialXCore
- ${CMAKE_DL_LIBS})
-
-target_include_directories(${MATERIALX_MODULE_NAME}
- PUBLIC
- $
- $
- PRIVATE
- ${EXTERNAL_INCLUDE_DIRS})
-
-if(NOT SKBUILD)
- install(TARGETS ${MATERIALX_MODULE_NAME}
- EXPORT MaterialX
- ARCHIVE DESTINATION ${MATERIALX_INSTALL_LIB_PATH}
- LIBRARY DESTINATION ${MATERIALX_INSTALL_LIB_PATH}
- RUNTIME DESTINATION bin)
-
- install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/"
- DESTINATION ${MATERIALX_INSTALL_INCLUDE_PATH}/${MATERIALX_MODULE_NAME}/ MESSAGE_NEVER
- FILES_MATCHING PATTERN "*.h*")
-
- install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE}/${MATERIALX_MODULE_NAME}.pdb"
- DESTINATION "${MATERIALX_INSTALL_LIB_PATH}/" OPTIONAL)
-endif()
+mx_add_library(MaterialXGenGlsl
+ SOURCE_FILES
+ ${materialx_source}
+ HEADER_FILES
+ ${materialx_headers}
+ LIBRARIES
+ MaterialXGenShader
+ MaterialXCore
+ EXPORT_DEFINE
+ MATERIALX_GENGLSL_EXPORTS
+)
diff --git a/source/MaterialXGenMdl/CMakeLists.txt b/source/MaterialXGenMdl/CMakeLists.txt
index d9991843ce..ed11b30182 100644
--- a/source/MaterialXGenMdl/CMakeLists.txt
+++ b/source/MaterialXGenMdl/CMakeLists.txt
@@ -1,57 +1,16 @@
-set(MATERIALX_MODULE_NAME MaterialXGenMdl)
file(GLOB_RECURSE materialx_source "${CMAKE_CURRENT_SOURCE_DIR}/*.cpp")
file(GLOB_RECURSE materialx_headers "${CMAKE_CURRENT_SOURCE_DIR}/*.h*")
-assign_source_group("Source Files" ${materialx_source})
-assign_source_group("Header Files" ${materialx_headers})
+mx_add_library(MaterialXGenMdl
+ SOURCE_FILES
+ ${materialx_source}
+ HEADER_FILES
+ ${materialx_headers}
+ LIBRARIES
+ MaterialXGenShader
+ MaterialXCore
+ EXPORT_DEFINE
+ MATERIALX_GENMDL_EXPORTS
+)
-add_library(${MATERIALX_MODULE_NAME} ${materialx_source} ${materialx_headers})
-
-add_definitions(-DMATERIALX_GENMDL_EXPORTS)
-
-# Create version resource
-if(MATERIALX_BUILD_SHARED_LIBS AND MSVC)
- configure_file(${CMAKE_SOURCE_DIR}/cmake/modules/MaterialXVersion.rc.in ${CMAKE_CURRENT_BINARY_DIR}/version.rc)
- target_sources(${MATERIALX_MODULE_NAME} PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/version.rc)
-endif()
-
-set_target_properties(
- ${MATERIALX_MODULE_NAME} PROPERTIES
- OUTPUT_NAME ${MATERIALX_MODULE_NAME}${MATERIALX_LIBNAME_SUFFIX}
- COMPILE_FLAGS "${EXTERNAL_COMPILE_FLAGS}"
- LINK_FLAGS "${EXTERNAL_LINK_FLAGS}"
- INSTALL_RPATH "${MATERIALX_SAME_DIR_RPATH}"
- VERSION "${MATERIALX_LIBRARY_VERSION}"
- SOVERSION "${MATERIALX_MAJOR_VERSION}")
-
-target_link_libraries(
- ${MATERIALX_MODULE_NAME}
- MaterialXGenShader
- MaterialXCore
- ${CMAKE_DL_LIBS})
-
-target_include_directories(${MATERIALX_MODULE_NAME}
- PUBLIC
- $
- $
- PRIVATE
- ${EXTERNAL_INCLUDE_DIRS})
-
-if(NOT SKBUILD)
- install(TARGETS ${MATERIALX_MODULE_NAME}
- EXPORT MaterialX
- ARCHIVE DESTINATION ${MATERIALX_INSTALL_LIB_PATH}
- LIBRARY DESTINATION ${MATERIALX_INSTALL_LIB_PATH}
- RUNTIME DESTINATION bin)
-
- install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/"
- DESTINATION ${MATERIALX_INSTALL_INCLUDE_PATH}/${MATERIALX_MODULE_NAME}/ MESSAGE_NEVER
- FILES_MATCHING PATTERN "*.h*")
-
- install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/mdl
- DESTINATION "${MATERIALX_INSTALL_MDL_MODULE_PATH}")
-
- install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE}/${MATERIALX_MODULE_NAME}.pdb"
- DESTINATION "${MATERIALX_INSTALL_LIB_PATH}/" OPTIONAL)
-endif()
diff --git a/source/MaterialXGenMdl/mdl/materialx/stdlib_1_6.mdl b/source/MaterialXGenMdl/mdl/materialx/stdlib_1_6.mdl
index 4a47f06089..ad2ca01944 100644
--- a/source/MaterialXGenMdl/mdl/materialx/stdlib_1_6.mdl
+++ b/source/MaterialXGenMdl/mdl/materialx/stdlib_1_6.mdl
@@ -155,6 +155,8 @@ export float mx_image_float(
if ( mxp_vaddressmode == core::mx_addressmode_type_constant
&& ( mxp_texcoord.y < 0.0 || mxp_texcoord.y > 1.0))
return mxp_default;
+ if (::tex::texture_isvalid(mxp_file) == false)
+ return mxp_default;
float returnValue = ::tex::lookup_float(tex: mxp_file,
coord: mxp_flip_v
@@ -230,6 +232,8 @@ export color mx_image_color3(
if ( mxp_vaddressmode == core::mx_addressmode_type_constant
&& ( mxp_texcoord.y < 0.0 || mxp_texcoord.y > 1.0))
return mxp_default;
+ if (::tex::texture_isvalid(mxp_file) == false)
+ return mxp_default;
color returnValue = ::tex::lookup_color(tex: mxp_file,
coord: mxp_flip_v
@@ -305,6 +309,8 @@ export core::color4 mx_image_color4(
if ( mxp_vaddressmode == core::mx_addressmode_type_constant
&& ( mxp_texcoord.y < 0.0 || mxp_texcoord.y > 1.0))
return mxp_default;
+ if (::tex::texture_isvalid(mxp_file) == false)
+ return mxp_default;
core::color4 returnValue = core::mk_color4(::tex::lookup_float4(tex: mxp_file,
coord: mxp_flip_v
@@ -380,6 +386,8 @@ export float2 mx_image_vector2(
if ( mxp_vaddressmode == core::mx_addressmode_type_constant
&& ( mxp_texcoord.y < 0.0 || mxp_texcoord.y > 1.0))
return mxp_default;
+ if (::tex::texture_isvalid(mxp_file) == false)
+ return mxp_default;
float2 returnValue = ::tex::lookup_float2(tex: mxp_file,
coord: mxp_flip_v
@@ -455,6 +463,8 @@ export float3 mx_image_vector3(
if ( mxp_vaddressmode == core::mx_addressmode_type_constant
&& ( mxp_texcoord.y < 0.0 || mxp_texcoord.y > 1.0))
return mxp_default;
+ if (::tex::texture_isvalid(mxp_file) == false)
+ return mxp_default;
float3 returnValue = ::tex::lookup_float3(tex: mxp_file,
coord: mxp_flip_v
@@ -530,6 +540,8 @@ export float4 mx_image_vector4(
if ( mxp_vaddressmode == core::mx_addressmode_type_constant
&& ( mxp_texcoord.y < 0.0 || mxp_texcoord.y > 1.0))
return mxp_default;
+ if (::tex::texture_isvalid(mxp_file) == false)
+ return mxp_default;
float4 returnValue = ::tex::lookup_float4(tex: mxp_file,
coord: mxp_flip_v
diff --git a/source/MaterialXGenMsl/CMakeLists.txt b/source/MaterialXGenMsl/CMakeLists.txt
index 8d6d009f50..5f59f975e9 100644
--- a/source/MaterialXGenMsl/CMakeLists.txt
+++ b/source/MaterialXGenMsl/CMakeLists.txt
@@ -1,54 +1,15 @@
-set(MATERIALX_MODULE_NAME MaterialXGenMsl)
file(GLOB_RECURSE materialx_source "${CMAKE_CURRENT_SOURCE_DIR}/*.cpp")
file(GLOB_RECURSE materialx_headers "${CMAKE_CURRENT_SOURCE_DIR}/*.h*")
-assign_source_group("Source Files" ${materialx_source})
-assign_source_group("Header Files" ${materialx_headers})
-
-add_library(${MATERIALX_MODULE_NAME} ${materialx_source} ${materialx_headers})
-
-add_definitions(-DMATERIALX_GENMSL_EXPORTS)
-
-# Create version resource
-if(MATERIALX_BUILD_SHARED_LIBS AND MSVC)
- configure_file(${CMAKE_SOURCE_DIR}/cmake/modules/MaterialXVersion.rc.in ${CMAKE_CURRENT_BINARY_DIR}/version.rc)
- target_sources(${MATERIALX_MODULE_NAME} PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/version.rc)
-endif()
-
-set_target_properties(
- ${MATERIALX_MODULE_NAME} PROPERTIES
- OUTPUT_NAME ${MATERIALX_MODULE_NAME}${MATERIALX_LIBNAME_SUFFIX}
- COMPILE_FLAGS "${EXTERNAL_COMPILE_FLAGS}"
- LINK_FLAGS "${EXTERNAL_LINK_FLAGS}"
- INSTALL_RPATH "${MATERIALX_SAME_DIR_RPATH}"
- VERSION "${MATERIALX_LIBRARY_VERSION}"
- SOVERSION "${MATERIALX_MAJOR_VERSION}")
-
-target_link_libraries(
- ${MATERIALX_MODULE_NAME}
- MaterialXGenShader
- MaterialXCore
- ${CMAKE_DL_LIBS})
-
-target_include_directories(${MATERIALX_MODULE_NAME}
- PUBLIC
- $
- $
- PRIVATE
- ${EXTERNAL_INCLUDE_DIRS})
-
-if(NOT SKBUILD)
- install(TARGETS ${MATERIALX_MODULE_NAME}
- EXPORT MaterialX
- ARCHIVE DESTINATION ${MATERIALX_INSTALL_LIB_PATH}
- LIBRARY DESTINATION ${MATERIALX_INSTALL_LIB_PATH}
- RUNTIME DESTINATION bin)
-
- install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/"
- DESTINATION ${MATERIALX_INSTALL_INCLUDE_PATH}/${MATERIALX_MODULE_NAME}/ MESSAGE_NEVER
- FILES_MATCHING PATTERN "*.h*")
-
- install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE}/${MATERIALX_MODULE_NAME}.pdb"
- DESTINATION "${MATERIALX_INSTALL_LIB_PATH}/" OPTIONAL)
-endif()
+mx_add_library(MaterialXGenMsl
+ SOURCE_FILES
+ ${materialx_source}
+ HEADER_FILES
+ ${materialx_headers}
+ LIBRARIES
+ MaterialXGenShader
+ MaterialXCore
+ EXPORT_DEFINE
+ MATERIALX_GENMSL_EXPORTS
+)
diff --git a/source/MaterialXGenOsl/CMakeLists.txt b/source/MaterialXGenOsl/CMakeLists.txt
index 3cf7b93438..35a416df12 100644
--- a/source/MaterialXGenOsl/CMakeLists.txt
+++ b/source/MaterialXGenOsl/CMakeLists.txt
@@ -1,54 +1,15 @@
-set(MATERIALX_MODULE_NAME MaterialXGenOsl)
file(GLOB_RECURSE materialx_source "${CMAKE_CURRENT_SOURCE_DIR}/*.cpp")
file(GLOB_RECURSE materialx_headers "${CMAKE_CURRENT_SOURCE_DIR}/*.h*")
-assign_source_group("Source Files" ${materialx_source})
-assign_source_group("Header Files" ${materialx_headers})
-
-add_library(${MATERIALX_MODULE_NAME} ${materialx_source} ${materialx_headers})
-
-add_definitions(-DMATERIALX_GENOSL_EXPORTS)
-
-# Create version resource
-if(MATERIALX_BUILD_SHARED_LIBS AND MSVC)
- configure_file(${CMAKE_SOURCE_DIR}/cmake/modules/MaterialXVersion.rc.in ${CMAKE_CURRENT_BINARY_DIR}/version.rc)
- target_sources(${MATERIALX_MODULE_NAME} PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/version.rc)
-endif()
-
-set_target_properties(
- ${MATERIALX_MODULE_NAME} PROPERTIES
- OUTPUT_NAME ${MATERIALX_MODULE_NAME}${MATERIALX_LIBNAME_SUFFIX}
- COMPILE_FLAGS "${EXTERNAL_COMPILE_FLAGS}"
- LINK_FLAGS "${EXTERNAL_LINK_FLAGS}"
- INSTALL_RPATH "${MATERIALX_SAME_DIR_RPATH}"
- VERSION "${MATERIALX_LIBRARY_VERSION}"
- SOVERSION "${MATERIALX_MAJOR_VERSION}")
-
-target_link_libraries(
- ${MATERIALX_MODULE_NAME}
- MaterialXGenShader
- MaterialXCore
- ${CMAKE_DL_LIBS})
-
-target_include_directories(${MATERIALX_MODULE_NAME}
- PUBLIC
- $
- $
- PRIVATE
- ${EXTERNAL_INCLUDE_DIRS})
-
-if(NOT SKBUILD)
- install(TARGETS ${MATERIALX_MODULE_NAME}
- EXPORT MaterialX
- ARCHIVE DESTINATION ${MATERIALX_INSTALL_LIB_PATH}
- LIBRARY DESTINATION ${MATERIALX_INSTALL_LIB_PATH}
- RUNTIME DESTINATION bin)
-
- install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/"
- DESTINATION ${MATERIALX_INSTALL_INCLUDE_PATH}/${MATERIALX_MODULE_NAME}/ MESSAGE_NEVER
- FILES_MATCHING PATTERN "*.h*")
-
- install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE}/${MATERIALX_MODULE_NAME}.pdb"
- DESTINATION "${MATERIALX_INSTALL_LIB_PATH}/" OPTIONAL)
-endif()
+mx_add_library(MaterialXGenOsl
+ SOURCE_FILES
+ ${materialx_source}
+ HEADER_FILES
+ ${materialx_headers}
+ LIBRARIES
+ MaterialXGenShader
+ MaterialXCore
+ EXPORT_DEFINE
+ MATERIALX_GENOSL_EXPORTS
+)
diff --git a/source/MaterialXGenShader/CMakeLists.txt b/source/MaterialXGenShader/CMakeLists.txt
index 1b9533e0a5..597adba5fb 100644
--- a/source/MaterialXGenShader/CMakeLists.txt
+++ b/source/MaterialXGenShader/CMakeLists.txt
@@ -1,57 +1,15 @@
-set(MATERIALX_MODULE_NAME MaterialXGenShader)
file(GLOB_RECURSE materialx_source "${CMAKE_CURRENT_SOURCE_DIR}/*.cpp")
file(GLOB_RECURSE materialx_headers "${CMAKE_CURRENT_SOURCE_DIR}/*.h*")
-assign_source_group("Source Files" ${materialx_source})
-assign_source_group("Header Files" ${materialx_headers})
-
-add_library(${MATERIALX_MODULE_NAME} ${materialx_source} ${materialx_headers})
-
-add_definitions(-DMATERIALX_GENSHADER_EXPORTS)
-
-# Create version resource
-if(MATERIALX_BUILD_SHARED_LIBS AND MSVC)
- configure_file(${CMAKE_SOURCE_DIR}/cmake/modules/MaterialXVersion.rc.in ${CMAKE_CURRENT_BINARY_DIR}/version.rc)
- target_sources(${MATERIALX_MODULE_NAME} PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/version.rc)
-endif()
-
-set_target_properties(
- ${MATERIALX_MODULE_NAME} PROPERTIES
- OUTPUT_NAME ${MATERIALX_MODULE_NAME}${MATERIALX_LIBNAME_SUFFIX}
- COMPILE_FLAGS "${EXTERNAL_COMPILE_FLAGS}"
- LINK_FLAGS "${EXTERNAL_LINK_FLAGS}"
- INSTALL_RPATH "${MATERIALX_SAME_DIR_RPATH}"
- VERSION "${MATERIALX_LIBRARY_VERSION}"
- SOVERSION "${MATERIALX_MAJOR_VERSION}")
-
-target_link_libraries(
- ${MATERIALX_MODULE_NAME}
- MaterialXCore
- MaterialXFormat
- ${CMAKE_DL_LIBS})
-
-target_include_directories(${MATERIALX_MODULE_NAME}
- PUBLIC
- $
- $
- PRIVATE
- ${EXTERNAL_INCLUDE_DIRS})
-
-if(NOT SKBUILD)
- install(TARGETS ${MATERIALX_MODULE_NAME}
- EXPORT MaterialX
- ARCHIVE DESTINATION ${MATERIALX_INSTALL_LIB_PATH}
- LIBRARY DESTINATION ${MATERIALX_INSTALL_LIB_PATH}
- RUNTIME DESTINATION bin)
-
- install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/"
- DESTINATION ${MATERIALX_INSTALL_INCLUDE_PATH}/${MATERIALX_MODULE_NAME}/ MESSAGE_NEVER
- FILES_MATCHING PATTERN "*.h*")
-
- install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE}/${MATERIALX_MODULE_NAME}.pdb"
- DESTINATION "${MATERIALX_INSTALL_LIB_PATH}/" OPTIONAL)
-
- install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../../resources"
- DESTINATION . MESSAGE_NEVER)
-endif()
+mx_add_library(MaterialXGenShader
+ SOURCE_FILES
+ ${materialx_source}
+ HEADER_FILES
+ ${materialx_headers}
+ LIBRARIES
+ MaterialXFormat
+ MaterialXCore
+ EXPORT_DEFINE
+ MATERIALX_GENSHADER_EXPORTS
+)
diff --git a/source/MaterialXRender/CMakeLists.txt b/source/MaterialXRender/CMakeLists.txt
index 3cf6a7d787..c0326153a4 100644
--- a/source/MaterialXRender/CMakeLists.txt
+++ b/source/MaterialXRender/CMakeLists.txt
@@ -1,8 +1,3 @@
-set(MATERIALX_MODULE_NAME MaterialXRender)
-
-include_directories(
- ${EXTERNAL_INCLUDE_DIRS}
- ${CMAKE_CURRENT_SOURCE_DIR}/../)
file(GLOB_RECURSE materialx_source "${CMAKE_CURRENT_SOURCE_DIR}/*.cpp")
file(GLOB_RECURSE materialx_inlined "${CMAKE_CURRENT_SOURCE_DIR}/*.inl")
@@ -12,58 +7,24 @@ if(NOT MATERIALX_BUILD_OIIO)
list(REMOVE_ITEM materialx_source "${CMAKE_CURRENT_SOURCE_DIR}/OiioImageLoader.cpp")
endif()
-assign_source_group("Source Files" ${materialx_source})
-assign_source_group("Source Files" ${materialx_inlined})
-assign_source_group("Header Files" ${materialx_headers})
+mx_add_library(MaterialXRender
+ SOURCE_FILES
+ ${materialx_source} ${materialx_inlined}
+ HEADER_FILES
+ ${materialx_headers}
+ LIBRARIES
+ MaterialXGenShader
+ EXPORT_DEFINE
+ MATERIALX_RENDER_EXPORTS
+)
if(UNIX)
- add_compile_options(-Wno-unused-function)
-endif()
-
-add_library(${MATERIALX_MODULE_NAME} ${materialx_source} ${materialx_headers} ${materialx_inlined})
-
-add_definitions(-DMATERIALX_RENDER_EXPORTS)
-
-# Create version resource
-if(MATERIALX_BUILD_SHARED_LIBS AND MSVC)
- configure_file(${CMAKE_SOURCE_DIR}/cmake/modules/MaterialXVersion.rc.in ${CMAKE_CURRENT_BINARY_DIR}/version.rc)
- target_sources(${MATERIALX_MODULE_NAME} PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/version.rc)
+ target_compile_options(${TARGET_NAME} PRIVATE -Wno-unused-function)
endif()
-target_link_libraries(
- ${MATERIALX_MODULE_NAME}
- MaterialXGenShader
- ${CMAKE_DL_LIBS})
-
if(MATERIALX_BUILD_OIIO)
set(OPENIMAGEIO_ROOT_DIR ${MATERIALX_OIIO_DIR})
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/External/OpenImageIO")
find_package(OpenImageIO CONFIG REQUIRED)
- target_link_libraries(${MATERIALX_MODULE_NAME} OpenImageIO::OpenImageIO OpenImageIO::OpenImageIO_Util)
-endif()
-
-set_target_properties(
- ${MATERIALX_MODULE_NAME} PROPERTIES
- OUTPUT_NAME ${MATERIALX_MODULE_NAME}${MATERIALX_LIBNAME_SUFFIX}
- COMPILE_FLAGS "${EXTERNAL_COMPILE_FLAGS}"
- LINK_FLAGS "${EXTERNAL_LINK_FLAGS}"
- INSTALL_RPATH "${MATERIALX_SAME_DIR_RPATH}"
- VERSION "${MATERIALX_LIBRARY_VERSION}"
- SOVERSION "${MATERIALX_MAJOR_VERSION}")
-
-if(NOT SKBUILD)
- install(TARGETS ${MATERIALX_MODULE_NAME}
- EXPORT MaterialX
- ARCHIVE DESTINATION ${MATERIALX_INSTALL_LIB_PATH}
- LIBRARY DESTINATION ${MATERIALX_INSTALL_LIB_PATH}
- RUNTIME DESTINATION bin)
-
- install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/"
- DESTINATION ${MATERIALX_INSTALL_INCLUDE_PATH}/${MATERIALX_MODULE_NAME}/ MESSAGE_NEVER
- FILES_MATCHING
- PATTERN "*.h*"
- PATTERN "*.inl")
-
- install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE}/${MATERIALX_MODULE_NAME}.pdb"
- DESTINATION "${MATERIALX_INSTALL_LIB_PATH}/" OPTIONAL)
+ target_link_libraries(${TARGET_NAME} OpenImageIO::OpenImageIO OpenImageIO::OpenImageIO_Util)
endif()
diff --git a/source/MaterialXRenderGlsl/CMakeLists.txt b/source/MaterialXRenderGlsl/CMakeLists.txt
index 1748b70190..81c6bb75ad 100644
--- a/source/MaterialXRenderGlsl/CMakeLists.txt
+++ b/source/MaterialXRenderGlsl/CMakeLists.txt
@@ -1,11 +1,7 @@
-set(MATERIALX_MODULE_NAME MaterialXRenderGlsl)
file(GLOB_RECURSE materialx_source "${CMAKE_CURRENT_SOURCE_DIR}/*.c*")
file(GLOB_RECURSE materialx_headers "${CMAKE_CURRENT_SOURCE_DIR}/*.h*")
-assign_source_group("Source Files" ${materialx_source})
-assign_source_group("Header Files" ${materialx_headers})
-
if(POLICY CMP0072)
cmake_policy(SET CMP0072 NEW)
endif()
@@ -13,12 +9,6 @@ endif()
if(APPLE)
find_library(COCOA_FRAMEWORK Cocoa)
find_package(OpenGL REQUIRED)
- file(GLOB_RECURSE materialx_source_oc "${CMAKE_CURRENT_SOURCE_DIR}/*.m")
- message("Objective C files: " ${materialx_source_oc})
- set_source_files_properties(${materialx_source_oc} PROPERTIES
- COMPILE_FLAGS "-x objective-c++")
- set(materialx_source ${materialx_source} ${materialx_source_oc})
- add_compile_options(-DGL_SILENCE_DEPRECATION)
elseif(UNIX)
find_package(X11 REQUIRED)
# Note - can't just require the Xt component because FindX11 in cmake 3.1
@@ -28,91 +18,65 @@ elseif(UNIX)
endif()
if(SKBUILD)
- set(OpenGL_GL_PREFERENCE LEGACY)
+ set(OpenGL_GL_PREFERENCE LEGACY)
endif()
find_package(OpenGL REQUIRED)
- include_directories(${X11_INCLUDE_DIR})
endif()
-# Disable OpenGL deprecation warnings on Clang.
-if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
- add_compile_options(-Wno-deprecated-declarations)
-endif()
-add_library(${MATERIALX_MODULE_NAME} ${materialx_source} ${materialx_headers})
+mx_add_library(MaterialXRenderGlsl
+ SOURCE_FILES
+ ${materialx_source}
+ HEADER_FILES
+ ${materialx_headers}
+ LIBRARIES
+ MaterialXRenderHw
+ MaterialXGenGlsl
+ EXPORT_DEFINE
+ MATERIALX_RENDERGLSL_EXPORTS
+ ADD_OBJECTIVE_C_CODE
+)
-add_definitions(-DMATERIALX_RENDERGLSL_EXPORTS)
-# Create version resource
-if(MATERIALX_BUILD_SHARED_LIBS AND MSVC)
- configure_file(${CMAKE_SOURCE_DIR}/cmake/modules/MaterialXVersion.rc.in ${CMAKE_CURRENT_BINARY_DIR}/version.rc)
- target_sources(${MATERIALX_MODULE_NAME} PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/version.rc)
+if(APPLE)
+ target_compile_definitions(${TARGET_NAME} PRIVATE -DGL_SILENCE_DEPRECATION)
+elseif(UNIX)
+ #TODO - public or private here?
+ target_include_directories(${TARGET_NAME} PRIVATE ${X11_INCLUDE_DIR})
endif()
-if(MATERIALX_BUILD_SHARED_LIBS)
- target_compile_definitions(${MATERIALX_MODULE_NAME} PUBLIC GLAD_GLAPI_EXPORT PRIVATE GLAD_GLAPI_EXPORT_BUILD)
+# Disable OpenGL deprecation warnings on Clang.
+if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
+ target_compile_options(${TARGET_NAME} PRIVATE -Wno-deprecated-declarations)
endif()
-target_link_libraries(
- ${MATERIALX_MODULE_NAME}
- MaterialXRenderHw
- MaterialXGenGlsl
- ${CMAKE_DL_LIBS})
+if(MATERIALX_BUILD_SHARED_LIBS)
+ target_compile_definitions(${TARGET_NAME} PUBLIC GLAD_GLAPI_EXPORT PRIVATE GLAD_GLAPI_EXPORT_BUILD)
+endif()
if(WIN32)
if(MSVC)
target_link_libraries(
- ${MATERIALX_MODULE_NAME}
- Opengl32)
+ ${TARGET_NAME}
+ Opengl32)
elseif(MINGW)
target_link_libraries(
- ${MATERIALX_MODULE_NAME}
- Opengl32
- gdi32)
+ ${TARGET_NAME}
+ Opengl32
+ gdi32)
endif()
elseif(APPLE)
target_link_libraries(
- ${MATERIALX_MODULE_NAME}
- "-framework OpenGL"
- "-framework Foundation"
- "-framework Cocoa"
- "-framework Metal")
+ ${TARGET_NAME}
+ "-framework OpenGL"
+ "-framework Foundation"
+ "-framework Cocoa"
+ "-framework Metal")
elseif(UNIX)
target_link_libraries(
- ${MATERIALX_MODULE_NAME}
- OpenGL::GL
- X11::X11
- X11::Xt)
-endif()
-
-set_target_properties(
- ${MATERIALX_MODULE_NAME} PROPERTIES
- OUTPUT_NAME ${MATERIALX_MODULE_NAME}${MATERIALX_LIBNAME_SUFFIX}
- COMPILE_FLAGS "${EXTERNAL_COMPILE_FLAGS}"
- LINK_FLAGS "${EXTERNAL_LINK_FLAGS}"
- INSTALL_RPATH "${MATERIALX_SAME_DIR_RPATH}"
- VERSION "${MATERIALX_LIBRARY_VERSION}"
- SOVERSION "${MATERIALX_MAJOR_VERSION}")
-
-target_include_directories(${MATERIALX_MODULE_NAME}
- PUBLIC
- $
- $
- PRIVATE
- ${EXTERNAL_INCLUDE_DIRS})
-
-if(NOT SKBUILD)
- install(TARGETS ${MATERIALX_MODULE_NAME}
- EXPORT MaterialX
- ARCHIVE DESTINATION ${MATERIALX_INSTALL_LIB_PATH}
- LIBRARY DESTINATION ${MATERIALX_INSTALL_LIB_PATH}
- RUNTIME DESTINATION bin)
-
- install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/"
- DESTINATION ${MATERIALX_INSTALL_INCLUDE_PATH}/${MATERIALX_MODULE_NAME}/ MESSAGE_NEVER
- FILES_MATCHING PATTERN "*.h*")
-
- install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE}/${MATERIALX_MODULE_NAME}.pdb"
- DESTINATION "${MATERIALX_INSTALL_LIB_PATH}/" OPTIONAL)
+ ${TARGET_NAME}
+ OpenGL::GL
+ X11::X11
+ X11::Xt)
endif()
diff --git a/source/MaterialXRenderHw/CMakeLists.txt b/source/MaterialXRenderHw/CMakeLists.txt
index 9efc26017c..0a314e0749 100644
--- a/source/MaterialXRenderHw/CMakeLists.txt
+++ b/source/MaterialXRenderHw/CMakeLists.txt
@@ -1,93 +1,47 @@
-set(MATERIALX_MODULE_NAME MaterialXRenderHw)
file(GLOB materialx_source "${CMAKE_CURRENT_SOURCE_DIR}/*.cpp")
file(GLOB materialx_headers "${CMAKE_CURRENT_SOURCE_DIR}/*.h*")
if(APPLE)
-if (NOT MATERIALX_BUILD_IOS)
- find_library(COCOA_FRAMEWORK Cocoa)
-endif()
- file(GLOB materialx_source_oc "${CMAKE_CURRENT_SOURCE_DIR}/*.m")
- message("Objective C files: " ${materialx_source_oc})
- set_source_files_properties(${materialx_source_oc} PROPERTIES
- COMPILE_FLAGS "-x objective-c++")
- set(materialx_source ${materialx_source} ${materialx_source_oc})
+ if (NOT MATERIALX_BUILD_IOS)
+ find_library(COCOA_FRAMEWORK Cocoa)
+ endif()
elseif(UNIX)
- find_package(X11 REQUIRED)
- # Note - can't just require the Xt component because FindX11 in cmake 3.1
- # doesn't support it
- if(NOT X11_Xt_FOUND)
- message(FATAL_ERROR "Error in building MaterialXRenderHw: Xt was not found")
- endif()
+ find_package(X11 REQUIRED)
+ # Note - can't just require the Xt component because FindX11 in cmake 3.1
+ # doesn't support it
+ if(NOT X11_Xt_FOUND)
+ message(FATAL_ERROR "Error in building MaterialXRenderHw: Xt was not found")
+ endif()
endif()
-assign_source_group("Source Files" ${materialx_source})
-assign_source_group("Header Files" ${materialx_headers})
-
-add_library(${MATERIALX_MODULE_NAME} ${materialx_source} ${materialx_headers})
-
-add_definitions(-DMATERIALX_RENDERHW_EXPORTS)
-
-if(APPLE AND NOT MATERIALX_BUILD_IOS)
-set(CMAKE_DL_LIBS
-${CMAKE_DL_LIBS}
-"-framework Cocoa")
-endif()
-# Create version resource
-if(MATERIALX_BUILD_SHARED_LIBS AND MSVC)
- configure_file(${CMAKE_SOURCE_DIR}/cmake/modules/MaterialXVersion.rc.in ${CMAKE_CURRENT_BINARY_DIR}/version.rc)
- target_sources(${MATERIALX_MODULE_NAME} PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/version.rc)
-endif()
-
-if(MSVC)
- target_link_libraries(
- ${MATERIALX_MODULE_NAME}
+mx_add_library(MaterialXRenderHw
+ SOURCE_FILES
+ ${materialx_source}
+ HEADER_FILES
+ ${materialx_headers}
+ LIBRARIES
MaterialXRender
- ${CMAKE_DL_LIBS})
-elseif(APPLE)
+ EXPORT_DEFINE
+ MATERIALX_RENDERHW_EXPORTS
+ ADD_OBJECTIVE_C_CODE
+)
+
+if(APPLE)
target_link_libraries(
- ${MATERIALX_MODULE_NAME}
- MaterialXRender
- ${CMAKE_DL_LIBS}
- "-framework Foundation"
- "-framework Metal")
+ ${TARGET_NAME}
+ "-framework Foundation"
+ "-framework Metal")
+ if (NOT MATERIALX_BUILD_IOS)
+ target_link_libraries(
+ ${TARGET_NAME}
+ "-framework Cocoa"
+ )
+ endif()
elseif(UNIX)
target_link_libraries(
- ${MATERIALX_MODULE_NAME}
- MaterialXRender
- ${CMAKE_DL_LIBS}
- X11::X11
- X11::Xt)
-endif()
-
-set_target_properties(
- ${MATERIALX_MODULE_NAME} PROPERTIES
- OUTPUT_NAME ${MATERIALX_MODULE_NAME}${MATERIALX_LIBNAME_SUFFIX}
- COMPILE_FLAGS "${EXTERNAL_COMPILE_FLAGS}"
- LINK_FLAGS "${EXTERNAL_LINK_FLAGS}"
- INSTALL_RPATH "${MATERIALX_SAME_DIR_RPATH}"
- VERSION "${MATERIALX_LIBRARY_VERSION}"
- SOVERSION "${MATERIALX_MAJOR_VERSION}")
-
-target_include_directories(${MATERIALX_MODULE_NAME}
- PUBLIC
- $
- $
- PRIVATE
- ${EXTERNAL_INCLUDE_DIRS})
-
-if(NOT SKBUILD)
- install(TARGETS ${MATERIALX_MODULE_NAME}
- EXPORT MaterialX
- ARCHIVE DESTINATION ${MATERIALX_INSTALL_LIB_PATH}
- LIBRARY DESTINATION ${MATERIALX_INSTALL_LIB_PATH}
- RUNTIME DESTINATION bin)
-
- install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/"
- DESTINATION ${MATERIALX_INSTALL_INCLUDE_PATH}/${MATERIALX_MODULE_NAME}/ MESSAGE_NEVER
- FILES_MATCHING PATTERN "*.h*")
-
- install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE}/${MATERIALX_MODULE_NAME}.pdb"
- DESTINATION "${MATERIALX_INSTALL_LIB_PATH}/" OPTIONAL)
+ ${TARGET_NAME}
+ X11::X11
+ X11::Xt)
endif()
diff --git a/source/MaterialXRenderMsl/CMakeLists.txt b/source/MaterialXRenderMsl/CMakeLists.txt
index 3d980fa44b..dedadb5a57 100644
--- a/source/MaterialXRenderMsl/CMakeLists.txt
+++ b/source/MaterialXRenderMsl/CMakeLists.txt
@@ -1,26 +1,16 @@
-set(MATERIALX_MODULE_NAME MaterialXRenderMsl)
file(GLOB_RECURSE materialx_source "${CMAKE_CURRENT_SOURCE_DIR}/*.m*")
file(GLOB_RECURSE materialx_headers "${CMAKE_CURRENT_SOURCE_DIR}/*.h*")
-assign_source_group("Source Files" ${materialx_source})
-assign_source_group("Header Files" ${materialx_headers})
-
if(POLICY CMP0072)
cmake_policy(SET CMP0072 NEW)
endif()
if(APPLE)
-if(NOT MATERIALX_BUILD_IOS)
- find_library(COCOA_FRAMEWORK Cocoa)
- find_package(OpenGL REQUIRED)
-endif()
- file(GLOB_RECURSE materialx_source_oc "${CMAKE_CURRENT_SOURCE_DIR}/*.m")
- message("Objective C files: " ${materialx_source_oc})
- set_source_files_properties(${materialx_source_oc} PROPERTIES
- COMPILE_FLAGS "-x objective-c++")
- set(materialx_source ${materialx_source} ${materialx_source_oc})
- add_compile_options(-DGL_SILENCE_DEPRECATION)
+ if(NOT MATERIALX_BUILD_IOS)
+ find_library(COCOA_FRAMEWORK Cocoa)
+ find_package(OpenGL REQUIRED)
+ endif()
elseif(UNIX)
find_package(X11 REQUIRED)
# Note - can't just require the Xt component because FindX11 in cmake 3.1
@@ -30,73 +20,54 @@ elseif(UNIX)
endif()
find_package(OpenGL REQUIRED)
- include_directories(${X11_INCLUDE_DIR})
endif()
-# Disable OpenGL deprecation warnings on Clang.
-if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
- add_compile_options(-Wno-deprecated-declarations)
-endif()
-add_library(${MATERIALX_MODULE_NAME} ${materialx_source} ${materialx_headers})
+mx_add_library(MaterialXRenderMsl
+ SOURCE_FILES
+ ${materialx_source}
+ HEADER_FILES
+ ${materialx_headers}
+ LIBRARIES
+ MaterialXRenderHw
+ MaterialXGenMsl
+ EXPORT_DEFINE
+ MATERIALX_RENDERMSL_EXPORTS
+ ADD_OBJECTIVE_C_CODE
+)
-add_definitions(-DMATERIALX_RENDERMSL_EXPORTS)
-target_link_libraries(
- ${MATERIALX_MODULE_NAME}
- MaterialXRenderHw
- MaterialXGenMsl
- ${CMAKE_DL_LIBS})
+if(APPLE)
+ target_compile_definitions(${TARGET_NAME} PRIVATE -DGL_SILENCE_DEPRECATION)
+elseif(UNIX)
+ # public or private here?
+ target_include_directories(${TARGET_NAME} PRIVATE ${X11_INCLUDE_DIR})
+endif()
+
+# Disable OpenGL deprecation warnings on Clang.
+if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
+ target_compile_options(${TARGET_NAME} PRIVATE -Wno-deprecated-declarations)
+endif()
if(MSVC)
target_link_libraries(
- ${MATERIALX_MODULE_NAME}
- Opengl32)
+ ${TARGET_NAME}
+ Opengl32)
elseif(APPLE)
if(NOT MATERIALX_BUILD_IOS)
target_link_libraries(
- ${MATERIALX_MODULE_NAME}
- "-framework Cocoa"
- "-framework OpenGL")
+ ${TARGET_NAME}
+ "-framework Cocoa"
+ "-framework OpenGL")
endif()
target_link_libraries(
- ${MATERIALX_MODULE_NAME}
- "-framework Foundation"
- "-framework Metal")
+ ${TARGET_NAME}
+ "-framework Foundation"
+ "-framework Metal")
elseif(UNIX)
target_link_libraries(
- ${MATERIALX_MODULE_NAME}
- OpenGL::GL
- X11::X11
- X11::Xt)
-endif()
-
-set_target_properties(
- ${MATERIALX_MODULE_NAME} PROPERTIES
- OUTPUT_NAME ${MATERIALX_MODULE_NAME}${MATERIALX_LIBNAME_SUFFIX}
- COMPILE_FLAGS "${EXTERNAL_COMPILE_FLAGS}"
- LINK_FLAGS "${EXTERNAL_LINK_FLAGS}"
- VERSION "${MATERIALX_LIBRARY_VERSION}"
- SOVERSION "${MATERIALX_MAJOR_VERSION}")
-
-target_include_directories(${MATERIALX_MODULE_NAME}
- PUBLIC
- $
- $
- PRIVATE
- ${EXTERNAL_INCLUDE_DIRS})
-
-if(NOT SKBUILD)
- install(TARGETS ${MATERIALX_MODULE_NAME}
- EXPORT MaterialX
- ARCHIVE DESTINATION ${MATERIALX_INSTALL_LIB_PATH}
- LIBRARY DESTINATION ${MATERIALX_INSTALL_LIB_PATH}
- RUNTIME DESTINATION bin)
-
- install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/"
- DESTINATION ${MATERIALX_INSTALL_INCLUDE_PATH}/${MATERIALX_MODULE_NAME}/ MESSAGE_NEVER
- FILES_MATCHING PATTERN "*.h*")
-
- install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE}/${MATERIALX_MODULE_NAME}.pdb"
- DESTINATION "${MATERIALX_INSTALL_LIB_PATH}/" OPTIONAL)
+ ${TARGET_NAME}
+ OpenGL::GL
+ X11::X11
+ X11::Xt)
endif()
diff --git a/source/MaterialXRenderOsl/CMakeLists.txt b/source/MaterialXRenderOsl/CMakeLists.txt
index ac1de93d2e..04d735061a 100644
--- a/source/MaterialXRenderOsl/CMakeLists.txt
+++ b/source/MaterialXRenderOsl/CMakeLists.txt
@@ -1,53 +1,14 @@
-set(MATERIALX_MODULE_NAME MaterialXRenderOsl)
file(GLOB_RECURSE materialx_source "${CMAKE_CURRENT_SOURCE_DIR}/*.cpp")
file(GLOB_RECURSE materialx_headers "${CMAKE_CURRENT_SOURCE_DIR}/*.h*")
-assign_source_group("Source Files" ${materialx_source})
-assign_source_group("Header Files" ${materialx_headers})
-
-add_library(${MATERIALX_MODULE_NAME} ${materialx_source} ${materialx_headers})
-
-add_definitions(-DMATERIALX_RENDEROSL_EXPORTS)
-
-# Create version resource
-if(MATERIALX_BUILD_SHARED_LIBS AND MSVC)
- configure_file(${CMAKE_SOURCE_DIR}/cmake/modules/MaterialXVersion.rc.in ${CMAKE_CURRENT_BINARY_DIR}/version.rc)
- target_sources(${MATERIALX_MODULE_NAME} PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/version.rc)
-endif()
-
-set_target_properties(
- ${MATERIALX_MODULE_NAME} PROPERTIES
- OUTPUT_NAME ${MATERIALX_MODULE_NAME}${MATERIALX_LIBNAME_SUFFIX}
- COMPILE_FLAGS "${EXTERNAL_COMPILE_FLAGS}"
- LINK_FLAGS "${EXTERNAL_LINK_FLAGS}"
- INSTALL_RPATH "${MATERIALX_SAME_DIR_RPATH}"
- VERSION "${MATERIALX_LIBRARY_VERSION}"
- SOVERSION "${MATERIALX_MAJOR_VERSION}")
-
-target_link_libraries(
- ${MATERIALX_MODULE_NAME}
- MaterialXRender
- ${CMAKE_DL_LIBS})
-
-target_include_directories(${MATERIALX_MODULE_NAME}
- PUBLIC
- $
- $
- PRIVATE
- ${EXTERNAL_INCLUDE_DIRS})
-
-if(NOT SKBUILD)
- install(TARGETS ${MATERIALX_MODULE_NAME}
- EXPORT MaterialX
- ARCHIVE DESTINATION ${MATERIALX_INSTALL_LIB_PATH}
- LIBRARY DESTINATION ${MATERIALX_INSTALL_LIB_PATH}
- RUNTIME DESTINATION bin)
-
- install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/"
- DESTINATION ${MATERIALX_INSTALL_INCLUDE_PATH}/${MATERIALX_MODULE_NAME}/ MESSAGE_NEVER
- FILES_MATCHING PATTERN "*.h*")
-
- install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE}/${MATERIALX_MODULE_NAME}.pdb"
- DESTINATION "${MATERIALX_INSTALL_LIB_PATH}/" OPTIONAL)
-endif()
+mx_add_library(MaterialXRenderOsl
+ SOURCE_FILES
+ ${materialx_source}
+ HEADER_FILES
+ ${materialx_headers}
+ LIBRARIES
+ MaterialXRender
+ EXPORT_DEFINE
+ MATERIALX_RENDEROSL_EXPORTS
+)
diff --git a/source/MaterialXTest/CMakeLists.txt b/source/MaterialXTest/CMakeLists.txt
index 852aa75241..4835787ed8 100644
--- a/source/MaterialXTest/CMakeLists.txt
+++ b/source/MaterialXTest/CMakeLists.txt
@@ -55,7 +55,12 @@ if(MATERIALX_BUILD_GEN_GLSL OR MATERIALX_BUILD_GEN_OSL OR MATERIALX_BUILD_GEN_MD
if(MATERIALX_BUILD_GEN_MDL)
add_subdirectory(MaterialXGenMdl)
target_link_libraries(MaterialXTest MaterialXGenMdl)
- get_target_property(MaterialXGenMdl_SOURCE_DIR MaterialXGenMdl SOURCE_DIR)
+ if (NOT MATERIALX_BUILD_MONOLITHIC)
+ get_target_property(MaterialXGenMdl_SOURCE_DIR MaterialXGenMdl SOURCE_DIR)
+ else()
+ get_target_property(MaterialX_SOURCE_DIR ${MATERIALX_MONOLITHIC_TARGET} SOURCE_DIR)
+ set(MaterialXGenMdl_SOURCE_DIR "{MaterialX_SOURCE_DIR}/MaterialXGenMdl")
+ endif()
target_compile_definitions(MaterialXTest PRIVATE -DMATERIALX_MDL_IMPL_MODULE_PATH=\"${MaterialXGenMdl_SOURCE_DIR}/mdl\")
endif()
if(MATERIALX_BUILD_GEN_MSL)