Skip to content

Commit 5ec889d

Browse files
committed
Add JS bindings and test.
1 parent c3fa446 commit 5ec889d

3 files changed

Lines changed: 39 additions & 1 deletion

File tree

javascript/MaterialXTest/browser/shaderGenerator.spec.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@ describe('Generate Shaders', function ()
5151
generators.push(mx.WgslShaderGenerator.create());
5252
if (typeof mx.MdlShaderGenerator != 'undefined')
5353
generators.push(mx.MdlShaderGenerator.create());
54+
if (typeof mx.SlangShaderGenerator != 'undefined')
55+
generators.push(mx.SlangShaderGenerator.create());
5456

5557
const elem = mx.findRenderableElement(doc);
5658
for (let gen of generators)

source/JsMaterialX/CMakeLists.txt

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ set(GENMSL ${CMAKE_CURRENT_SOURCE_DIR}/JsMaterialXGenMsl/)
88
set(GENVK ${CMAKE_CURRENT_SOURCE_DIR}/JsMaterialXGenVk/)
99
set(GENMDL ${CMAKE_CURRENT_SOURCE_DIR}/JsMaterialXGenMdl/)
1010
set(GENWGSL ${CMAKE_CURRENT_SOURCE_DIR}/JsMaterialXGenWgsl/)
11+
set(GENSLANG ${CMAKE_CURRENT_SOURCE_DIR}/JsMaterialXGenSlang/)
1112

1213
set(SOURCE_FOLDER ${PROJECT_SOURCE_DIR}/source)
1314

@@ -50,6 +51,7 @@ set(GENMSL_DEPS ${GENMSL}JsMslShaderGenerator.cpp)
5051
set(GENVK_DEPS ${GENVK}JsVkShaderGenerator.cpp)
5152
set(GENWGSL_DEPS ${GENWGSL}JsWgslShaderGenerator.cpp)
5253
set(GENMDL_DEPS ${GENMDL}JsMdlShaderGenerator.cpp)
54+
set(GENSLANG_DEPS ${GENSLANG}JsSlangShaderGenerator.cpp)
5355

5456
# Linker flags
5557
set(JS_LINK_FLAGS_CORE "")
@@ -114,6 +116,10 @@ if (MATERIALX_BUILD_GEN_MSL)
114116
message("JS: Building JsMaterialXGenShader with MSL support")
115117
target_sources(JsMaterialXGenShader PRIVATE ${GENMSL_DEPS})
116118
endif()
119+
if (MATERIALX_BUILD_GEN_SLANG)
120+
message("JS: Building JsMaterialXGenShader with Slang support")
121+
target_sources(JsMaterialXGenShader PRIVATE ${GENSLANG_DEPS})
122+
endif()
117123

118124
set_target_properties(JsMaterialXCore
119125
PROPERTIES
@@ -152,7 +158,10 @@ if (MATERIALX_BUILD_GEN_MDL)
152158
endif()
153159
if (MATERIALX_BUILD_GEN_MSL)
154160
target_link_libraries(JsMaterialXGenShader PUBLIC MaterialXGenMsl)
155-
endif()
161+
endif()
162+
if (MATERIALX_BUILD_GEN_SLANG)
163+
target_link_libraries(JsMaterialXGenShader PUBLIC MaterialXGenSlang)
164+
endif()
156165

157166
# Install the JavaScript output
158167
install(TARGETS JsMaterialXCore DESTINATION "JavaScript/MaterialX")
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
//
2+
// Copyright Contributors to the MaterialX Project
3+
// SPDX-License-Identifier: Apache-2.0
4+
//
5+
6+
#include <MaterialXGenSlang/SlangShaderGenerator.h>
7+
#include <MaterialXGenShader/Util.h>
8+
9+
#include <emscripten/bind.h>
10+
11+
namespace ems = emscripten;
12+
namespace mx = MaterialX;
13+
14+
namespace
15+
{
16+
// Creator wrapper to avoid having to expose the TypeSystem class in JavaScript
17+
mx::ShaderGeneratorPtr SlangShaderGenerator_create()
18+
{
19+
return mx::SlangShaderGenerator::create();
20+
}
21+
}
22+
23+
EMSCRIPTEN_BINDINGS(SlangShaderGenerator)
24+
{
25+
ems::class_<mx::SlangShaderGenerator, ems::base<mx::HwShaderGenerator>>("SlangShaderGenerator")
26+
.class_function("create", &SlangShaderGenerator_create);
27+
}

0 commit comments

Comments
 (0)