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)