@plasius/gpu-shared 0.1.2 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +20 -0
- package/README.md +19 -1
- package/dist/index.cjs +43 -9
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +1 -1
- package/dist/{showcase-runtime-67CHJBNO.js → showcase-runtime-V72XV55N.js} +44 -10
- package/dist/{showcase-runtime-67CHJBNO.js.map → showcase-runtime-V72XV55N.js.map} +1 -1
- package/package.json +1 -1
- package/src/index.d.ts +1 -0
- package/src/showcase-runtime.js +48 -8
package/package.json
CHANGED
package/src/index.d.ts
CHANGED
package/src/showcase-runtime.js
CHANGED
|
@@ -1794,6 +1794,9 @@ function syncTextState(state, shipModel) {
|
|
|
1794
1794
|
export async function mountGpuShowcase(options = {}) {
|
|
1795
1795
|
injectStyles();
|
|
1796
1796
|
const root = options.root ?? document.body;
|
|
1797
|
+
const previousMarkup = root.innerHTML;
|
|
1798
|
+
const previousRenderGameToText = window.render_game_to_text;
|
|
1799
|
+
const previousAdvanceTime = window.advanceTime;
|
|
1797
1800
|
const focus = options.focus ?? new URLSearchParams(window.location.search).get("focus") ?? "integrated";
|
|
1798
1801
|
const dom = buildDemoDom(root, {
|
|
1799
1802
|
packageName: options.packageName ?? "@plasius/gpu-demo-viewer",
|
|
@@ -1813,7 +1816,14 @@ export async function mountGpuShowcase(options = {}) {
|
|
|
1813
1816
|
syncTextState(state, shipModel);
|
|
1814
1817
|
|
|
1815
1818
|
const ctx = dom.canvas.getContext("2d");
|
|
1819
|
+
let destroyed = false;
|
|
1820
|
+
let frameHandle = null;
|
|
1821
|
+
|
|
1816
1822
|
const renderFrame = (nowMs) => {
|
|
1823
|
+
if (destroyed) {
|
|
1824
|
+
return;
|
|
1825
|
+
}
|
|
1826
|
+
|
|
1817
1827
|
if (!state.paused) {
|
|
1818
1828
|
if (state.lastTimeMs == null) {
|
|
1819
1829
|
state.lastTimeMs = nowMs;
|
|
@@ -1831,29 +1841,59 @@ export async function mountGpuShowcase(options = {}) {
|
|
|
1831
1841
|
state.demoDescription = resolveSceneDescription(state, options, shipModel).description;
|
|
1832
1842
|
renderScene(ctx, dom.canvas, state, shipModel, dom);
|
|
1833
1843
|
syncTextState(state, shipModel);
|
|
1834
|
-
requestAnimationFrame(renderFrame);
|
|
1844
|
+
frameHandle = requestAnimationFrame(renderFrame);
|
|
1835
1845
|
};
|
|
1836
1846
|
|
|
1837
|
-
|
|
1847
|
+
const handlePauseClick = () => {
|
|
1838
1848
|
state.paused = !state.paused;
|
|
1839
1849
|
dom.pauseButton.textContent = state.paused ? "Resume" : "Pause";
|
|
1840
|
-
}
|
|
1841
|
-
|
|
1850
|
+
};
|
|
1851
|
+
const handleStressChange = () => {
|
|
1842
1852
|
state.stress = dom.stressToggle.checked;
|
|
1843
|
-
}
|
|
1844
|
-
|
|
1853
|
+
};
|
|
1854
|
+
const handleFocusChange = () => {
|
|
1845
1855
|
state.focus = dom.focusMode.value;
|
|
1846
1856
|
Object.assign(state.camera, {
|
|
1847
1857
|
...CAMERA_PRESETS[state.focus],
|
|
1848
1858
|
target: vec3(...CAMERA_PRESETS[state.focus].target),
|
|
1849
1859
|
});
|
|
1850
|
-
}
|
|
1860
|
+
};
|
|
1861
|
+
|
|
1862
|
+
dom.pauseButton.addEventListener("click", handlePauseClick);
|
|
1863
|
+
dom.stressToggle.addEventListener("change", handleStressChange);
|
|
1864
|
+
dom.focusMode.addEventListener("change", handleFocusChange);
|
|
1851
1865
|
|
|
1852
|
-
requestAnimationFrame(renderFrame);
|
|
1866
|
+
frameHandle = requestAnimationFrame(renderFrame);
|
|
1853
1867
|
return {
|
|
1854
1868
|
state,
|
|
1855
1869
|
shipModel,
|
|
1856
1870
|
canvas: dom.canvas,
|
|
1871
|
+
destroy() {
|
|
1872
|
+
if (destroyed) {
|
|
1873
|
+
return;
|
|
1874
|
+
}
|
|
1875
|
+
|
|
1876
|
+
destroyed = true;
|
|
1877
|
+
if (frameHandle != null) {
|
|
1878
|
+
cancelAnimationFrame(frameHandle);
|
|
1879
|
+
}
|
|
1880
|
+
dom.pauseButton.removeEventListener("click", handlePauseClick);
|
|
1881
|
+
dom.stressToggle.removeEventListener("change", handleStressChange);
|
|
1882
|
+
dom.focusMode.removeEventListener("change", handleFocusChange);
|
|
1883
|
+
root.innerHTML = previousMarkup;
|
|
1884
|
+
|
|
1885
|
+
if (typeof previousRenderGameToText === "function") {
|
|
1886
|
+
window.render_game_to_text = previousRenderGameToText;
|
|
1887
|
+
} else {
|
|
1888
|
+
delete window.render_game_to_text;
|
|
1889
|
+
}
|
|
1890
|
+
|
|
1891
|
+
if (typeof previousAdvanceTime === "function") {
|
|
1892
|
+
window.advanceTime = previousAdvanceTime;
|
|
1893
|
+
} else {
|
|
1894
|
+
delete window.advanceTime;
|
|
1895
|
+
}
|
|
1896
|
+
},
|
|
1857
1897
|
};
|
|
1858
1898
|
}
|
|
1859
1899
|
|