Skip to content

Commit 9a9c668

Browse files
committed
refine webgpu gallery
1 parent deb0be7 commit 9a9c668

15 files changed

Lines changed: 211 additions & 146 deletions

gallery.css

Lines changed: 28 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -53,16 +53,10 @@ a:focus-visible, button:focus-visible { outline: 2px solid var(--copper-bright);
5353
clip-path: polygon(0 0,100% 0,100% 70%,70% 100%,0 100%);
5454
}
5555
.brand-copy { display: flex; flex-direction: column; gap: 2px; }
56-
.brand-copy strong { font-size: 15px; letter-spacing: .08em; }
57-
.brand-copy small {
58-
color: var(--stone-dark);
59-
font: 10px/1.3 var(--mono);
60-
letter-spacing: .13em;
61-
text-transform: uppercase;
62-
}
63-
.main-nav { display: flex; gap: 38px; color: var(--stone); font: 12px/1 var(--mono); letter-spacing: .08em; text-transform: uppercase; }
56+
.brand-copy strong { font-size: 13px; letter-spacing: .05em; white-space: nowrap; }
57+
.gallery-label { color: var(--stone); font: 11px/1 var(--mono); letter-spacing: .1em; text-transform: uppercase; }
6458
.header-link { justify-self: end; display: flex; gap: 12px; font: 12px/1 var(--mono); letter-spacing: .08em; text-transform: uppercase; }
65-
.main-nav a:hover, .header-link:hover { color: var(--copper-bright); }
59+
.header-link:hover { color: var(--copper-bright); }
6660

6761
.eyebrow {
6862
display: flex;
@@ -112,35 +106,46 @@ a:focus-visible, button:focus-visible { outline: 2px solid var(--copper-bright);
112106
position: absolute;
113107
top: 16px;
114108
right: 16px;
115-
min-width: 154px;
116-
padding: 13px 14px;
117-
display: grid;
118-
gap: 5px;
109+
width: 174px;
110+
overflow: hidden;
119111
color: var(--stone);
120112
background: rgba(11, 11, 10, .86);
121113
border: 1px solid rgba(255, 255, 255, .12);
122114
border-radius: 9px;
123115
box-shadow: 0 12px 36px rgba(0, 0, 0, .28);
124116
backdrop-filter: blur(12px);
125117
font: 10px/1.3 var(--mono);
126-
pointer-events: none;
127118
}
128-
.debug-overlay[hidden] { display: none; }
129-
.debug-overlay b { color: var(--paper); font-size: 13px; font-weight: 600; }
130-
.debug-overlay small { margin-top: 3px; color: var(--stone-dark); }
119+
.debug-toggle {
120+
width: 100%;
121+
height: 38px;
122+
padding: 0 13px;
123+
display: flex;
124+
align-items: center;
125+
justify-content: space-between;
126+
color: var(--paper);
127+
background: transparent;
128+
border: 0;
129+
font: 600 11px/1 var(--mono);
130+
cursor: pointer;
131+
}
132+
.debug-toggle svg { width: 14px; height: 14px; fill: none; stroke: currentColor; stroke-width: 1.5; transform: rotate(180deg); }
133+
.debug-overlay[data-expanded="false"] { width: 88px; }
134+
.debug-overlay[data-expanded="false"] .debug-toggle svg { transform: none; }
135+
.debug-overlay[data-expanded="false"] .debug-metrics { display: none; }
136+
.debug-metrics { padding: 0 13px 13px; display: grid; gap: 5px; }
137+
.debug-metrics b { color: var(--paper); font-size: 13px; font-weight: 600; }
131138
.stage-meta { min-height: 68px; display: flex; align-items: center; justify-content: space-between; gap: 24px; padding: 14px 10px 0; }
132139
.stage-meta p { max-width: 760px; margin: 0; color: var(--stone); font-size: 13px; line-height: 1.5; }
133140
.stage-meta p .project-link { color: var(--link-blue); }
134141
#status { color: var(--stone-dark); font: 10px/1.4 var(--mono); }
135142
#status[data-failed="true"] { color: #ff765f; }
136143

137144
.source-panel { margin-top: 80px; overflow: hidden; background: var(--panel); border: 1px solid var(--line); border-radius: 14px; }
138-
.source-head { min-height: 86px; display: flex; align-items: center; justify-content: space-between; padding: 0 24px; border-bottom: 1px solid var(--line); }
139-
.source-head .eyebrow { margin: 0 0 7px; font-size: 9px; }
140-
.source-head h2 { margin: 0; font-size: 22px; font-weight: 520; }
145+
.source-toolbar { min-height: 48px; display: flex; align-items: stretch; justify-content: space-between; border-bottom: 1px solid var(--line); }
141146
.copy-button { padding: 9px 12px; color: var(--stone); background: transparent; border: 1px solid var(--line); font: 10px/1 var(--mono); cursor: pointer; }
142147
.copy-button:hover { color: var(--ink); background: var(--copper); border-color: var(--copper); }
143-
.source-tabs { display: flex; padding: 0 22px; border-bottom: 1px solid var(--line); }
148+
.source-tabs { display: flex; padding: 0 22px; }
144149
.source-tabs button { padding: 16px 14px 14px; color: var(--stone-dark); background: none; border: 0; border-bottom: 2px solid transparent; font: 10px/1 var(--mono); cursor: pointer; }
145150
.source-tabs button[aria-selected="true"] { color: var(--copper-bright); border-bottom-color: var(--copper); }
146151
#source-code { max-height: 760px; overflow: auto; display: grid; grid-template-columns: max-content minmax(0, 1fr); margin: 0; padding: 0; color: #d8d1c6; background: #0e0e0c; font: 12px/1.75 var(--mono); tab-size: 2; }
@@ -156,7 +161,7 @@ a:focus-visible, button:focus-visible { outline: 2px solid var(--copper-bright);
156161
.syntax-function { color: #e8ded0; }
157162

158163
.sample-page.embed { overflow: hidden; background: #030817; }
159-
.sample-page.embed .sample-head, .sample-page.embed .stage-meta, .sample-page.embed .source-panel { display: none; }
164+
.sample-page.embed .sample-head, .sample-page.embed .debug-overlay, .sample-page.embed .stage-meta, .sample-page.embed .source-panel { display: none; }
160165
.sample-page.embed .sample-workbench { width: 100%; height: 100vh; padding: 0; }
161166
.sample-page.embed .stage { height: 100vh; padding: 0; border: 0; }
162167
.sample-page.embed .stage canvas { width: 100%; height: 100%; min-height: 100vh; border: 0; }
@@ -167,7 +172,7 @@ a:focus-visible, button:focus-visible { outline: 2px solid var(--copper-bright);
167172
@media (max-width: 680px) {
168173
.shell, .site-header, .sample-head, .sample-workbench { width: min(100% - 32px, 1440px); }
169174
.site-header { grid-template-columns: 1fr auto; }
170-
.main-nav { display: none; }
175+
.gallery-label { display: none; }
171176
.sample-section { padding-block: 64px 92px; }
172177
.sample-head { grid-template-columns: 1fr auto; padding-block: 20px; }
173178
.sample-heading { grid-row: 2; grid-column: 1 / -1; margin-top: 24px; }

gpu-compute-webgpu-usl-shell.html

Lines changed: 25 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<meta charset="utf-8">
55
<meta name="viewport" content="width=device-width,initial-scale=1">
66
<link rel="icon" href="data:,">
7-
<link rel="stylesheet" href="gallery.css?v=4">
7+
<link rel="stylesheet" href="gallery.css?v=5">
88
<title>Compute handoff · GPU + USL</title>
99
</head>
1010
<body class="sample-page"
@@ -23,35 +23,44 @@ <h1>Compute handoff</h1>
2323
<main class="sample-workbench">
2424
<section class="stage" aria-label="Live WebGPU output">
2525
<canvas id="canvas" oncontextmenu="event.preventDefault()"></canvas>
26-
<aside class="debug-overlay" hidden aria-live="off"></aside>
26+
<aside class="debug-overlay" aria-label="Debug metrics">
27+
<button class="debug-toggle" type="button" aria-expanded="true">
28+
<span>Debug</span>
29+
<svg viewBox="0 0 16 16" aria-hidden="true">
30+
<path d="m4 6 4 4 4-4"/>
31+
</svg>
32+
</button>
33+
<div class="debug-metrics" aria-live="off">
34+
<b data-debug="fps">-- FPS</b>
35+
<span data-debug="frame">-- ms frame</span>
36+
<span data-debug="heap">-- Wasm heap</span>
37+
<span data-debug="canvas">-- × -- px</span>
38+
</div>
39+
</aside>
2740
<div class="stage-meta">
2841
<p>Compute writes the vertex stream; render consumes it in the same command buffer without readback.</p>
2942
<div id="status">GPU: loading sample</div>
3043
</div>
3144
</section>
3245

33-
<section class="source-panel" aria-labelledby="source-title">
34-
<header class="source-head">
35-
<div>
36-
<p class="eyebrow">Artifact inspection</p>
37-
<h2 id="source-title">Source path</h2>
46+
<section class="source-panel" aria-label="Source">
47+
<div class="source-toolbar">
48+
<div class="source-tabs" role="tablist" aria-label="Source language">
49+
<button id="tab-c" role="tab" aria-selected="true"
50+
aria-controls="source-code" data-source="c">GPU C</button>
51+
<button id="tab-usl" role="tab" aria-selected="false"
52+
aria-controls="source-code" data-source="usl">USL</button>
53+
<button id="tab-wgsl" role="tab" aria-selected="false"
54+
aria-controls="source-code" data-source="wgsl">Generated WGSL</button>
3855
</div>
3956
<button class="copy-button" type="button">Copy</button>
40-
</header>
41-
<div class="source-tabs" role="tablist" aria-label="Source language">
42-
<button id="tab-c" role="tab" aria-selected="true"
43-
aria-controls="source-code" data-source="c">GPU C</button>
44-
<button id="tab-usl" role="tab" aria-selected="false"
45-
aria-controls="source-code" data-source="usl">USL</button>
46-
<button id="tab-wgsl" role="tab" aria-selected="false"
47-
aria-controls="source-code" data-source="wgsl">Generated WGSL</button>
4857
</div>
4958
<pre id="source-code" role="tabpanel" aria-labelledby="tab-c"
5059
tabindex="0"><span class="line-numbers" aria-hidden="true"></span><code>Loading source…</code></pre>
5160
</section>
5261
</main>
5362

54-
<script src="sample.js?v=3" defer></script>
63+
<script src="sample.js?v=4" defer></script>
5564
{{{ SCRIPT }}}
5665
</body>
5766
</html>

gpu-compute-webgpu-usl.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
<!doctypehtml><html lang=en><head><meta charset=utf-8><meta content="width=device-width,initial-scale=1"name=viewport><link href=data:, rel=icon><link href="gallery.css?v=4"rel=stylesheet><title>Compute handoff · GPU + USL</title></head><body class=sample-page data-c-source=sources/compute.c data-usl-source=sources/compute.usl data-wgsl-source=sources/compute.wgsl><header class=sample-head><a class=back-link href=index.html><span></span> Sample index</a><div class=sample-heading><p>Compute / storage buffer</p><h1>Compute handoff</h1></div><div class=runtime-badge><i></i> WebGPU live</div></header><main class=sample-workbench><section class=stage aria-label="Live WebGPU output"><canvas id=canvas oncontextmenu=event.preventDefault()></canvas><aside aria-live=off class=debug-overlay hidden></aside><div class=stage-meta><p>Compute writes the vertex stream; render consumes it in the same command buffer without readback.</p><div id=status>GPU: loading sample</div></div></section><section class=source-panel aria-labelledby=source-title><header class=source-head><div><p class=eyebrow>Artifact inspection</p><h2 id=source-title>Source path</h2></div><button class=copy-button type=button>Copy</button></header><div class=source-tabs aria-label="Source language"role=tablist><button aria-controls=source-code aria-selected=true data-source=c id=tab-c role=tab>GPU C</button> <button aria-controls=source-code aria-selected=false data-source=usl id=tab-usl role=tab>USL</button> <button aria-controls=source-code aria-selected=false data-source=wgsl id=tab-wgsl role=tab>Generated WGSL</button></div><pre aria-labelledby=tab-c id=source-code role=tabpanel tabindex=0><span aria-hidden=true class=line-numbers></span><code>Loading source…</code></pre></section></main><script src="sample.js?v=3"defer></script><script src=gpu-compute-webgpu-usl.js async></script></body></html>
1+
<!doctypehtml><html lang=en><head><meta charset=utf-8><meta content="width=device-width,initial-scale=1"name=viewport><link href=data:, rel=icon><link href="gallery.css?v=5"rel=stylesheet><title>Compute handoff · GPU + USL</title></head><body class=sample-page data-c-source=sources/compute.c data-usl-source=sources/compute.usl data-wgsl-source=sources/compute.wgsl><header class=sample-head><a class=back-link href=index.html><span></span> Sample index</a><div class=sample-heading><p>Compute / storage buffer</p><h1>Compute handoff</h1></div><div class=runtime-badge><i></i> WebGPU live</div></header><main class=sample-workbench><section aria-label="Live WebGPU output"class=stage><canvas id=canvas oncontextmenu=event.preventDefault()></canvas><aside aria-label="Debug metrics"class=debug-overlay><button class=debug-toggle type=button aria-expanded=true><span>Debug</span> <svg aria-hidden=true viewBox="0 0 16 16"><path d="m4 6 4 4 4-4"/></svg></button><div class=debug-metrics aria-live=off><b data-debug=fps>-- FPS</b> <span data-debug=frame>-- ms frame</span> <span data-debug=heap>-- Wasm heap</span> <span data-debug=canvas>-- × -- px</span></div></aside><div class=stage-meta><p>Compute writes the vertex stream; render consumes it in the same command buffer without readback.</p><div id=status>GPU: loading sample</div></div></section><section aria-label=Source class=source-panel><div class=source-toolbar><div class=source-tabs aria-label="Source language"role=tablist><button aria-controls=source-code aria-selected=true data-source=c id=tab-c role=tab>GPU C</button> <button aria-controls=source-code aria-selected=false data-source=usl id=tab-usl role=tab>USL</button> <button aria-controls=source-code aria-selected=false data-source=wgsl id=tab-wgsl role=tab>Generated WGSL</button></div><button class=copy-button type=button>Copy</button></div><pre aria-labelledby=tab-c id=source-code role=tabpanel tabindex=0><span aria-hidden=true class=line-numbers></span><code>Loading source…</code></pre></section></main><script src="sample.js?v=4"defer></script><script src=gpu-compute-webgpu-usl.js async></script></body></html>

gpu-indexed-depth-webgpu-usl-shell.html

Lines changed: 25 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<meta charset="utf-8">
55
<meta name="viewport" content="width=device-width,initial-scale=1">
66
<link rel="icon" href="data:,">
7-
<link rel="stylesheet" href="gallery.css?v=4">
7+
<link rel="stylesheet" href="gallery.css?v=5">
88
<title>Indexed depth · GPU + USL</title>
99
</head>
1010
<body class="sample-page"
@@ -23,35 +23,44 @@ <h1>Indexed depth</h1>
2323
<main class="sample-workbench">
2424
<section class="stage" aria-label="Live WebGPU output">
2525
<canvas id="canvas" oncontextmenu="event.preventDefault()"></canvas>
26-
<aside class="debug-overlay" hidden aria-live="off"></aside>
26+
<aside class="debug-overlay" aria-label="Debug metrics">
27+
<button class="debug-toggle" type="button" aria-expanded="true">
28+
<span>Debug</span>
29+
<svg viewBox="0 0 16 16" aria-hidden="true">
30+
<path d="m4 6 4 4 4-4"/>
31+
</svg>
32+
</button>
33+
<div class="debug-metrics" aria-live="off">
34+
<b data-debug="fps">-- FPS</b>
35+
<span data-debug="frame">-- ms frame</span>
36+
<span data-debug="heap">-- Wasm heap</span>
37+
<span data-debug="canvas">-- × -- px</span>
38+
</div>
39+
</aside>
2740
<div class="stage-meta">
2841
<p>One indexed draw validates the depth texture, pipeline, attachment, and occlusion path.</p>
2942
<div id="status">GPU: loading sample</div>
3043
</div>
3144
</section>
3245

33-
<section class="source-panel" aria-labelledby="source-title">
34-
<header class="source-head">
35-
<div>
36-
<p class="eyebrow">Artifact inspection</p>
37-
<h2 id="source-title">Source path</h2>
46+
<section class="source-panel" aria-label="Source">
47+
<div class="source-toolbar">
48+
<div class="source-tabs" role="tablist" aria-label="Source language">
49+
<button id="tab-c" role="tab" aria-selected="true"
50+
aria-controls="source-code" data-source="c">GPU C</button>
51+
<button id="tab-usl" role="tab" aria-selected="false"
52+
aria-controls="source-code" data-source="usl">USL</button>
53+
<button id="tab-wgsl" role="tab" aria-selected="false"
54+
aria-controls="source-code" data-source="wgsl">Generated WGSL</button>
3855
</div>
3956
<button class="copy-button" type="button">Copy</button>
40-
</header>
41-
<div class="source-tabs" role="tablist" aria-label="Source language">
42-
<button id="tab-c" role="tab" aria-selected="true"
43-
aria-controls="source-code" data-source="c">GPU C</button>
44-
<button id="tab-usl" role="tab" aria-selected="false"
45-
aria-controls="source-code" data-source="usl">USL</button>
46-
<button id="tab-wgsl" role="tab" aria-selected="false"
47-
aria-controls="source-code" data-source="wgsl">Generated WGSL</button>
4857
</div>
4958
<pre id="source-code" role="tabpanel" aria-labelledby="tab-c"
5059
tabindex="0"><span class="line-numbers" aria-hidden="true"></span><code>Loading source…</code></pre>
5160
</section>
5261
</main>
5362

54-
<script src="sample.js?v=3" defer></script>
63+
<script src="sample.js?v=4" defer></script>
5564
{{{ SCRIPT }}}
5665
</body>
5766
</html>

gpu-indexed-depth-webgpu-usl.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
<!doctypehtml><html lang=en><head><meta charset=utf-8><meta content="width=device-width,initial-scale=1"name=viewport><link href=data:, rel=icon><link href="gallery.css?v=4"rel=stylesheet><title>Indexed depth · GPU + USL</title></head><body class=sample-page data-c-source=sources/indexed-depth.c data-usl-source=sources/indexed-depth.usl data-wgsl-source=sources/indexed-depth.wgsl><header class=sample-head><a class=back-link href=index.html><span></span> Sample index</a><div class=sample-heading><p>Render / index + depth</p><h1>Indexed depth</h1></div><div class=runtime-badge><i></i> WebGPU live</div></header><main class=sample-workbench><section class=stage aria-label="Live WebGPU output"><canvas id=canvas oncontextmenu=event.preventDefault()></canvas><aside aria-live=off class=debug-overlay hidden></aside><div class=stage-meta><p>One indexed draw validates the depth texture, pipeline, attachment, and occlusion path.</p><div id=status>GPU: loading sample</div></div></section><section class=source-panel aria-labelledby=source-title><header class=source-head><div><p class=eyebrow>Artifact inspection</p><h2 id=source-title>Source path</h2></div><button class=copy-button type=button>Copy</button></header><div class=source-tabs aria-label="Source language"role=tablist><button aria-controls=source-code aria-selected=true data-source=c id=tab-c role=tab>GPU C</button> <button aria-controls=source-code aria-selected=false data-source=usl id=tab-usl role=tab>USL</button> <button aria-controls=source-code aria-selected=false data-source=wgsl id=tab-wgsl role=tab>Generated WGSL</button></div><pre aria-labelledby=tab-c id=source-code role=tabpanel tabindex=0><span aria-hidden=true class=line-numbers></span><code>Loading source…</code></pre></section></main><script src="sample.js?v=3"defer></script><script src=gpu-indexed-depth-webgpu-usl.js async></script></body></html>
1+
<!doctypehtml><html lang=en><head><meta charset=utf-8><meta content="width=device-width,initial-scale=1"name=viewport><link href=data:, rel=icon><link href="gallery.css?v=5"rel=stylesheet><title>Indexed depth · GPU + USL</title></head><body class=sample-page data-c-source=sources/indexed-depth.c data-usl-source=sources/indexed-depth.usl data-wgsl-source=sources/indexed-depth.wgsl><header class=sample-head><a class=back-link href=index.html><span></span> Sample index</a><div class=sample-heading><p>Render / index + depth</p><h1>Indexed depth</h1></div><div class=runtime-badge><i></i> WebGPU live</div></header><main class=sample-workbench><section aria-label="Live WebGPU output"class=stage><canvas id=canvas oncontextmenu=event.preventDefault()></canvas><aside aria-label="Debug metrics"class=debug-overlay><button class=debug-toggle type=button aria-expanded=true><span>Debug</span> <svg aria-hidden=true viewBox="0 0 16 16"><path d="m4 6 4 4 4-4"/></svg></button><div class=debug-metrics aria-live=off><b data-debug=fps>-- FPS</b> <span data-debug=frame>-- ms frame</span> <span data-debug=heap>-- Wasm heap</span> <span data-debug=canvas>-- × -- px</span></div></aside><div class=stage-meta><p>One indexed draw validates the depth texture, pipeline, attachment, and occlusion path.</p><div id=status>GPU: loading sample</div></div></section><section aria-label=Source class=source-panel><div class=source-toolbar><div class=source-tabs aria-label="Source language"role=tablist><button aria-controls=source-code aria-selected=true data-source=c id=tab-c role=tab>GPU C</button> <button aria-controls=source-code aria-selected=false data-source=usl id=tab-usl role=tab>USL</button> <button aria-controls=source-code aria-selected=false data-source=wgsl id=tab-wgsl role=tab>Generated WGSL</button></div><button class=copy-button type=button>Copy</button></div><pre aria-labelledby=tab-c id=source-code role=tabpanel tabindex=0><span aria-hidden=true class=line-numbers></span><code>Loading source…</code></pre></section></main><script src="sample.js?v=4"defer></script><script src=gpu-indexed-depth-webgpu-usl.js async></script></body></html>

0 commit comments

Comments
 (0)