summaryrefslogtreecommitdiffstats
path: root/examples/model-viewer/main.cpp
diff options
context:
space:
mode:
authorkaizhangNV <149626564+kaizhangNV@users.noreply.github.com>2024-08-28 19:36:31 -0500
committerGitHub <noreply@github.com>2024-08-28 17:36:31 -0700
commitefda04f3cc784dde42bd15fd1d33edeea0f3cd92 (patch)
tree25f9785309efbe97cd1ba2384411e1b332159c89 /examples/model-viewer/main.cpp
parentd3a5a4723e0ba0f90ac3a0df3dd841d1f0c69782 (diff)
Migrate 3 more examples to slang-unit-test (#4927)
* Convert 'ray-tracing-pipeline' example into slang-test * Convert model-view and 'autodiff-texture' examples to slang-test * Add more error message in RecordReplay test * Fix a shader issue in autodiff-texture
Diffstat (limited to 'examples/model-viewer/main.cpp')
-rw-r--r--examples/model-viewer/main.cpp45
1 files changed, 36 insertions, 9 deletions
diff --git a/examples/model-viewer/main.cpp b/examples/model-viewer/main.cpp
index 8627fe2c4..7ca5eeb74 100644
--- a/examples/model-viewer/main.cpp
+++ b/examples/model-viewer/main.cpp
@@ -51,10 +51,14 @@ struct RendererContext
slang::TypeReflection* perViewShaderType;
slang::TypeReflection* perModelShaderType;
- Result init(IDevice* inDevice)
+ TestBase *pTestBase;
+
+ Result init(IDevice* inDevice, TestBase* inTestBase)
{
device = inDevice;
ComPtr<ISlangBlob> diagnostic;
+ pTestBase = inTestBase;
+
Slang::String path = resourceBase.resolveResource("shaders.slang").getBuffer();
shaderModule = device->getSlangSession()->loadModule(
path.getBuffer(),
@@ -108,6 +112,12 @@ struct RendererContext
diagnosticsBlob.writeRef());
diagnoseIfNeeded(diagnosticsBlob);
SLANG_RETURN_ON_FAIL(result);
+
+ if (pTestBase && pTestBase->isTestMode())
+ {
+ pTestBase->printEntrypointHashes(componentTypes.getCount() - 1, 1, composedProgram);
+ }
+
slangReflection = composedProgram->getLayout();
// At this point, `composedProgram` represents the shader program
@@ -740,14 +750,18 @@ void onMouseUp(platform::MouseEventArgs args)
Result initialize()
{
initializeBase("Model Viewer", 1024, 768);
- gWindow->events.mouseMove = [this](const platform::MouseEventArgs& e) { onMouseMove(e); };
- gWindow->events.mouseUp = [this](const platform::MouseEventArgs& e) { onMouseUp(e); };
- gWindow->events.mouseDown = [this](const platform::MouseEventArgs& e) { onMouseDown(e); };
- gWindow->events.keyDown = [this](const platform::KeyEventArgs& e) { onKeyDown(e); };
- gWindow->events.keyUp = [this](const platform::KeyEventArgs& e) { onKeyUp(e); };
+ if (!isTestMode())
+ {
+ gWindow->events.mouseMove = [this](const platform::MouseEventArgs& e) { onMouseMove(e); };
+ gWindow->events.mouseUp = [this](const platform::MouseEventArgs& e) { onMouseUp(e); };
+ gWindow->events.mouseDown = [this](const platform::MouseEventArgs& e) { onMouseDown(e); };
+ gWindow->events.keyDown = [this](const platform::KeyEventArgs& e) { onKeyDown(e); };
+ gWindow->events.keyUp = [this](const platform::KeyEventArgs& e) { onKeyUp(e); };
+ }
// Initialize `RendererContext`, which loads the shader module from file.
- SLANG_RETURN_ON_FAIL(context.init(gDevice));
+ SLANG_RETURN_ON_FAIL(context.init(gDevice, this));
+
InputElementDesc inputElements[] = {
{"POSITION", 0, Format::R32G32B32_FLOAT, offsetof(Model::Vertex, position) },
@@ -817,7 +831,17 @@ void renderFrame(int frameIndex) override
// to set up our various transformation matrices.
//
glm::mat4x4 identity = glm::mat4x4(1.0f);
- auto clientRect = getWindow()->getClientRect();
+
+ platform::Rect clientRect{};
+ if (isTestMode())
+ {
+ clientRect.width = 1024;
+ clientRect.height = 768;
+ }
+ else
+ {
+ clientRect = getWindow()->getClientRect();
+ }
if (clientRect.height == 0)
return;
glm::mat4x4 projection = glm::perspectiveRH_ZO(
@@ -933,7 +957,10 @@ void renderFrame(int frameIndex) override
drawCommandBuffer->close();
gQueue->executeCommandBuffer(drawCommandBuffer);
- gSwapchain->present();
+ if (!isTestMode())
+ {
+ gSwapchain->present();
+ }
}
};