Skip to content

Commit 83c0000

Browse files
authored
Merge branch 'AcademySoftwareFoundation:main' into editor_capture
2 parents b67917a + e500729 commit 83c0000

125 files changed

Lines changed: 11234 additions & 1228 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/main.yml

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ jobs:
115115
cmake_config: -G "Visual Studio 17 2022" -A "x64"
116116
test_shaders: ON
117117
extended_build_oiio: ON
118+
extended_build_mdl_sdk: ON
118119

119120
- name: Windows_VS2022_x64_SharedLibs
120121
os: windows-2025
@@ -167,6 +168,12 @@ jobs:
167168
C:/vcpkg/vcpkg install openimageio --triplet=x64-windows
168169
Add-Content $env:GITHUB_PATH "C:/vcpkg/installed/x64-windows/bin"
169170
171+
- name: Install MDL SDK
172+
if: env.IS_EXTENDED_BUILD == 'true' && matrix.extended_build_mdl_sdk == 'ON' && runner.os == 'Windows'
173+
run: |
174+
C:/vcpkg/vcpkg install mdl-sdk --triplet=x64-windows
175+
Add-Content $env:GITHUB_PATH "C:/vcpkg/installed/x64-windows/bin"
176+
170177
- name: Install Python ${{ matrix.python }}
171178
if: matrix.python != 'None'
172179
uses: actions/setup-python@v5
@@ -185,8 +192,16 @@ jobs:
185192
- name: CMake Generate
186193
shell: bash
187194
run: |
188-
if [ "${{ env.IS_EXTENDED_BUILD }}" == "true" ] && [ "${{ matrix.extended_build_oiio }}" == "ON" ]; then
189-
EXTENDED_BUILD_CONFIG="-DMATERIALX_BUILD_OIIO=ON -DCMAKE_TOOLCHAIN_FILE=C:/vcpkg/scripts/buildsystems/vcpkg.cmake -DVCPKG_TARGET_TRIPLET=x64-windows"
195+
if [ "${{ env.IS_EXTENDED_BUILD }}" == "true" ]; then
196+
if [ "${{ runner.os }}" == "Windows" ]; then
197+
EXTENDED_BUILD_CONFIG="-DCMAKE_TOOLCHAIN_FILE=C:/vcpkg/scripts/buildsystems/vcpkg.cmake -DVCPKG_TARGET_TRIPLET=x64-windows"
198+
fi
199+
if [ "${{ matrix.extended_build_oiio }}" == "ON" ]; then
200+
EXTENDED_BUILD_CONFIG="$EXTENDED_BUILD_CONFIG -DMATERIALX_BUILD_OIIO=ON"
201+
fi
202+
if [ "${{ matrix.extended_build_mdl_sdk }}" == "ON" -a "${{ runner.os }}" == "Windows" ]; then
203+
EXTENDED_BUILD_CONFIG="$EXTENDED_BUILD_CONFIG -DMATERIALX_MDL_SDK_DIR=C:/vcpkg/installed/x64-windows"
204+
fi
190205
fi
191206
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 $EXTENDED_BUILD_CONFIG ${{matrix.cmake_config}}
192207

CMakeLists.txt

Lines changed: 49 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/lib)
1414
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/lib)
1515
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin)
1616

17-
# JavaScript setup
17+
# JavaScript setup
1818
option(MATERIALX_BUILD_JS "Build the MaterialX JavaScript package from C++ bindings. Requires the emscripten environment." OFF)
1919
set(MATERIALX_EMSDK_PATH "" CACHE PATH "Path to EMSDK (e.g. 'D:/Projects/emsdk').")
2020
if (MATERIALX_BUILD_JS)
@@ -39,15 +39,17 @@ option(MATERIALX_BUILD_GRAPH_EDITOR "Build the MaterialX Graph Editor." OFF)
3939
option(MATERIALX_BUILD_DOCS "Create HTML documentation using Doxygen. Requires that Doxygen be installed." OFF)
4040

4141
option(MATERIALX_BUILD_GEN_GLSL "Build the GLSL shader generator back-end." ON)
42-
option(MATERIALX_BUILD_GEN_OSL "Build the OSL shader generator back-end." ON)
42+
option(MATERIALX_BUILD_GEN_OSL "Build the OSL shader generator back-ends." ON)
4343
option(MATERIALX_BUILD_GEN_MDL "Build the MDL shader generator back-end." ON)
4444
option(MATERIALX_BUILD_GEN_MSL "Build the MSL shader generator back-end." ON)
45+
option(MATERIALX_BUILD_GEN_SLANG "Build the Slang shader generator back-end." ON)
4546
option(MATERIALX_BUILD_RENDER "Build the MaterialX Render modules." ON)
4647
option(MATERIALX_BUILD_RENDER_PLATFORMS "Build platform-specific render modules for each shader generator." ON)
4748
option(MATERIALX_BUILD_OIIO "Build OpenImageIO support for MaterialXRender." OFF)
4849
option(MATERIALX_BUILD_OCIO "Build OpenColorIO support for shader generators." OFF)
4950
option(MATERIALX_BUILD_TESTS "Build unit tests." OFF)
5051
option(MATERIALX_BUILD_BENCHMARK_TESTS "Build benchmark tests." OFF)
52+
option(MATERIALX_BUILD_OSOS "Build OSL .oso's of standard library shaders for the OSL Network generator" OFF)
5153

5254
option(MATERIALX_BUILD_SHARED_LIBS "Build MaterialX libraries as shared rather than static." OFF)
5355
option(MATERIALX_BUILD_DATA_LIBRARY "Build generated products from the MaterialX data library." OFF)
@@ -85,6 +87,8 @@ if (CMAKE_SYSTEM_NAME MATCHES "iOS" OR CMAKE_SYSTEM_NAME MATCHES "tvOS" OR CMAKE
8587
set(MATERIALX_BUILD_GEN_GLSL OFF)
8688
set(MATERIALX_BUILD_GEN_OSL OFF)
8789
set(MATERIALX_BUILD_GEN_MDL OFF)
90+
set(MATERIALX_BUILD_GEN_SLANG OFF)
91+
set(MATERIALX_BUILD_OSOS OFF)
8892
set(MATERIALX_BUILD_TESTS OFF)
8993
endif()
9094

@@ -103,6 +107,7 @@ if (MATERIALX_BUILD_APPLE_FRAMEWORK)
103107
endif()
104108

105109
if (MATERIALX_BUILD_JS)
110+
set(MATERIALX_BUILD_OSOS OFF)
106111
set(MATERIALX_BUILD_RENDER OFF)
107112
set(MATERIALX_BUILD_TESTS OFF)
108113
endif()
@@ -130,21 +135,26 @@ set(MATERIALX_OSL_BINARY_OSLC "" CACHE FILEPATH "Full path to the OSL compiler b
130135
set(MATERIALX_OSL_BINARY_TESTRENDER "" CACHE FILEPATH "Full path to the OSL test render binary.")
131136
set(MATERIALX_OSL_INCLUDE_PATH "" CACHE PATH "Full path to OSL shader includes (e.g. 'stdosl.h').")
132137

138+
# Helpers for Slang validation
139+
set(MATERIALX_SLANG_RHI_SOURCE_DIR "" CACHE PATH "Full path to the Slang RHI build directory.")
140+
133141
set(MATERIALX_PYTHON_FOLDER_NAME "python/MaterialX" CACHE INTERNAL "Folder name to user for installing the Python library.")
134142

135143
if(SKBUILD)
136144
set(MATERIALX_PYTHON_FOLDER_NAME "MaterialX")
137145
endif()
138146

139-
# Helpers for MDL validation
140-
if (MATERIALX_BUILD_GEN_MDL)
141-
set(MATERIALX_MDLC_EXECUTABLE "" CACHE FILEPATH "Full path to the mdlc binary.")
142-
set(MATERIALX_MDL_RENDER_EXECUTABLE "" CACHE FILEPATH "Full path to the mdl renderer binary.")
143-
set(MATERIALX_MDL_RENDER_ARGUMENTS "" CACHE STRING "Custom arguments for renderer.")
144-
set(MATERIALX_MDL_MODULE_PATHS "" CACHE FILEPATH "Comma separated list of MDL module paths.")
145-
set(MATERIALX_INSTALL_MDL_MODULE_PATH ${MATERIALX_INSTALL_STDLIB_PATH} CACHE FILEPATH "Install path for mdl module.")
147+
if (MATERIALX_BUILD_OSOS)
148+
set(MATERIALX_BUILD_DATA_LIBRARY ON)
149+
set(MATERIALX_BUILD_GEN_OSL ON)
150+
set(MATERIALX_BUILD_RENDER ON)
151+
set(MATERIALX_BUILD_RENDER_PLATFORMS ON)
146152
endif()
147153

154+
# Helpers for MDL validation
155+
set(MATERIALX_MDL_SDK_DIR "" CACHE PATH "Path to the MDL SDK directory that contains 'include', 'lib', etc.")
156+
set(MATERIALX_MDL_MODULE_PATHS "" CACHE FILEPATH "Comma separated list of MDL module paths.")
157+
148158
# Namespace
149159
set(MATERIALX_NAMESPACE_SUFFIX "" CACHE STRING "Add a suffix to the main MaterialX C++ namespace: Options include dev, staging, <YOURFACILITY> etc.")
150160
if(MATERIALX_NAMESPACE_SUFFIX STREQUAL "")
@@ -161,9 +171,11 @@ set(MATERIALX_LIBNAME_SUFFIX "" CACHE STRING "Specify a suffix to all libraries
161171

162172
mark_as_advanced(MATERIALX_BUILD_DOCS)
163173
mark_as_advanced(MATERIALX_BUILD_GEN_GLSL)
174+
mark_as_advanced(MATERIALX_BUILD_GEN_SLANG)
164175
mark_as_advanced(MATERIALX_BUILD_GEN_OSL)
165176
mark_as_advanced(MATERIALX_BUILD_GEN_MDL)
166177
mark_as_advanced(MATERIALX_BUILD_GEN_MSL)
178+
mark_as_advanced(MATERIALX_BUILD_OSOS)
167179
mark_as_advanced(MATERIALX_BUILD_RENDER)
168180
mark_as_advanced(MATERIALX_BUILD_RENDER_PLATFORMS)
169181
mark_as_advanced(MATERIALX_BUILD_OIIO)
@@ -196,13 +208,10 @@ mark_as_advanced(MATERIALX_BUILD_JS)
196208
mark_as_advanced(MATERIALX_EMSDK_PATH)
197209
mark_as_advanced(MATERIALX_BUILD_IOS)
198210
mark_as_advanced(MATERIALX_BUILD_APPLE_FRAMEWORK)
199-
if (MATERIALX_BUILD_GEN_MDL)
200-
mark_as_advanced(MATERIALX_MDLC_EXECUTABLE)
201-
mark_as_advanced(MATERIALX_MDL_RENDER_EXECUTABLE)
202-
mark_as_advanced(MATERIALX_MDL_RENDER_ARGUMENTS)
203-
mark_as_advanced(MATERIALX_MDL_MODULE_PATHS)
204-
mark_as_advanced(MATERIALX_INSTALL_MDL_MODULE_PATH)
205-
endif()
211+
mark_as_advanced(MATERIALX_MDL_BINARY_MDLC)
212+
mark_as_advanced(MATERIALX_MDL_MODULE_PATHS)
213+
mark_as_advanced(MATERIALX_MDL_SDK_DIR)
214+
mark_as_advanced(MATERIALX_SLANG_RHI_SOURCE_DIR)
206215

207216
if (MATERIALX_BUILD_USE_CCACHE)
208217
# Setup CCache for C/C++ compilation
@@ -215,7 +224,7 @@ endif()
215224

216225
# Allow the OSL CMake package to provide binary locations for render tests.
217226
# This will not override explicitly provided oslc, testrender, and include paths.
218-
if(MATERIALX_BUILD_RENDER AND MATERIALX_BUILD_GEN_OSL AND MATERIALX_BUILD_TESTS)
227+
if((MATERIALX_BUILD_RENDER AND MATERIALX_BUILD_GEN_OSL AND MATERIALX_BUILD_TESTS) OR MATERIALX_BUILD_OSOS)
219228
find_package(OSL QUIET)
220229
if(OSL_FOUND)
221230
if(NOT MATERIALX_OSL_BINARY_OSLC)
@@ -225,6 +234,10 @@ if(MATERIALX_BUILD_RENDER AND MATERIALX_BUILD_GEN_OSL AND MATERIALX_BUILD_TESTS)
225234
# OSL does not yet export a CMake target for testrender.
226235
set(MATERIALX_OSL_BINARY_TESTRENDER $<TARGET_FILE_DIR:OSL::oslc>/testrender)
227236
endif()
237+
if(NOT MATERIALX_OSL_INCLUDE_PATH)
238+
# OSL does not yet export a CMake target for testrender.
239+
set(MATERIALX_OSL_INCLUDE_PATH $<TARGET_FILE_DIR:OSL::oslc>/../include)
240+
endif()
228241
endif()
229242
endif()
230243

@@ -236,12 +249,11 @@ if (MATERIALX_BUILD_BENCHMARK_TESTS)
236249
add_definitions(-DMATERIALX_BUILD_BENCHMARK_TESTS)
237250
endif()
238251

239-
if (MATERIALX_BUILD_GEN_MDL)
240-
add_definitions(-DMATERIALX_MDLC_EXECUTABLE=\"${MATERIALX_MDLC_EXECUTABLE}\")
241-
add_definitions(-DMATERIALX_MDL_RENDER_EXECUTABLE=\"${MATERIALX_MDL_RENDER_EXECUTABLE}\")
242-
add_definitions(-DMATERIALX_MDL_RENDER_ARGUMENTS=\"${MATERIALX_MDL_RENDER_ARGUMENTS}\")
243-
add_definitions(-DMATERIALX_MDL_MODULE_PATHS=\"${MATERIALX_MDL_MODULE_PATHS}\")
244-
add_definitions(-DMATERIALX_INSTALL_MDL_MODULE_PATH=\"${MATERIALX_INSTALL_MDL_MODULE_PATH}\")
252+
# GEN MDL does not have any additional dependencies. For loading and compiling MDL, e.g., in the test renderer, the MDL SDK is needed.
253+
if(MATERIALX_MDL_SDK_DIR)
254+
find_package(mdl QUIET CONFIG REQUIRED PATHS ${MATERIALX_MDL_SDK_DIR})
255+
get_target_property(MATERIALX_MDL_BINARY_MDLC mdl::mdlc LOCATION)
256+
set(MATERIALX_MDL_BINARY_MDLC ${MATERIALX_MDL_BINARY_MDLC} CACHE FILEPATH "Full path to the mdlc binary." FORCE)
245257
endif()
246258

247259
# Adjust the default installation path
@@ -325,7 +337,7 @@ function(assign_source_group prefix)
325337
endfunction(assign_source_group)
326338

327339
function(mx_add_library MATERIALX_MODULE_NAME)
328-
set(options ADD_OBJECTIVE_C_CODE)
340+
set(options ADD_OBJECTIVE_C_CODE SKIP_INSTALL)
329341
set(oneValueArgs EXPORT_DEFINE)
330342
set(multiValueArgs
331343
SOURCE_FILES
@@ -410,7 +422,7 @@ function(mx_add_library MATERIALX_MODULE_NAME)
410422

411423
target_compile_definitions(${TARGET_NAME} PRIVATE "-D${args_EXPORT_DEFINE}")
412424

413-
if(NOT SKBUILD)
425+
if(NOT SKBUILD AND NOT args_SKIP_INSTALL)
414426
if(NOT MATERIALX_BUILD_MONOLITHIC)
415427
install(TARGETS ${MATERIALX_MODULE_NAME}
416428
EXPORT MaterialX
@@ -454,19 +466,25 @@ add_subdirectory(source/MaterialXFormat)
454466

455467
# Add shader generation subdirectories
456468
add_subdirectory(source/MaterialXGenShader)
457-
if(MATERIALX_BUILD_GEN_GLSL OR MATERIALX_BUILD_GEN_OSL OR MATERIALX_BUILD_GEN_MDL OR MATERIALX_BUILD_GEN_MSL)
458-
if(MATERIALX_BUILD_GEN_GLSL OR MATERIALX_BUILD_GEN_MSL)
469+
if(MATERIALX_BUILD_GEN_GLSL OR MATERIALX_BUILD_GEN_OSL OR MATERIALX_BUILD_GEN_MDL OR MATERIALX_BUILD_GEN_MSL OR MATERIALX_BUILD_GEN_SLANG)
470+
if(MATERIALX_BUILD_GEN_GLSL OR MATERIALX_BUILD_GEN_MSL OR MATERIALX_BUILD_GEN_SLANG)
459471
add_subdirectory(source/MaterialXGenHw)
460472
endif()
461-
462473
if (MATERIALX_BUILD_GEN_GLSL)
463474
add_definitions(-DMATERIALX_BUILD_GEN_GLSL)
464475
add_subdirectory(source/MaterialXGenGlsl)
465476
endif()
477+
if (MATERIALX_BUILD_GEN_SLANG)
478+
add_definitions(-DMATERIALX_BUILD_GEN_SLANG)
479+
add_subdirectory(source/MaterialXGenSlang)
480+
endif()
466481
if (MATERIALX_BUILD_GEN_OSL)
467482
add_definitions(-DMATERIALX_BUILD_GEN_OSL)
468483
add_subdirectory(source/MaterialXGenOsl)
469484
endif()
485+
if (MATERIALX_BUILD_OSOS)
486+
add_definitions(-DMATERIALX_BUILD_OSOS)
487+
endif()
470488
if (MATERIALX_BUILD_GEN_MDL)
471489
add_definitions(-DMATERIALX_BUILD_GEN_MDL)
472490
add_subdirectory(source/MaterialXGenMdl)
@@ -497,6 +515,9 @@ if(MATERIALX_BUILD_RENDER)
497515
if(MATERIALX_BUILD_GEN_OSL)
498516
add_subdirectory(source/MaterialXRenderOsl)
499517
endif()
518+
if(MATERIALX_BUILD_GEN_SLANG AND MATERIALX_SLANG_RHI_SOURCE_DIR)
519+
add_subdirectory(source/MaterialXRenderSlang)
520+
endif()
500521
endif()
501522
if(MATERIALX_BUILD_VIEWER)
502523
add_subdirectory(source/MaterialXView)

CONTRIBUTING.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -200,13 +200,13 @@ with these guidelines.
200200
#### Naming Conventions
201201

202202
Class names should use PascalCase, as in `NodeGraph` or `ShaderGenerator`.
203-
Method names should use camelCase starting with a lowercase letter, for
204-
example `getNode` or `setName`. Protected and private member variables should
205-
use an underscore prefix, such as `_name` or `_parent`. Constants should be
206-
written in UPPER_CASE with underscores separating words, as in `EMPTY_STRING`
207-
or `CATEGORY`. Type aliases should append appropriate suffixes to indicate
208-
their purpose, using `Ptr` for pointers, `Vec` for vectors, `Map` for maps,
209-
and `Set` for sets.
203+
Variable and function names should use camelCase starting with a lowercase
204+
letter, as in `childName` or `getNode`. Protected and private member variables
205+
additionally require an underscore prefix, as in `_parent` or `_childMap`.
206+
Constants should be written in UPPER_CASE with underscores separating words,
207+
as in `EMPTY_STRING` or `CATEGORY`. Type aliases should append appropriate
208+
suffixes to indicate their purpose, using `Ptr` for pointers, `Vec` for
209+
vectors, `Map` for maps, and `Set` for sets.
210210

211211
#### Static Constants and Class Organization
212212

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ MaterialX is an open standard for representing rich material and look-developmen
1717
- Point CMake to the root of the MaterialX library and generate C++ projects for your platform and compiler.
1818
- Select the `MATERIALX_BUILD_PYTHON` option to build Python bindings.
1919
- Select the `MATERIALX_BUILD_VIEWER` option to build the [MaterialX Viewer](https://github.com/AcademySoftwareFoundation/MaterialX/blob/main/documents/DeveloperGuide/Viewer.md).
20-
- Select the `MATERIALX_BUILD_GRAPH_EDITOR` option to build the [MaterialX Graph Editor](https://github.com/AcademySoftwareFoundation/MaterialX/blob/main/documents/DeveloperGuide/GraphEditor.md).
20+
- Select the `MATERIALX_BUILD_GRAPH_EDITOR` option to build the [MaterialX Graph Editor](https://github.com/AcademySoftwareFoundation/MaterialX/blob/main/documents/DeveloperGuide/GraphEditor.md).
2121

2222
## Supported Platforms
2323

documents/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ set(MATERIALX_DOXYGEN_SOURCE_FOLDERS
99
${PROJECT_SOURCE_DIR}/source/MaterialXGenShader/Nodes
1010
${PROJECT_SOURCE_DIR}/source/MaterialXGenGlsl
1111
${PROJECT_SOURCE_DIR}/source/MaterialXGenGlsl/Nodes
12+
${PROJECT_SOURCE_DIR}/source/MaterialXGenSlang
1213
${PROJECT_SOURCE_DIR}/source/MaterialXGenOsl
1314
${PROJECT_SOURCE_DIR}/source/MaterialXGenMdl
1415
${PROJECT_SOURCE_DIR}/source/MaterialXRender

documents/Specification/MaterialX.Specification.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ Because the same word can be used to mean slightly different things in different
9999

100100
An **Element** is a named object within a MaterialX document, which may possess any number of child elements and attributes. An **Attribute** is a named property of a MaterialX element.
101101

102-
A **Node** is a function that generates or operates upon spatially-varying data. This specification provides a set of standard nodes with precise definitions, and also supports the creation of custom nodes for application-specific uses. The interface for a node’s incoming data is declared through **Inputs**, which may be spatially-varying or uniform, and **Tokens**, which are string values that can be substituted into filenames declared in node inputs.
102+
A **Node** is a function that generates or operates upon spatially-varying data. This specification provides a set of standard nodes with precise definitions, and also supports the creation of custom nodes for application-specific uses. The interface for a node’s incoming data is declared through **Inputs**, which may be spatially-varying or uniform, and **Tokens**, which are string values that can be substituted into filenames declared in node inputs. The interface for a node's outgoing data is declared through one or more **Outputs**; a node's Inputs, Tokens and Outputs are collectively referred to as the node's **Ports**.
103103

104104
A **Pattern** is a node that generates or processes simple scalar, vector, and color data, and has access to local properties of any geometry that has been bound.
105105

@@ -937,7 +937,7 @@ Specific applications will commonly support sources and operators that do not ma
937937

938938
### Custom Node Declaration NodeDef Elements
939939

940-
Each custom node must be explicitly declared with a &lt;nodedef> element, with child &lt;input>, &lt;token> and &lt;output> elements specifying the expected names and types of the node’s inputs and output(s).
940+
Each custom node must be explicitly declared with a &lt;nodedef> element, with child &lt;input>, &lt;token> and &lt;output> elements specifying the expected names and types of the node’s ports.
941941

942942
Attributes for &lt;nodedef> elements:
943943

0 commit comments

Comments
 (0)