daily update
This commit is contained in:
90
.VSCodeCounter/2026-06-28_22-27-28/details.md
Normal file
90
.VSCodeCounter/2026-06-28_22-27-28/details.md
Normal file
@@ -0,0 +1,90 @@
|
|||||||
|
# Details
|
||||||
|
|
||||||
|
Date : 2026-06-28 22:27:28
|
||||||
|
|
||||||
|
Directory d:\\rust-ws\\eskin-player
|
||||||
|
|
||||||
|
Total : 75 files, 8653 codes, 180 comments, 1313 blanks, all 10146 lines
|
||||||
|
|
||||||
|
[Summary](results.md) / Details / [Diff Summary](diff.md) / [Diff Details](diff-details.md)
|
||||||
|
|
||||||
|
## Files
|
||||||
|
| filename | language | code | comment | blank | total |
|
||||||
|
| :--- | :--- | ---: | ---: | ---: | ---: |
|
||||||
|
| [.openclaw/settings.json](/.openclaw/settings.json) | JSON with Comments | 35 | 0 | 0 | 35 |
|
||||||
|
| [.scale/assets.json](/.scale/assets.json) | JSON | 4 | 0 | 1 | 5 |
|
||||||
|
| [.scale/engineering-standards-baseline.json](/.scale/engineering-standards-baseline.json) | JSON | 6 | 0 | 1 | 7 |
|
||||||
|
| [.scale/engineering-standards.json](/.scale/engineering-standards.json) | JSON | 67 | 0 | 1 | 68 |
|
||||||
|
| [.scale/frameworks.json](/.scale/frameworks.json) | JSON | 23 | 0 | 1 | 24 |
|
||||||
|
| [.scale/governance.lock.json](/.scale/governance.lock.json) | JSON | 200 | 0 | 1 | 201 |
|
||||||
|
| [.scale/output-policy.json](/.scale/output-policy.json) | JSON | 72 | 0 | 1 | 73 |
|
||||||
|
| [.scale/product-smoke.json](/.scale/product-smoke.json) | JSON | 33 | 0 | 1 | 34 |
|
||||||
|
| [.scale/quality-contract.json](/.scale/quality-contract.json) | JSON | 70 | 0 | 1 | 71 |
|
||||||
|
| [.scale/resource-policy.json](/.scale/resource-policy.json) | JSON | 39 | 0 | 1 | 40 |
|
||||||
|
| [.scale/skills-registry.json](/.scale/skills-registry.json) | JSON | 82 | 0 | 1 | 83 |
|
||||||
|
| [.scale/skills.json](/.scale/skills.json) | JSON | 630 | 0 | 1 | 631 |
|
||||||
|
| [.scale/tools.json](/.scale/tools.json) | JSON | 118 | 0 | 1 | 119 |
|
||||||
|
| [.scale/verification.json](/.scale/verification.json) | JSON | 35 | 0 | 1 | 36 |
|
||||||
|
| [.scale/workflow.json](/.scale/workflow.json) | JSON | 51 | 0 | 1 | 52 |
|
||||||
|
| [AGENTS.md](/AGENTS.md) | Markdown | 21 | 0 | 6 | 27 |
|
||||||
|
| [README.md](/README.md) | Markdown | 33 | 0 | 10 | 43 |
|
||||||
|
| [TOOLS.md](/TOOLS.md) | Markdown | 56 | 0 | 6 | 62 |
|
||||||
|
| [build.rs](/build.rs) | Rust | 24 | 0 | 10 | 34 |
|
||||||
|
| [docs/workflow/QUALITY\_CONTRACT.md](/docs/workflow/QUALITY_CONTRACT.md) | Markdown | 28 | 0 | 8 | 36 |
|
||||||
|
| [docs/workflow/README.md](/docs/workflow/README.md) | Markdown | 143 | 0 | 45 | 188 |
|
||||||
|
| [docs/workflow/templates/api-contract.md](/docs/workflow/templates/api-contract.md) | Markdown | 15 | 0 | 15 | 30 |
|
||||||
|
| [docs/workflow/templates/architecture-review.md](/docs/workflow/templates/architecture-review.md) | Markdown | 15 | 0 | 9 | 24 |
|
||||||
|
| [docs/workflow/templates/db-change-plan.md](/docs/workflow/templates/db-change-plan.md) | Markdown | 11 | 0 | 10 | 21 |
|
||||||
|
| [docs/workflow/templates/docs-impact.md](/docs/workflow/templates/docs-impact.md) | Markdown | 9 | 0 | 9 | 18 |
|
||||||
|
| [docs/workflow/templates/e2e-plan.md](/docs/workflow/templates/e2e-plan.md) | Markdown | 11 | 0 | 10 | 21 |
|
||||||
|
| [docs/workflow/templates/explore.md](/docs/workflow/templates/explore.md) | Markdown | 11 | 0 | 10 | 21 |
|
||||||
|
| [docs/workflow/templates/github-actions-scale-preflight.yml](/docs/workflow/templates/github-actions-scale-preflight.yml) | YAML | 27 | 0 | 6 | 33 |
|
||||||
|
| [docs/workflow/templates/mini-prd.md](/docs/workflow/templates/mini-prd.md) | Markdown | 23 | 0 | 20 | 43 |
|
||||||
|
| [docs/workflow/templates/plan.md](/docs/workflow/templates/plan.md) | Markdown | 17 | 0 | 12 | 29 |
|
||||||
|
| [docs/workflow/templates/pre-push-scale-preflight.sh](/docs/workflow/templates/pre-push-scale-preflight.sh) | Shell Script | 6 | 1 | 2 | 9 |
|
||||||
|
| [docs/workflow/templates/product-smoke.md](/docs/workflow/templates/product-smoke.md) | Markdown | 44 | 0 | 18 | 62 |
|
||||||
|
| [docs/workflow/templates/reality-check.md](/docs/workflow/templates/reality-check.md) | Markdown | 13 | 0 | 13 | 26 |
|
||||||
|
| [docs/workflow/templates/resource-cleanup.md](/docs/workflow/templates/resource-cleanup.md) | Markdown | 10 | 0 | 5 | 15 |
|
||||||
|
| [docs/workflow/templates/resource-impact.md](/docs/workflow/templates/resource-impact.md) | Markdown | 15 | 0 | 11 | 26 |
|
||||||
|
| [docs/workflow/templates/review.md](/docs/workflow/templates/review.md) | Markdown | 9 | 0 | 8 | 17 |
|
||||||
|
| [docs/workflow/templates/runtime.md](/docs/workflow/templates/runtime.md) | Markdown | 15 | 0 | 7 | 22 |
|
||||||
|
| [docs/workflow/templates/security-review.md](/docs/workflow/templates/security-review.md) | Markdown | 15 | 0 | 12 | 27 |
|
||||||
|
| [docs/workflow/templates/skill-evidence.md](/docs/workflow/templates/skill-evidence.md) | Markdown | 21 | 0 | 13 | 34 |
|
||||||
|
| [docs/workflow/templates/skill-plan.md](/docs/workflow/templates/skill-plan.md) | Markdown | 25 | 0 | 15 | 40 |
|
||||||
|
| [docs/workflow/templates/standards-impact.md](/docs/workflow/templates/standards-impact.md) | Markdown | 20 | 0 | 9 | 29 |
|
||||||
|
| [docs/workflow/templates/summary.md](/docs/workflow/templates/summary.md) | Markdown | 11 | 0 | 9 | 20 |
|
||||||
|
| [docs/workflow/templates/ui-spec.md](/docs/workflow/templates/ui-spec.md) | Markdown | 17 | 0 | 13 | 30 |
|
||||||
|
| [docs/workflow/templates/verification.md](/docs/workflow/templates/verification.md) | Markdown | 11 | 0 | 8 | 19 |
|
||||||
|
| [docs/workflow/templates/visual-review.md](/docs/workflow/templates/visual-review.md) | Markdown | 11 | 0 | 10 | 21 |
|
||||||
|
| [docs/worklog/metrics.md](/docs/worklog/metrics.md) | Markdown | 15 | 2 | 12 | 29 |
|
||||||
|
| [render.md](/render.md) | Markdown | 631 | 0 | 236 | 867 |
|
||||||
|
| [scripts/gates/all.sh](/scripts/gates/all.sh) | Shell Script | 43 | 2 | 10 | 55 |
|
||||||
|
| [scripts/qa/product-smoke.ps1](/scripts/qa/product-smoke.ps1) | PowerShell | 94 | 1 | 13 | 108 |
|
||||||
|
| [scripts/qa/product-smoke.sh](/scripts/qa/product-smoke.sh) | Shell Script | 86 | 1 | 12 | 99 |
|
||||||
|
| [scripts/tests/run.sh](/scripts/tests/run.sh) | Shell Script | 6 | 2 | 1 | 9 |
|
||||||
|
| [scripts/validate-config.sh](/scripts/validate-config.sh) | Shell Script | 53 | 2 | 11 | 66 |
|
||||||
|
| [scripts/workflow/verify.sh](/scripts/workflow/verify.sh) | Shell Script | 17 | 6 | 7 | 30 |
|
||||||
|
| [src/app.rs](/src/app.rs) | Rust | 330 | 12 | 39 | 381 |
|
||||||
|
| [src/connection.rs](/src/connection.rs) | Rust | 153 | 11 | 26 | 190 |
|
||||||
|
| [src/main.rs](/src/main.rs) | Rust | 30 | 0 | 4 | 34 |
|
||||||
|
| [src/matrix.rs](/src/matrix.rs) | Rust | 101 | 0 | 10 | 111 |
|
||||||
|
| [src/model.rs](/src/model.rs) | Rust | 170 | 7 | 19 | 196 |
|
||||||
|
| [src/recording.rs](/src/recording.rs) | Rust | 324 | 52 | 69 | 445 |
|
||||||
|
| [src/render.rs](/src/render.rs) | Rust | 855 | 8 | 61 | 924 |
|
||||||
|
| [src/resources.rs](/src/resources.rs) | Rust | 937 | 0 | 71 | 1,008 |
|
||||||
|
| [src/serial\_core/codec.rs](/src/serial_core/codec.rs) | Rust | 6 | 0 | 2 | 8 |
|
||||||
|
| [src/serial\_core/codecs/mod.rs](/src/serial_core/codecs/mod.rs) | Rust | 1 | 0 | 1 | 2 |
|
||||||
|
| [src/serial\_core/codecs/tactile\_a.rs](/src/serial_core/codecs/tactile_a.rs) | Rust | 163 | 1 | 21 | 185 |
|
||||||
|
| [src/serial\_core/error.rs](/src/serial_core/error.rs) | Rust | 45 | 0 | 7 | 52 |
|
||||||
|
| [src/serial\_core/frame.rs](/src/serial_core/frame.rs) | Rust | 32 | 0 | 5 | 37 |
|
||||||
|
| [src/serial\_core/mod.rs](/src/serial_core/mod.rs) | Rust | 6 | 0 | 1 | 7 |
|
||||||
|
| [src/serial\_core/serial.rs](/src/serial_core/serial.rs) | Rust | 78 | 7 | 12 | 97 |
|
||||||
|
| [src/serial\_core/utils.rs](/src/serial_core/utils.rs) | Rust | 8 | 0 | 3 | 11 |
|
||||||
|
| [src/style.rs](/src/style.rs) | Rust | 283 | 0 | 37 | 320 |
|
||||||
|
| [src/texture.rs](/src/texture.rs) | Rust | 231 | 0 | 21 | 252 |
|
||||||
|
| [src/theme.rs](/src/theme.rs) | Rust | 149 | 1 | 19 | 169 |
|
||||||
|
| [src/ui.rs](/src/ui.rs) | Rust | 1,088 | 57 | 123 | 1,268 |
|
||||||
|
| [src/utils.rs](/src/utils.rs) | Rust | 10 | 0 | 2 | 12 |
|
||||||
|
| [static/wgsl/shader.wgsl](/static/wgsl/shader.wgsl) | WGSL | 556 | 7 | 105 | 668 |
|
||||||
|
|
||||||
|
[Summary](results.md) / Details / [Diff Summary](diff.md) / [Diff Details](diff-details.md)
|
||||||
15
.VSCodeCounter/2026-06-28_22-27-28/diff-details.md
Normal file
15
.VSCodeCounter/2026-06-28_22-27-28/diff-details.md
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
# Diff Details
|
||||||
|
|
||||||
|
Date : 2026-06-28 22:27:28
|
||||||
|
|
||||||
|
Directory d:\\rust-ws\\eskin-player
|
||||||
|
|
||||||
|
Total : 0 files, 0 codes, 0 comments, 0 blanks, all 0 lines
|
||||||
|
|
||||||
|
[Summary](results.md) / [Details](details.md) / [Diff Summary](diff.md) / Diff Details
|
||||||
|
|
||||||
|
## Files
|
||||||
|
| filename | language | code | comment | blank | total |
|
||||||
|
| :--- | :--- | ---: | ---: | ---: | ---: |
|
||||||
|
|
||||||
|
[Summary](results.md) / [Details](details.md) / [Diff Summary](diff.md) / Diff Details
|
||||||
2
.VSCodeCounter/2026-06-28_22-27-28/diff.csv
Normal file
2
.VSCodeCounter/2026-06-28_22-27-28/diff.csv
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
"filename", "language", "", "comment", "blank", "total"
|
||||||
|
"Total", "-", , 0, 0, 0
|
||||||
|
19
.VSCodeCounter/2026-06-28_22-27-28/diff.md
Normal file
19
.VSCodeCounter/2026-06-28_22-27-28/diff.md
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
# Diff Summary
|
||||||
|
|
||||||
|
Date : 2026-06-28 22:27:28
|
||||||
|
|
||||||
|
Directory d:\\rust-ws\\eskin-player
|
||||||
|
|
||||||
|
Total : 0 files, 0 codes, 0 comments, 0 blanks, all 0 lines
|
||||||
|
|
||||||
|
[Summary](results.md) / [Details](details.md) / Diff Summary / [Diff Details](diff-details.md)
|
||||||
|
|
||||||
|
## Languages
|
||||||
|
| language | files | code | comment | blank | total |
|
||||||
|
| :--- | ---: | ---: | ---: | ---: | ---: |
|
||||||
|
|
||||||
|
## Directories
|
||||||
|
| path | files | code | comment | blank | total |
|
||||||
|
| :--- | ---: | ---: | ---: | ---: | ---: |
|
||||||
|
|
||||||
|
[Summary](results.md) / [Details](details.md) / Diff Summary / [Diff Details](diff-details.md)
|
||||||
22
.VSCodeCounter/2026-06-28_22-27-28/diff.txt
Normal file
22
.VSCodeCounter/2026-06-28_22-27-28/diff.txt
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
Date : 2026-06-28 22:27:28
|
||||||
|
Directory : d:\rust-ws\eskin-player
|
||||||
|
Total : 0 files, 0 codes, 0 comments, 0 blanks, all 0 lines
|
||||||
|
|
||||||
|
Languages
|
||||||
|
+----------+------------+------------+------------+------------+------------+
|
||||||
|
| language | files | code | comment | blank | total |
|
||||||
|
+----------+------------+------------+------------+------------+------------+
|
||||||
|
+----------+------------+------------+------------+------------+------------+
|
||||||
|
|
||||||
|
Directories
|
||||||
|
+------+------------+------------+------------+------------+------------+
|
||||||
|
| path | files | code | comment | blank | total |
|
||||||
|
+------+------------+------------+------------+------------+------------+
|
||||||
|
+------+------------+------------+------------+------------+------------+
|
||||||
|
|
||||||
|
Files
|
||||||
|
+----------+----------+------------+------------+------------+------------+
|
||||||
|
| filename | language | code | comment | blank | total |
|
||||||
|
+----------+----------+------------+------------+------------+------------+
|
||||||
|
| Total | | 0 | 0 | 0 | 0 |
|
||||||
|
+----------+----------+------------+------------+------------+------------+
|
||||||
77
.VSCodeCounter/2026-06-28_22-27-28/results.csv
Normal file
77
.VSCodeCounter/2026-06-28_22-27-28/results.csv
Normal file
@@ -0,0 +1,77 @@
|
|||||||
|
"filename", "language", "Rust", "Markdown", "JSON", "JSON with Comments", "Shell Script", "WGSL", "PowerShell", "YAML", "comment", "blank", "total"
|
||||||
|
"d:\rust-ws\eskin-player\.openclaw\settings.json", "JSON with Comments", 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 35
|
||||||
|
"d:\rust-ws\eskin-player\.scale\assets.json", "JSON", 0, 0, 4, 0, 0, 0, 0, 0, 0, 1, 5
|
||||||
|
"d:\rust-ws\eskin-player\.scale\engineering-standards-baseline.json", "JSON", 0, 0, 6, 0, 0, 0, 0, 0, 0, 1, 7
|
||||||
|
"d:\rust-ws\eskin-player\.scale\engineering-standards.json", "JSON", 0, 0, 67, 0, 0, 0, 0, 0, 0, 1, 68
|
||||||
|
"d:\rust-ws\eskin-player\.scale\frameworks.json", "JSON", 0, 0, 23, 0, 0, 0, 0, 0, 0, 1, 24
|
||||||
|
"d:\rust-ws\eskin-player\.scale\governance.lock.json", "JSON", 0, 0, 200, 0, 0, 0, 0, 0, 0, 1, 201
|
||||||
|
"d:\rust-ws\eskin-player\.scale\output-policy.json", "JSON", 0, 0, 72, 0, 0, 0, 0, 0, 0, 1, 73
|
||||||
|
"d:\rust-ws\eskin-player\.scale\product-smoke.json", "JSON", 0, 0, 33, 0, 0, 0, 0, 0, 0, 1, 34
|
||||||
|
"d:\rust-ws\eskin-player\.scale\quality-contract.json", "JSON", 0, 0, 70, 0, 0, 0, 0, 0, 0, 1, 71
|
||||||
|
"d:\rust-ws\eskin-player\.scale\resource-policy.json", "JSON", 0, 0, 39, 0, 0, 0, 0, 0, 0, 1, 40
|
||||||
|
"d:\rust-ws\eskin-player\.scale\skills-registry.json", "JSON", 0, 0, 82, 0, 0, 0, 0, 0, 0, 1, 83
|
||||||
|
"d:\rust-ws\eskin-player\.scale\skills.json", "JSON", 0, 0, 630, 0, 0, 0, 0, 0, 0, 1, 631
|
||||||
|
"d:\rust-ws\eskin-player\.scale\tools.json", "JSON", 0, 0, 118, 0, 0, 0, 0, 0, 0, 1, 119
|
||||||
|
"d:\rust-ws\eskin-player\.scale\verification.json", "JSON", 0, 0, 35, 0, 0, 0, 0, 0, 0, 1, 36
|
||||||
|
"d:\rust-ws\eskin-player\.scale\workflow.json", "JSON", 0, 0, 51, 0, 0, 0, 0, 0, 0, 1, 52
|
||||||
|
"d:\rust-ws\eskin-player\AGENTS.md", "Markdown", 0, 21, 0, 0, 0, 0, 0, 0, 0, 6, 27
|
||||||
|
"d:\rust-ws\eskin-player\README.md", "Markdown", 0, 33, 0, 0, 0, 0, 0, 0, 0, 10, 43
|
||||||
|
"d:\rust-ws\eskin-player\TOOLS.md", "Markdown", 0, 56, 0, 0, 0, 0, 0, 0, 0, 6, 62
|
||||||
|
"d:\rust-ws\eskin-player\build.rs", "Rust", 24, 0, 0, 0, 0, 0, 0, 0, 0, 10, 34
|
||||||
|
"d:\rust-ws\eskin-player\docs\workflow\QUALITY_CONTRACT.md", "Markdown", 0, 28, 0, 0, 0, 0, 0, 0, 0, 8, 36
|
||||||
|
"d:\rust-ws\eskin-player\docs\workflow\README.md", "Markdown", 0, 143, 0, 0, 0, 0, 0, 0, 0, 45, 188
|
||||||
|
"d:\rust-ws\eskin-player\docs\workflow\templates\api-contract.md", "Markdown", 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 30
|
||||||
|
"d:\rust-ws\eskin-player\docs\workflow\templates\architecture-review.md", "Markdown", 0, 15, 0, 0, 0, 0, 0, 0, 0, 9, 24
|
||||||
|
"d:\rust-ws\eskin-player\docs\workflow\templates\db-change-plan.md", "Markdown", 0, 11, 0, 0, 0, 0, 0, 0, 0, 10, 21
|
||||||
|
"d:\rust-ws\eskin-player\docs\workflow\templates\docs-impact.md", "Markdown", 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 18
|
||||||
|
"d:\rust-ws\eskin-player\docs\workflow\templates\e2e-plan.md", "Markdown", 0, 11, 0, 0, 0, 0, 0, 0, 0, 10, 21
|
||||||
|
"d:\rust-ws\eskin-player\docs\workflow\templates\explore.md", "Markdown", 0, 11, 0, 0, 0, 0, 0, 0, 0, 10, 21
|
||||||
|
"d:\rust-ws\eskin-player\docs\workflow\templates\github-actions-scale-preflight.yml", "YAML", 0, 0, 0, 0, 0, 0, 0, 27, 0, 6, 33
|
||||||
|
"d:\rust-ws\eskin-player\docs\workflow\templates\mini-prd.md", "Markdown", 0, 23, 0, 0, 0, 0, 0, 0, 0, 20, 43
|
||||||
|
"d:\rust-ws\eskin-player\docs\workflow\templates\plan.md", "Markdown", 0, 17, 0, 0, 0, 0, 0, 0, 0, 12, 29
|
||||||
|
"d:\rust-ws\eskin-player\docs\workflow\templates\pre-push-scale-preflight.sh", "Shell Script", 0, 0, 0, 0, 6, 0, 0, 0, 1, 2, 9
|
||||||
|
"d:\rust-ws\eskin-player\docs\workflow\templates\product-smoke.md", "Markdown", 0, 44, 0, 0, 0, 0, 0, 0, 0, 18, 62
|
||||||
|
"d:\rust-ws\eskin-player\docs\workflow\templates\reality-check.md", "Markdown", 0, 13, 0, 0, 0, 0, 0, 0, 0, 13, 26
|
||||||
|
"d:\rust-ws\eskin-player\docs\workflow\templates\resource-cleanup.md", "Markdown", 0, 10, 0, 0, 0, 0, 0, 0, 0, 5, 15
|
||||||
|
"d:\rust-ws\eskin-player\docs\workflow\templates\resource-impact.md", "Markdown", 0, 15, 0, 0, 0, 0, 0, 0, 0, 11, 26
|
||||||
|
"d:\rust-ws\eskin-player\docs\workflow\templates\review.md", "Markdown", 0, 9, 0, 0, 0, 0, 0, 0, 0, 8, 17
|
||||||
|
"d:\rust-ws\eskin-player\docs\workflow\templates\runtime.md", "Markdown", 0, 15, 0, 0, 0, 0, 0, 0, 0, 7, 22
|
||||||
|
"d:\rust-ws\eskin-player\docs\workflow\templates\security-review.md", "Markdown", 0, 15, 0, 0, 0, 0, 0, 0, 0, 12, 27
|
||||||
|
"d:\rust-ws\eskin-player\docs\workflow\templates\skill-evidence.md", "Markdown", 0, 21, 0, 0, 0, 0, 0, 0, 0, 13, 34
|
||||||
|
"d:\rust-ws\eskin-player\docs\workflow\templates\skill-plan.md", "Markdown", 0, 25, 0, 0, 0, 0, 0, 0, 0, 15, 40
|
||||||
|
"d:\rust-ws\eskin-player\docs\workflow\templates\standards-impact.md", "Markdown", 0, 20, 0, 0, 0, 0, 0, 0, 0, 9, 29
|
||||||
|
"d:\rust-ws\eskin-player\docs\workflow\templates\summary.md", "Markdown", 0, 11, 0, 0, 0, 0, 0, 0, 0, 9, 20
|
||||||
|
"d:\rust-ws\eskin-player\docs\workflow\templates\ui-spec.md", "Markdown", 0, 17, 0, 0, 0, 0, 0, 0, 0, 13, 30
|
||||||
|
"d:\rust-ws\eskin-player\docs\workflow\templates\verification.md", "Markdown", 0, 11, 0, 0, 0, 0, 0, 0, 0, 8, 19
|
||||||
|
"d:\rust-ws\eskin-player\docs\workflow\templates\visual-review.md", "Markdown", 0, 11, 0, 0, 0, 0, 0, 0, 0, 10, 21
|
||||||
|
"d:\rust-ws\eskin-player\docs\worklog\metrics.md", "Markdown", 0, 15, 0, 0, 0, 0, 0, 0, 2, 12, 29
|
||||||
|
"d:\rust-ws\eskin-player\render.md", "Markdown", 0, 631, 0, 0, 0, 0, 0, 0, 0, 236, 867
|
||||||
|
"d:\rust-ws\eskin-player\scripts\gates\all.sh", "Shell Script", 0, 0, 0, 0, 43, 0, 0, 0, 2, 10, 55
|
||||||
|
"d:\rust-ws\eskin-player\scripts\qa\product-smoke.ps1", "PowerShell", 0, 0, 0, 0, 0, 0, 94, 0, 1, 13, 108
|
||||||
|
"d:\rust-ws\eskin-player\scripts\qa\product-smoke.sh", "Shell Script", 0, 0, 0, 0, 86, 0, 0, 0, 1, 12, 99
|
||||||
|
"d:\rust-ws\eskin-player\scripts\tests\run.sh", "Shell Script", 0, 0, 0, 0, 6, 0, 0, 0, 2, 1, 9
|
||||||
|
"d:\rust-ws\eskin-player\scripts\validate-config.sh", "Shell Script", 0, 0, 0, 0, 53, 0, 0, 0, 2, 11, 66
|
||||||
|
"d:\rust-ws\eskin-player\scripts\workflow\verify.sh", "Shell Script", 0, 0, 0, 0, 17, 0, 0, 0, 6, 7, 30
|
||||||
|
"d:\rust-ws\eskin-player\src\app.rs", "Rust", 330, 0, 0, 0, 0, 0, 0, 0, 12, 39, 381
|
||||||
|
"d:\rust-ws\eskin-player\src\connection.rs", "Rust", 153, 0, 0, 0, 0, 0, 0, 0, 11, 26, 190
|
||||||
|
"d:\rust-ws\eskin-player\src\main.rs", "Rust", 30, 0, 0, 0, 0, 0, 0, 0, 0, 4, 34
|
||||||
|
"d:\rust-ws\eskin-player\src\matrix.rs", "Rust", 101, 0, 0, 0, 0, 0, 0, 0, 0, 10, 111
|
||||||
|
"d:\rust-ws\eskin-player\src\model.rs", "Rust", 170, 0, 0, 0, 0, 0, 0, 0, 7, 19, 196
|
||||||
|
"d:\rust-ws\eskin-player\src\recording.rs", "Rust", 324, 0, 0, 0, 0, 0, 0, 0, 52, 69, 445
|
||||||
|
"d:\rust-ws\eskin-player\src\render.rs", "Rust", 855, 0, 0, 0, 0, 0, 0, 0, 8, 61, 924
|
||||||
|
"d:\rust-ws\eskin-player\src\resources.rs", "Rust", 937, 0, 0, 0, 0, 0, 0, 0, 0, 71, 1008
|
||||||
|
"d:\rust-ws\eskin-player\src\serial_core\codec.rs", "Rust", 6, 0, 0, 0, 0, 0, 0, 0, 0, 2, 8
|
||||||
|
"d:\rust-ws\eskin-player\src\serial_core\codecs\mod.rs", "Rust", 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2
|
||||||
|
"d:\rust-ws\eskin-player\src\serial_core\codecs\tactile_a.rs", "Rust", 163, 0, 0, 0, 0, 0, 0, 0, 1, 21, 185
|
||||||
|
"d:\rust-ws\eskin-player\src\serial_core\error.rs", "Rust", 45, 0, 0, 0, 0, 0, 0, 0, 0, 7, 52
|
||||||
|
"d:\rust-ws\eskin-player\src\serial_core\frame.rs", "Rust", 32, 0, 0, 0, 0, 0, 0, 0, 0, 5, 37
|
||||||
|
"d:\rust-ws\eskin-player\src\serial_core\mod.rs", "Rust", 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 7
|
||||||
|
"d:\rust-ws\eskin-player\src\serial_core\serial.rs", "Rust", 78, 0, 0, 0, 0, 0, 0, 0, 7, 12, 97
|
||||||
|
"d:\rust-ws\eskin-player\src\serial_core\utils.rs", "Rust", 8, 0, 0, 0, 0, 0, 0, 0, 0, 3, 11
|
||||||
|
"d:\rust-ws\eskin-player\src\style.rs", "Rust", 283, 0, 0, 0, 0, 0, 0, 0, 0, 37, 320
|
||||||
|
"d:\rust-ws\eskin-player\src\texture.rs", "Rust", 231, 0, 0, 0, 0, 0, 0, 0, 0, 21, 252
|
||||||
|
"d:\rust-ws\eskin-player\src\theme.rs", "Rust", 149, 0, 0, 0, 0, 0, 0, 0, 1, 19, 169
|
||||||
|
"d:\rust-ws\eskin-player\src\ui.rs", "Rust", 1088, 0, 0, 0, 0, 0, 0, 0, 57, 123, 1268
|
||||||
|
"d:\rust-ws\eskin-player\src\utils.rs", "Rust", 10, 0, 0, 0, 0, 0, 0, 0, 0, 2, 12
|
||||||
|
"d:\rust-ws\eskin-player\static\wgsl\shader.wgsl", "WGSL", 0, 0, 0, 0, 0, 556, 0, 0, 7, 105, 668
|
||||||
|
"Total", "-", 5024, 1276, 1430, 35, 211, 556, 94, 27, 180, 1313, 10146
|
||||||
|
1
.VSCodeCounter/2026-06-28_22-27-28/results.json
Normal file
1
.VSCodeCounter/2026-06-28_22-27-28/results.json
Normal file
File diff suppressed because one or more lines are too long
49
.VSCodeCounter/2026-06-28_22-27-28/results.md
Normal file
49
.VSCodeCounter/2026-06-28_22-27-28/results.md
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
# Summary
|
||||||
|
|
||||||
|
Date : 2026-06-28 22:27:28
|
||||||
|
|
||||||
|
Directory d:\\rust-ws\\eskin-player
|
||||||
|
|
||||||
|
Total : 75 files, 8653 codes, 180 comments, 1313 blanks, all 10146 lines
|
||||||
|
|
||||||
|
Summary / [Details](details.md) / [Diff Summary](diff.md) / [Diff Details](diff-details.md)
|
||||||
|
|
||||||
|
## Languages
|
||||||
|
| language | files | code | comment | blank | total |
|
||||||
|
| :--- | ---: | ---: | ---: | ---: | ---: |
|
||||||
|
| Rust | 22 | 5,024 | 156 | 563 | 5,743 |
|
||||||
|
| JSON | 14 | 1,430 | 0 | 14 | 1,444 |
|
||||||
|
| Markdown | 29 | 1,276 | 2 | 569 | 1,847 |
|
||||||
|
| WGSL | 1 | 556 | 7 | 105 | 668 |
|
||||||
|
| Shell Script | 6 | 211 | 14 | 43 | 268 |
|
||||||
|
| PowerShell | 1 | 94 | 1 | 13 | 108 |
|
||||||
|
| JSON with Comments | 1 | 35 | 0 | 0 | 35 |
|
||||||
|
| YAML | 1 | 27 | 0 | 6 | 33 |
|
||||||
|
|
||||||
|
## Directories
|
||||||
|
| path | files | code | comment | blank | total |
|
||||||
|
| :--- | ---: | ---: | ---: | ---: | ---: |
|
||||||
|
| . | 75 | 8,653 | 180 | 1,313 | 10,146 |
|
||||||
|
| . (Files) | 5 | 765 | 0 | 268 | 1,033 |
|
||||||
|
| .openclaw | 1 | 35 | 0 | 0 | 35 |
|
||||||
|
| .scale | 14 | 1,430 | 0 | 14 | 1,444 |
|
||||||
|
| docs | 27 | 568 | 3 | 319 | 890 |
|
||||||
|
| docs\\workflow | 26 | 553 | 1 | 307 | 861 |
|
||||||
|
| docs\\workflow (Files) | 2 | 171 | 0 | 53 | 224 |
|
||||||
|
| docs\\workflow\\templates | 24 | 382 | 1 | 254 | 637 |
|
||||||
|
| docs\\worklog | 1 | 15 | 2 | 12 | 29 |
|
||||||
|
| scripts | 6 | 299 | 14 | 54 | 367 |
|
||||||
|
| scripts (Files) | 1 | 53 | 2 | 11 | 66 |
|
||||||
|
| scripts\\gates | 1 | 43 | 2 | 10 | 55 |
|
||||||
|
| scripts\\qa | 2 | 180 | 2 | 25 | 207 |
|
||||||
|
| scripts\\tests | 1 | 6 | 2 | 1 | 9 |
|
||||||
|
| scripts\\workflow | 1 | 17 | 6 | 7 | 30 |
|
||||||
|
| src | 21 | 5,000 | 156 | 553 | 5,709 |
|
||||||
|
| src (Files) | 13 | 4,661 | 148 | 501 | 5,310 |
|
||||||
|
| src\\serial_core | 8 | 339 | 8 | 52 | 399 |
|
||||||
|
| src\\serial_core (Files) | 6 | 175 | 7 | 30 | 212 |
|
||||||
|
| src\\serial_core\\codecs | 2 | 164 | 1 | 22 | 187 |
|
||||||
|
| static | 1 | 556 | 7 | 105 | 668 |
|
||||||
|
| static\\wgsl | 1 | 556 | 7 | 105 | 668 |
|
||||||
|
|
||||||
|
Summary / [Details](details.md) / [Diff Summary](diff.md) / [Diff Details](diff-details.md)
|
||||||
127
.VSCodeCounter/2026-06-28_22-27-28/results.txt
Normal file
127
.VSCodeCounter/2026-06-28_22-27-28/results.txt
Normal file
@@ -0,0 +1,127 @@
|
|||||||
|
Date : 2026-06-28 22:27:28
|
||||||
|
Directory : d:\rust-ws\eskin-player
|
||||||
|
Total : 75 files, 8653 codes, 180 comments, 1313 blanks, all 10146 lines
|
||||||
|
|
||||||
|
Languages
|
||||||
|
+--------------------+------------+------------+------------+------------+------------+
|
||||||
|
| language | files | code | comment | blank | total |
|
||||||
|
+--------------------+------------+------------+------------+------------+------------+
|
||||||
|
| Rust | 22 | 5,024 | 156 | 563 | 5,743 |
|
||||||
|
| JSON | 14 | 1,430 | 0 | 14 | 1,444 |
|
||||||
|
| Markdown | 29 | 1,276 | 2 | 569 | 1,847 |
|
||||||
|
| WGSL | 1 | 556 | 7 | 105 | 668 |
|
||||||
|
| Shell Script | 6 | 211 | 14 | 43 | 268 |
|
||||||
|
| PowerShell | 1 | 94 | 1 | 13 | 108 |
|
||||||
|
| JSON with Comments | 1 | 35 | 0 | 0 | 35 |
|
||||||
|
| YAML | 1 | 27 | 0 | 6 | 33 |
|
||||||
|
+--------------------+------------+------------+------------+------------+------------+
|
||||||
|
|
||||||
|
Directories
|
||||||
|
+------------------------------------------------------------------------------------+------------+------------+------------+------------+------------+
|
||||||
|
| path | files | code | comment | blank | total |
|
||||||
|
+------------------------------------------------------------------------------------+------------+------------+------------+------------+------------+
|
||||||
|
| . | 75 | 8,653 | 180 | 1,313 | 10,146 |
|
||||||
|
| . (Files) | 5 | 765 | 0 | 268 | 1,033 |
|
||||||
|
| .openclaw | 1 | 35 | 0 | 0 | 35 |
|
||||||
|
| .scale | 14 | 1,430 | 0 | 14 | 1,444 |
|
||||||
|
| docs | 27 | 568 | 3 | 319 | 890 |
|
||||||
|
| docs\workflow | 26 | 553 | 1 | 307 | 861 |
|
||||||
|
| docs\workflow (Files) | 2 | 171 | 0 | 53 | 224 |
|
||||||
|
| docs\workflow\templates | 24 | 382 | 1 | 254 | 637 |
|
||||||
|
| docs\worklog | 1 | 15 | 2 | 12 | 29 |
|
||||||
|
| scripts | 6 | 299 | 14 | 54 | 367 |
|
||||||
|
| scripts (Files) | 1 | 53 | 2 | 11 | 66 |
|
||||||
|
| scripts\gates | 1 | 43 | 2 | 10 | 55 |
|
||||||
|
| scripts\qa | 2 | 180 | 2 | 25 | 207 |
|
||||||
|
| scripts\tests | 1 | 6 | 2 | 1 | 9 |
|
||||||
|
| scripts\workflow | 1 | 17 | 6 | 7 | 30 |
|
||||||
|
| src | 21 | 5,000 | 156 | 553 | 5,709 |
|
||||||
|
| src (Files) | 13 | 4,661 | 148 | 501 | 5,310 |
|
||||||
|
| src\serial_core | 8 | 339 | 8 | 52 | 399 |
|
||||||
|
| src\serial_core (Files) | 6 | 175 | 7 | 30 | 212 |
|
||||||
|
| src\serial_core\codecs | 2 | 164 | 1 | 22 | 187 |
|
||||||
|
| static | 1 | 556 | 7 | 105 | 668 |
|
||||||
|
| static\wgsl | 1 | 556 | 7 | 105 | 668 |
|
||||||
|
+------------------------------------------------------------------------------------+------------+------------+------------+------------+------------+
|
||||||
|
|
||||||
|
Files
|
||||||
|
+------------------------------------------------------------------------------------+--------------------+------------+------------+------------+------------+
|
||||||
|
| filename | language | code | comment | blank | total |
|
||||||
|
+------------------------------------------------------------------------------------+--------------------+------------+------------+------------+------------+
|
||||||
|
| d:\rust-ws\eskin-player\.openclaw\settings.json | JSON with Comments | 35 | 0 | 0 | 35 |
|
||||||
|
| d:\rust-ws\eskin-player\.scale\assets.json | JSON | 4 | 0 | 1 | 5 |
|
||||||
|
| d:\rust-ws\eskin-player\.scale\engineering-standards-baseline.json | JSON | 6 | 0 | 1 | 7 |
|
||||||
|
| d:\rust-ws\eskin-player\.scale\engineering-standards.json | JSON | 67 | 0 | 1 | 68 |
|
||||||
|
| d:\rust-ws\eskin-player\.scale\frameworks.json | JSON | 23 | 0 | 1 | 24 |
|
||||||
|
| d:\rust-ws\eskin-player\.scale\governance.lock.json | JSON | 200 | 0 | 1 | 201 |
|
||||||
|
| d:\rust-ws\eskin-player\.scale\output-policy.json | JSON | 72 | 0 | 1 | 73 |
|
||||||
|
| d:\rust-ws\eskin-player\.scale\product-smoke.json | JSON | 33 | 0 | 1 | 34 |
|
||||||
|
| d:\rust-ws\eskin-player\.scale\quality-contract.json | JSON | 70 | 0 | 1 | 71 |
|
||||||
|
| d:\rust-ws\eskin-player\.scale\resource-policy.json | JSON | 39 | 0 | 1 | 40 |
|
||||||
|
| d:\rust-ws\eskin-player\.scale\skills-registry.json | JSON | 82 | 0 | 1 | 83 |
|
||||||
|
| d:\rust-ws\eskin-player\.scale\skills.json | JSON | 630 | 0 | 1 | 631 |
|
||||||
|
| d:\rust-ws\eskin-player\.scale\tools.json | JSON | 118 | 0 | 1 | 119 |
|
||||||
|
| d:\rust-ws\eskin-player\.scale\verification.json | JSON | 35 | 0 | 1 | 36 |
|
||||||
|
| d:\rust-ws\eskin-player\.scale\workflow.json | JSON | 51 | 0 | 1 | 52 |
|
||||||
|
| d:\rust-ws\eskin-player\AGENTS.md | Markdown | 21 | 0 | 6 | 27 |
|
||||||
|
| d:\rust-ws\eskin-player\README.md | Markdown | 33 | 0 | 10 | 43 |
|
||||||
|
| d:\rust-ws\eskin-player\TOOLS.md | Markdown | 56 | 0 | 6 | 62 |
|
||||||
|
| d:\rust-ws\eskin-player\build.rs | Rust | 24 | 0 | 10 | 34 |
|
||||||
|
| d:\rust-ws\eskin-player\docs\workflow\QUALITY_CONTRACT.md | Markdown | 28 | 0 | 8 | 36 |
|
||||||
|
| d:\rust-ws\eskin-player\docs\workflow\README.md | Markdown | 143 | 0 | 45 | 188 |
|
||||||
|
| d:\rust-ws\eskin-player\docs\workflow\templates\api-contract.md | Markdown | 15 | 0 | 15 | 30 |
|
||||||
|
| d:\rust-ws\eskin-player\docs\workflow\templates\architecture-review.md | Markdown | 15 | 0 | 9 | 24 |
|
||||||
|
| d:\rust-ws\eskin-player\docs\workflow\templates\db-change-plan.md | Markdown | 11 | 0 | 10 | 21 |
|
||||||
|
| d:\rust-ws\eskin-player\docs\workflow\templates\docs-impact.md | Markdown | 9 | 0 | 9 | 18 |
|
||||||
|
| d:\rust-ws\eskin-player\docs\workflow\templates\e2e-plan.md | Markdown | 11 | 0 | 10 | 21 |
|
||||||
|
| d:\rust-ws\eskin-player\docs\workflow\templates\explore.md | Markdown | 11 | 0 | 10 | 21 |
|
||||||
|
| d:\rust-ws\eskin-player\docs\workflow\templates\github-actions-scale-preflight.yml | YAML | 27 | 0 | 6 | 33 |
|
||||||
|
| d:\rust-ws\eskin-player\docs\workflow\templates\mini-prd.md | Markdown | 23 | 0 | 20 | 43 |
|
||||||
|
| d:\rust-ws\eskin-player\docs\workflow\templates\plan.md | Markdown | 17 | 0 | 12 | 29 |
|
||||||
|
| d:\rust-ws\eskin-player\docs\workflow\templates\pre-push-scale-preflight.sh | Shell Script | 6 | 1 | 2 | 9 |
|
||||||
|
| d:\rust-ws\eskin-player\docs\workflow\templates\product-smoke.md | Markdown | 44 | 0 | 18 | 62 |
|
||||||
|
| d:\rust-ws\eskin-player\docs\workflow\templates\reality-check.md | Markdown | 13 | 0 | 13 | 26 |
|
||||||
|
| d:\rust-ws\eskin-player\docs\workflow\templates\resource-cleanup.md | Markdown | 10 | 0 | 5 | 15 |
|
||||||
|
| d:\rust-ws\eskin-player\docs\workflow\templates\resource-impact.md | Markdown | 15 | 0 | 11 | 26 |
|
||||||
|
| d:\rust-ws\eskin-player\docs\workflow\templates\review.md | Markdown | 9 | 0 | 8 | 17 |
|
||||||
|
| d:\rust-ws\eskin-player\docs\workflow\templates\runtime.md | Markdown | 15 | 0 | 7 | 22 |
|
||||||
|
| d:\rust-ws\eskin-player\docs\workflow\templates\security-review.md | Markdown | 15 | 0 | 12 | 27 |
|
||||||
|
| d:\rust-ws\eskin-player\docs\workflow\templates\skill-evidence.md | Markdown | 21 | 0 | 13 | 34 |
|
||||||
|
| d:\rust-ws\eskin-player\docs\workflow\templates\skill-plan.md | Markdown | 25 | 0 | 15 | 40 |
|
||||||
|
| d:\rust-ws\eskin-player\docs\workflow\templates\standards-impact.md | Markdown | 20 | 0 | 9 | 29 |
|
||||||
|
| d:\rust-ws\eskin-player\docs\workflow\templates\summary.md | Markdown | 11 | 0 | 9 | 20 |
|
||||||
|
| d:\rust-ws\eskin-player\docs\workflow\templates\ui-spec.md | Markdown | 17 | 0 | 13 | 30 |
|
||||||
|
| d:\rust-ws\eskin-player\docs\workflow\templates\verification.md | Markdown | 11 | 0 | 8 | 19 |
|
||||||
|
| d:\rust-ws\eskin-player\docs\workflow\templates\visual-review.md | Markdown | 11 | 0 | 10 | 21 |
|
||||||
|
| d:\rust-ws\eskin-player\docs\worklog\metrics.md | Markdown | 15 | 2 | 12 | 29 |
|
||||||
|
| d:\rust-ws\eskin-player\render.md | Markdown | 631 | 0 | 236 | 867 |
|
||||||
|
| d:\rust-ws\eskin-player\scripts\gates\all.sh | Shell Script | 43 | 2 | 10 | 55 |
|
||||||
|
| d:\rust-ws\eskin-player\scripts\qa\product-smoke.ps1 | PowerShell | 94 | 1 | 13 | 108 |
|
||||||
|
| d:\rust-ws\eskin-player\scripts\qa\product-smoke.sh | Shell Script | 86 | 1 | 12 | 99 |
|
||||||
|
| d:\rust-ws\eskin-player\scripts\tests\run.sh | Shell Script | 6 | 2 | 1 | 9 |
|
||||||
|
| d:\rust-ws\eskin-player\scripts\validate-config.sh | Shell Script | 53 | 2 | 11 | 66 |
|
||||||
|
| d:\rust-ws\eskin-player\scripts\workflow\verify.sh | Shell Script | 17 | 6 | 7 | 30 |
|
||||||
|
| d:\rust-ws\eskin-player\src\app.rs | Rust | 330 | 12 | 39 | 381 |
|
||||||
|
| d:\rust-ws\eskin-player\src\connection.rs | Rust | 153 | 11 | 26 | 190 |
|
||||||
|
| d:\rust-ws\eskin-player\src\main.rs | Rust | 30 | 0 | 4 | 34 |
|
||||||
|
| d:\rust-ws\eskin-player\src\matrix.rs | Rust | 101 | 0 | 10 | 111 |
|
||||||
|
| d:\rust-ws\eskin-player\src\model.rs | Rust | 170 | 7 | 19 | 196 |
|
||||||
|
| d:\rust-ws\eskin-player\src\recording.rs | Rust | 324 | 52 | 69 | 445 |
|
||||||
|
| d:\rust-ws\eskin-player\src\render.rs | Rust | 855 | 8 | 61 | 924 |
|
||||||
|
| d:\rust-ws\eskin-player\src\resources.rs | Rust | 937 | 0 | 71 | 1,008 |
|
||||||
|
| d:\rust-ws\eskin-player\src\serial_core\codec.rs | Rust | 6 | 0 | 2 | 8 |
|
||||||
|
| d:\rust-ws\eskin-player\src\serial_core\codecs\mod.rs | Rust | 1 | 0 | 1 | 2 |
|
||||||
|
| d:\rust-ws\eskin-player\src\serial_core\codecs\tactile_a.rs | Rust | 163 | 1 | 21 | 185 |
|
||||||
|
| d:\rust-ws\eskin-player\src\serial_core\error.rs | Rust | 45 | 0 | 7 | 52 |
|
||||||
|
| d:\rust-ws\eskin-player\src\serial_core\frame.rs | Rust | 32 | 0 | 5 | 37 |
|
||||||
|
| d:\rust-ws\eskin-player\src\serial_core\mod.rs | Rust | 6 | 0 | 1 | 7 |
|
||||||
|
| d:\rust-ws\eskin-player\src\serial_core\serial.rs | Rust | 78 | 7 | 12 | 97 |
|
||||||
|
| d:\rust-ws\eskin-player\src\serial_core\utils.rs | Rust | 8 | 0 | 3 | 11 |
|
||||||
|
| d:\rust-ws\eskin-player\src\style.rs | Rust | 283 | 0 | 37 | 320 |
|
||||||
|
| d:\rust-ws\eskin-player\src\texture.rs | Rust | 231 | 0 | 21 | 252 |
|
||||||
|
| d:\rust-ws\eskin-player\src\theme.rs | Rust | 149 | 1 | 19 | 169 |
|
||||||
|
| d:\rust-ws\eskin-player\src\ui.rs | Rust | 1,088 | 57 | 123 | 1,268 |
|
||||||
|
| d:\rust-ws\eskin-player\src\utils.rs | Rust | 10 | 0 | 2 | 12 |
|
||||||
|
| d:\rust-ws\eskin-player\static\wgsl\shader.wgsl | WGSL | 556 | 7 | 105 | 668 |
|
||||||
|
| Total | | 8,653 | 180 | 1,313 | 10,146 |
|
||||||
|
+------------------------------------------------------------------------------------+--------------------+------------+------------+------------+------------+
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 25 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 117 KiB |
347
res/hand.mtl
347
res/hand.mtl
@@ -1,347 +0,0 @@
|
|||||||
# Blender 5.1.2 MTL File: '未命名.blend'
|
|
||||||
# www.blender.org
|
|
||||||
|
|
||||||
newmtl mat_0
|
|
||||||
Kd 0.439636 0.439636 0.439636
|
|
||||||
Ks 0.500000 0.500000 0.500000
|
|
||||||
Ke 0.000000 0.000000 0.000000
|
|
||||||
Ni 1.500000
|
|
||||||
d 1.000000
|
|
||||||
illum 3
|
|
||||||
Pr 1.000000
|
|
||||||
Pm 1.000000
|
|
||||||
Ps 0.000000
|
|
||||||
Pc 0.000000
|
|
||||||
Pcr 0.030000
|
|
||||||
aniso 0.000000
|
|
||||||
anisor 0.000000
|
|
||||||
|
|
||||||
newmtl mat_1
|
|
||||||
Kd 0.450786 0.545725 0.745404
|
|
||||||
Ks 0.500000 0.500000 0.500000
|
|
||||||
Ke 0.000000 0.000000 0.000000
|
|
||||||
Ni 1.500000
|
|
||||||
d 1.000000
|
|
||||||
illum 3
|
|
||||||
Pr 1.000000
|
|
||||||
Pm 1.000000
|
|
||||||
Ps 0.000000
|
|
||||||
Pc 0.000000
|
|
||||||
Pcr 0.030000
|
|
||||||
aniso 0.000000
|
|
||||||
anisor 0.000000
|
|
||||||
|
|
||||||
newmtl mat_10
|
|
||||||
Kd 0.473532 0.623934 0.545725
|
|
||||||
Ks 0.500000 0.500000 0.500000
|
|
||||||
Ke 0.000000 0.000000 0.000000
|
|
||||||
Ni 1.500000
|
|
||||||
d 1.000000
|
|
||||||
illum 3
|
|
||||||
Pr 1.000000
|
|
||||||
Pm 1.000000
|
|
||||||
Ps 0.000000
|
|
||||||
Pc 0.000000
|
|
||||||
Pcr 0.030000
|
|
||||||
aniso 0.000000
|
|
||||||
anisor 0.000000
|
|
||||||
|
|
||||||
newmtl mat_11
|
|
||||||
Kd 0.033105 0.033105 0.033105
|
|
||||||
Ks 0.500000 0.500000 0.500000
|
|
||||||
Ke 0.000000 0.000000 0.000000
|
|
||||||
Ni 1.500000
|
|
||||||
d 1.000000
|
|
||||||
illum 3
|
|
||||||
Pr 1.000000
|
|
||||||
Pm 1.000000
|
|
||||||
Ps 0.000000
|
|
||||||
Pc 0.000000
|
|
||||||
Pcr 0.030000
|
|
||||||
aniso 0.000000
|
|
||||||
anisor 0.000000
|
|
||||||
|
|
||||||
newmtl mat_12
|
|
||||||
Kd 0.022170 0.017642 0.015993
|
|
||||||
Ks 0.500000 0.500000 0.500000
|
|
||||||
Ke 0.000000 0.000000 0.000000
|
|
||||||
Ni 1.500000
|
|
||||||
d 1.000000
|
|
||||||
illum 3
|
|
||||||
Pr 1.000000
|
|
||||||
Pm 1.000000
|
|
||||||
Ps 0.000000
|
|
||||||
Pc 0.000000
|
|
||||||
Pcr 0.030000
|
|
||||||
aniso 0.000000
|
|
||||||
anisor 0.000000
|
|
||||||
|
|
||||||
newmtl mat_13
|
|
||||||
Kd 0.000000 0.000000 0.000000
|
|
||||||
Ks 0.500000 0.500000 0.500000
|
|
||||||
Ke 0.000000 0.000000 0.000000
|
|
||||||
Ni 1.500000
|
|
||||||
d 1.000000
|
|
||||||
illum 3
|
|
||||||
Pr 1.000000
|
|
||||||
Pm 1.000000
|
|
||||||
Ps 0.000000
|
|
||||||
Pc 0.000000
|
|
||||||
Pcr 0.030000
|
|
||||||
aniso 0.000000
|
|
||||||
anisor 0.000000
|
|
||||||
|
|
||||||
newmtl mat_14
|
|
||||||
Kd 0.313971 0.401978 0.428669
|
|
||||||
Ks 0.500000 0.500000 0.500000
|
|
||||||
Ke 0.000000 0.000000 0.000000
|
|
||||||
Ni 1.500000
|
|
||||||
d 1.000000
|
|
||||||
illum 3
|
|
||||||
Pr 1.000000
|
|
||||||
Pm 1.000000
|
|
||||||
Ps 0.000000
|
|
||||||
Pc 0.000000
|
|
||||||
Pcr 0.030000
|
|
||||||
aniso 0.000000
|
|
||||||
anisor 0.000000
|
|
||||||
|
|
||||||
newmtl mat_15
|
|
||||||
Kd 1.000000 0.318547 0.000000
|
|
||||||
Ks 0.500000 0.500000 0.500000
|
|
||||||
Ke 0.000000 0.000000 0.000000
|
|
||||||
Ni 1.500000
|
|
||||||
d 1.000000
|
|
||||||
illum 3
|
|
||||||
Pr 1.000000
|
|
||||||
Pm 1.000000
|
|
||||||
Ps 0.000000
|
|
||||||
Pc 0.000000
|
|
||||||
Pcr 0.030000
|
|
||||||
aniso 0.000000
|
|
||||||
anisor 0.000000
|
|
||||||
|
|
||||||
newmtl mat_16
|
|
||||||
Kd 0.033105 0.132868 0.033105
|
|
||||||
Ks 0.500000 0.500000 0.500000
|
|
||||||
Ke 0.000000 0.000000 0.000000
|
|
||||||
Ni 1.500000
|
|
||||||
d 1.000000
|
|
||||||
illum 3
|
|
||||||
Pr 1.000000
|
|
||||||
Pm 1.000000
|
|
||||||
Ps 0.000000
|
|
||||||
Pc 0.000000
|
|
||||||
Pcr 0.030000
|
|
||||||
aniso 0.000000
|
|
||||||
anisor 0.000000
|
|
||||||
|
|
||||||
newmtl mat_17
|
|
||||||
Kd 0.623934 0.679542 0.806922
|
|
||||||
Ks 0.500000 0.500000 0.500000
|
|
||||||
Ke 0.000000 0.000000 0.000000
|
|
||||||
Ni 1.500000
|
|
||||||
d 1.000000
|
|
||||||
illum 3
|
|
||||||
Pr 1.000000
|
|
||||||
Pm 1.000000
|
|
||||||
Ps 0.000000
|
|
||||||
Pc 0.000000
|
|
||||||
Pcr 0.030000
|
|
||||||
aniso 0.000000
|
|
||||||
anisor 0.000000
|
|
||||||
|
|
||||||
newmtl mat_18
|
|
||||||
Kd 0.052861 0.038204 0.031891
|
|
||||||
Ks 0.500000 0.500000 0.500000
|
|
||||||
Ke 0.000000 0.000000 0.000000
|
|
||||||
Ni 1.500000
|
|
||||||
d 1.000000
|
|
||||||
illum 3
|
|
||||||
Pr 1.000000
|
|
||||||
Pm 1.000000
|
|
||||||
Ps 0.000000
|
|
||||||
Pc 0.000000
|
|
||||||
Pcr 0.030000
|
|
||||||
aniso 0.000000
|
|
||||||
anisor 0.000000
|
|
||||||
|
|
||||||
newmtl mat_19
|
|
||||||
Kd 1.000000 0.679542 0.644453
|
|
||||||
Ks 0.500000 0.500000 0.500000
|
|
||||||
Ke 0.000000 0.000000 0.000000
|
|
||||||
Ni 1.500000
|
|
||||||
d 1.000000
|
|
||||||
illum 3
|
|
||||||
Pr 1.000000
|
|
||||||
Pm 1.000000
|
|
||||||
Ps 0.000000
|
|
||||||
Pc 0.000000
|
|
||||||
Pcr 0.030000
|
|
||||||
aniso 0.000000
|
|
||||||
anisor 0.000000
|
|
||||||
|
|
||||||
newmtl mat_2
|
|
||||||
Kd 1.000000 0.278894 0.278894
|
|
||||||
Ks 0.500000 0.500000 0.500000
|
|
||||||
Ke 0.000000 0.000000 0.000000
|
|
||||||
Ni 1.500000
|
|
||||||
d 1.000000
|
|
||||||
illum 3
|
|
||||||
Pr 1.000000
|
|
||||||
Pm 1.000000
|
|
||||||
Ps 0.000000
|
|
||||||
Pc 0.000000
|
|
||||||
Pcr 0.030000
|
|
||||||
aniso 0.000000
|
|
||||||
anisor 0.000000
|
|
||||||
|
|
||||||
newmtl mat_20
|
|
||||||
Kd 1.000000 0.318547 0.033105
|
|
||||||
Ks 0.500000 0.500000 0.500000
|
|
||||||
Ke 0.000000 0.000000 0.000000
|
|
||||||
Ni 1.500000
|
|
||||||
d 1.000000
|
|
||||||
illum 3
|
|
||||||
Pr 1.000000
|
|
||||||
Pm 1.000000
|
|
||||||
Ps 0.000000
|
|
||||||
Pc 0.000000
|
|
||||||
Pcr 0.030000
|
|
||||||
aniso 0.000000
|
|
||||||
anisor 0.000000
|
|
||||||
|
|
||||||
newmtl mat_21
|
|
||||||
Kd 1.000000 0.396755 1.000000
|
|
||||||
Ks 0.500000 0.500000 0.500000
|
|
||||||
Ke 0.000000 0.000000 0.000000
|
|
||||||
Ni 1.500000
|
|
||||||
d 1.000000
|
|
||||||
illum 3
|
|
||||||
Pr 1.000000
|
|
||||||
Pm 1.000000
|
|
||||||
Ps 0.000000
|
|
||||||
Pc 0.000000
|
|
||||||
Pcr 0.030000
|
|
||||||
aniso 0.000000
|
|
||||||
anisor 0.000000
|
|
||||||
|
|
||||||
newmtl mat_22
|
|
||||||
Kd 0.930111 0.428669 0.230740
|
|
||||||
Ks 0.500000 0.500000 0.500000
|
|
||||||
Ke 0.000000 0.000000 0.000000
|
|
||||||
Ni 1.500000
|
|
||||||
d 1.000000
|
|
||||||
illum 3
|
|
||||||
Pr 1.000000
|
|
||||||
Pm 1.000000
|
|
||||||
Ps 0.000000
|
|
||||||
Pc 0.000000
|
|
||||||
Pcr 0.030000
|
|
||||||
aniso 0.000000
|
|
||||||
anisor 0.000000
|
|
||||||
|
|
||||||
newmtl mat_3
|
|
||||||
Kd 0.291771 0.258167 0.127438
|
|
||||||
Ks 0.500000 0.500000 0.500000
|
|
||||||
Ke 0.000000 0.000000 0.000000
|
|
||||||
Ni 1.500000
|
|
||||||
d 1.000000
|
|
||||||
illum 3
|
|
||||||
Pr 1.000000
|
|
||||||
Pm 1.000000
|
|
||||||
Ps 0.000000
|
|
||||||
Pc 0.000000
|
|
||||||
Pcr 0.030000
|
|
||||||
aniso 0.000000
|
|
||||||
anisor 0.000000
|
|
||||||
|
|
||||||
newmtl mat_4
|
|
||||||
Kd 0.318547 0.318547 0.318547
|
|
||||||
Ks 0.500000 0.500000 0.500000
|
|
||||||
Ke 0.000000 0.000000 0.000000
|
|
||||||
Ni 1.500000
|
|
||||||
d 1.000000
|
|
||||||
illum 3
|
|
||||||
Pr 1.000000
|
|
||||||
Pm 1.000000
|
|
||||||
Ps 0.000000
|
|
||||||
Pc 0.000000
|
|
||||||
Pcr 0.030000
|
|
||||||
aniso 0.000000
|
|
||||||
anisor 0.000000
|
|
||||||
|
|
||||||
newmtl mat_5
|
|
||||||
Kd 0.564712 0.391552 0.266356
|
|
||||||
Ks 0.500000 0.500000 0.500000
|
|
||||||
Ke 0.000000 0.000000 0.000000
|
|
||||||
Ni 1.500000
|
|
||||||
d 1.000000
|
|
||||||
illum 3
|
|
||||||
Pr 1.000000
|
|
||||||
Pm 1.000000
|
|
||||||
Ps 0.000000
|
|
||||||
Pc 0.000000
|
|
||||||
Pcr 0.030000
|
|
||||||
aniso 0.000000
|
|
||||||
anisor 0.000000
|
|
||||||
|
|
||||||
newmtl mat_6
|
|
||||||
Kd 0.000000 0.318547 0.000000
|
|
||||||
Ks 0.500000 0.500000 0.500000
|
|
||||||
Ke 0.000000 0.000000 0.000000
|
|
||||||
Ni 1.500000
|
|
||||||
d 1.000000
|
|
||||||
illum 3
|
|
||||||
Pr 1.000000
|
|
||||||
Pm 1.000000
|
|
||||||
Ps 0.000000
|
|
||||||
Pc 0.000000
|
|
||||||
Pcr 0.030000
|
|
||||||
aniso 0.000000
|
|
||||||
anisor 0.000000
|
|
||||||
|
|
||||||
newmtl mat_7
|
|
||||||
Kd 1.000000 1.000000 0.000000
|
|
||||||
Ks 0.500000 0.500000 0.500000
|
|
||||||
Ke 0.000000 0.000000 0.000000
|
|
||||||
Ni 1.500000
|
|
||||||
d 1.000000
|
|
||||||
illum 3
|
|
||||||
Pr 1.000000
|
|
||||||
Pm 1.000000
|
|
||||||
Ps 0.000000
|
|
||||||
Pc 0.000000
|
|
||||||
Pcr 0.030000
|
|
||||||
aniso 0.000000
|
|
||||||
anisor 0.000000
|
|
||||||
|
|
||||||
newmtl mat_8
|
|
||||||
Kd 0.887891 0.887891 0.887891
|
|
||||||
Ks 0.500000 0.500000 0.500000
|
|
||||||
Ke 0.000000 0.000000 0.000000
|
|
||||||
Ni 1.500000
|
|
||||||
d 1.000000
|
|
||||||
illum 3
|
|
||||||
Pr 1.000000
|
|
||||||
Pm 1.000000
|
|
||||||
Ps 0.000000
|
|
||||||
Pc 0.000000
|
|
||||||
Pcr 0.030000
|
|
||||||
aniso 0.000000
|
|
||||||
anisor 0.000000
|
|
||||||
|
|
||||||
newmtl mat_9
|
|
||||||
Kd 0.527115 0.768151 0.737881
|
|
||||||
Ks 0.500000 0.500000 0.500000
|
|
||||||
Ke 0.000000 0.000000 0.000000
|
|
||||||
Ni 1.500000
|
|
||||||
d 1.000000
|
|
||||||
illum 3
|
|
||||||
Pr 1.000000
|
|
||||||
Pm 1.000000
|
|
||||||
Ps 0.000000
|
|
||||||
Pc 0.000000
|
|
||||||
Pcr 0.030000
|
|
||||||
aniso 0.000000
|
|
||||||
anisor 0.000000
|
|
||||||
163
src/render.rs
163
src/render.rs
@@ -40,6 +40,43 @@ pub struct HandGatewayMode {
|
|||||||
pub range: Range<u32>,
|
pub range: Range<u32>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const HAND_TIP_MATRICES: [HandTipMatrix; 5] = [
|
||||||
|
HandTipMatrix {
|
||||||
|
center_px: [260.0, 490.0],
|
||||||
|
size_px: [70.0, 120.0],
|
||||||
|
angle_rad: -0.45,
|
||||||
|
},
|
||||||
|
HandTipMatrix {
|
||||||
|
center_px: [360.0, 255.0],
|
||||||
|
size_px: [70.0, 120.0],
|
||||||
|
angle_rad: -0.05,
|
||||||
|
},
|
||||||
|
HandTipMatrix {
|
||||||
|
center_px: [485.0, 225.0],
|
||||||
|
size_px: [70.0, 120.0],
|
||||||
|
angle_rad: 0.0,
|
||||||
|
},
|
||||||
|
HandTipMatrix {
|
||||||
|
center_px: [595.0, 260.0],
|
||||||
|
size_px: [70.0, 120.0],
|
||||||
|
angle_rad: 0.12,
|
||||||
|
},
|
||||||
|
HandTipMatrix {
|
||||||
|
center_px: [705.0, 385.0],
|
||||||
|
size_px: [70.0, 120.0],
|
||||||
|
angle_rad: 0.28,
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
// Each entry pins one miniature matrix to a fingertip in hand.png.
|
||||||
|
// Coordinates are authored in source-image pixels so they are easy to tune by eye.
|
||||||
|
// size_px keeps the same 7:12 aspect as the Finger-mode 7 columns x 12 rows matrix.
|
||||||
|
struct HandTipMatrix {
|
||||||
|
center_px: [f32; 2],
|
||||||
|
size_px: [f32; 2],
|
||||||
|
angle_rad: f32,
|
||||||
|
}
|
||||||
|
|
||||||
impl egui_wgpu::CallbackTrait for WgpuBackgroundCallback {
|
impl egui_wgpu::CallbackTrait for WgpuBackgroundCallback {
|
||||||
fn prepare(
|
fn prepare(
|
||||||
&self,
|
&self,
|
||||||
@@ -78,12 +115,15 @@ pub struct BackgroundRenderResources {
|
|||||||
hand_image_pipeline: wgpu::RenderPipeline,
|
hand_image_pipeline: wgpu::RenderPipeline,
|
||||||
glyph_pipeline: wgpu::RenderPipeline,
|
glyph_pipeline: wgpu::RenderPipeline,
|
||||||
dot_pipeline: wgpu::RenderPipeline,
|
dot_pipeline: wgpu::RenderPipeline,
|
||||||
|
hand_dot_pipeline: wgpu::RenderPipeline,
|
||||||
hand_image_bind_group: wgpu::BindGroup,
|
hand_image_bind_group: wgpu::BindGroup,
|
||||||
hand_image_texture: texture::Texture,
|
hand_image_texture: texture::Texture,
|
||||||
|
|
||||||
glyph_vertex_buffer: wgpu::Buffer,
|
glyph_vertex_buffer: wgpu::Buffer,
|
||||||
glyph_instance_buffer: wgpu::Buffer,
|
glyph_instance_buffer: wgpu::Buffer,
|
||||||
glyph_instances: Vec<GlyphInstance>,
|
glyph_instances: Vec<GlyphInstance>,
|
||||||
|
hand_dot_instance_buffer: wgpu::Buffer,
|
||||||
|
hand_dot_instances: Vec<GlyphInstance>,
|
||||||
render_options: RenderOptions,
|
render_options: RenderOptions,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -405,6 +445,8 @@ impl BackgroundRenderResources {
|
|||||||
let glyph_pipeline =
|
let glyph_pipeline =
|
||||||
create_glyph_pipeline(device, target_format, &shader, &pipeline_layout);
|
create_glyph_pipeline(device, target_format, &shader, &pipeline_layout);
|
||||||
let dot_pipeline = create_dot_pipeline(device, target_format, &shader, &pipeline_layout);
|
let dot_pipeline = create_dot_pipeline(device, target_format, &shader, &pipeline_layout);
|
||||||
|
let hand_dot_pipeline =
|
||||||
|
create_hand_dot_pipeline(device, target_format, &shader, &pipeline_layout);
|
||||||
|
|
||||||
let _model_pipelines =
|
let _model_pipelines =
|
||||||
create_model_pipelines(device, target_format, &shader, &model_pipeline_layout);
|
create_model_pipelines(device, target_format, &shader, &model_pipeline_layout);
|
||||||
@@ -432,6 +474,19 @@ impl BackgroundRenderResources {
|
|||||||
contents: bytemuck::cast_slice(&glyph_instances),
|
contents: bytemuck::cast_slice(&glyph_instances),
|
||||||
usage: wgpu::BufferUsages::VERTEX | wgpu::BufferUsages::COPY_DST,
|
usage: wgpu::BufferUsages::VERTEX | wgpu::BufferUsages::COPY_DST,
|
||||||
});
|
});
|
||||||
|
let hand_dot_instances = build_hand_dot_instances(
|
||||||
|
rows,
|
||||||
|
cols,
|
||||||
|
hand_image_texture.width as f32,
|
||||||
|
hand_image_texture.height as f32,
|
||||||
|
&[[0.0, 0.0]; PRESSURE_CELL_COUNT],
|
||||||
|
);
|
||||||
|
let hand_dot_instance_buffer =
|
||||||
|
device.create_buffer_init(&wgpu::util::BufferInitDescriptor {
|
||||||
|
label: Some("Hand Fingertip Dot Matrix Instance Buffer"),
|
||||||
|
contents: bytemuck::cast_slice(&hand_dot_instances),
|
||||||
|
usage: wgpu::BufferUsages::VERTEX | wgpu::BufferUsages::COPY_DST,
|
||||||
|
});
|
||||||
|
|
||||||
Self {
|
Self {
|
||||||
layout,
|
layout,
|
||||||
@@ -445,11 +500,14 @@ impl BackgroundRenderResources {
|
|||||||
hand_image_pipeline,
|
hand_image_pipeline,
|
||||||
glyph_pipeline,
|
glyph_pipeline,
|
||||||
dot_pipeline,
|
dot_pipeline,
|
||||||
|
hand_dot_pipeline,
|
||||||
hand_image_bind_group,
|
hand_image_bind_group,
|
||||||
hand_image_texture,
|
hand_image_texture,
|
||||||
glyph_vertex_buffer,
|
glyph_vertex_buffer,
|
||||||
glyph_instance_buffer,
|
glyph_instance_buffer,
|
||||||
glyph_instances,
|
glyph_instances,
|
||||||
|
hand_dot_instance_buffer,
|
||||||
|
hand_dot_instances,
|
||||||
render_options,
|
render_options,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -485,6 +543,21 @@ impl BackgroundRenderResources {
|
|||||||
0,
|
0,
|
||||||
bytemuck::cast_slice(&self.glyph_instances),
|
bytemuck::cast_slice(&self.glyph_instances),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Hand mode uses five UV-anchored fingertip matrices over hand.png.
|
||||||
|
// Rebuild their instance positions here so pressure colors update every frame.
|
||||||
|
self.hand_dot_instances = build_hand_dot_instances(
|
||||||
|
self.rows,
|
||||||
|
self.cols,
|
||||||
|
self.hand_image_texture.width as f32,
|
||||||
|
self.hand_image_texture.height as f32,
|
||||||
|
pressure,
|
||||||
|
);
|
||||||
|
queue.write_buffer(
|
||||||
|
&self.hand_dot_instance_buffer,
|
||||||
|
0,
|
||||||
|
bytemuck::cast_slice(&self.hand_dot_instances),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn paint(&self, render_pass: &mut wgpu::RenderPass<'_>, active_mode: &ActiveMode) {
|
fn paint(&self, render_pass: &mut wgpu::RenderPass<'_>, active_mode: &ActiveMode) {
|
||||||
@@ -493,13 +566,14 @@ impl BackgroundRenderResources {
|
|||||||
render_pass.set_pipeline(&self.background_pipeline);
|
render_pass.set_pipeline(&self.background_pipeline);
|
||||||
render_pass.draw(0..3, 0..1);
|
render_pass.draw(0..3, 0..1);
|
||||||
|
|
||||||
|
match active_mode {
|
||||||
|
ActiveMode::Finger(mode) => self.paint_finger(render_pass, mode),
|
||||||
|
ActiveMode::Hand(mode) => {
|
||||||
render_pass.set_pipeline(&self.hand_image_pipeline);
|
render_pass.set_pipeline(&self.hand_image_pipeline);
|
||||||
render_pass.set_bind_group(1, &self.hand_image_bind_group, &[]);
|
render_pass.set_bind_group(1, &self.hand_image_bind_group, &[]);
|
||||||
render_pass.draw(0..6, 0..1);
|
render_pass.draw(0..6, 0..1);
|
||||||
|
self.paint_hand(render_pass, mode);
|
||||||
match active_mode {
|
}
|
||||||
ActiveMode::Finger(mode) => self.paint_finger(render_pass, mode),
|
|
||||||
ActiveMode::Hand(mode) => self.paint_hand(render_pass, mode),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -520,7 +594,12 @@ impl BackgroundRenderResources {
|
|||||||
|
|
||||||
fn paint_hand(&self, render_pass: &mut wgpu::RenderPass<'_>, mode: &HandGatewayMode) {
|
fn paint_hand(&self, render_pass: &mut wgpu::RenderPass<'_>, mode: &HandGatewayMode) {
|
||||||
let _range = mode.range.clone();
|
let _range = mode.range.clone();
|
||||||
let _ = render_pass;
|
|
||||||
|
// Draw the five fingertip dot matrices after hand.png, so they sit on top of the texture.
|
||||||
|
render_pass.set_pipeline(&self.hand_dot_pipeline);
|
||||||
|
render_pass.set_vertex_buffer(0, self.glyph_vertex_buffer.slice(..));
|
||||||
|
render_pass.set_vertex_buffer(1, self.hand_dot_instance_buffer.slice(..));
|
||||||
|
render_pass.draw(0..6, 0..self.hand_dot_instances.len() as u32);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn visible_instance_count(&self, rows: u32, cols: u32) -> u32 {
|
fn visible_instance_count(&self, rows: u32, cols: u32) -> u32 {
|
||||||
@@ -788,6 +867,80 @@ fn create_dot_pipeline(
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn create_hand_dot_pipeline(
|
||||||
|
device: &wgpu::Device,
|
||||||
|
target_format: &wgpu::TextureFormat,
|
||||||
|
shader: &wgpu::ShaderModule,
|
||||||
|
layout: &wgpu::PipelineLayout,
|
||||||
|
) -> wgpu::RenderPipeline {
|
||||||
|
device.create_render_pipeline(&wgpu::RenderPipelineDescriptor {
|
||||||
|
label: Some("Hand Fingertip Dot Matrix Pipeline"),
|
||||||
|
layout: Some(layout),
|
||||||
|
vertex: wgpu::VertexState {
|
||||||
|
module: shader,
|
||||||
|
entry_point: Some("vs_hand_dot"),
|
||||||
|
compilation_options: Default::default(),
|
||||||
|
buffers: &[GlyphVertex::desc(), GlyphInstance::desc()],
|
||||||
|
},
|
||||||
|
fragment: Some(wgpu::FragmentState {
|
||||||
|
module: shader,
|
||||||
|
entry_point: Some("fs_hand_dot"),
|
||||||
|
compilation_options: Default::default(),
|
||||||
|
targets: &[Some(wgpu::ColorTargetState {
|
||||||
|
format: *target_format,
|
||||||
|
blend: Some(wgpu::BlendState::ALPHA_BLENDING),
|
||||||
|
write_mask: wgpu::ColorWrites::ALL,
|
||||||
|
})],
|
||||||
|
}),
|
||||||
|
primitive: wgpu::PrimitiveState::default(),
|
||||||
|
depth_stencil: None,
|
||||||
|
multisample: wgpu::MultisampleState::default(),
|
||||||
|
multiview_mask: None,
|
||||||
|
cache: None,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
fn build_hand_dot_instances(
|
||||||
|
rows: u32,
|
||||||
|
cols: u32,
|
||||||
|
image_width: f32,
|
||||||
|
image_height: f32,
|
||||||
|
pressure: &PressureFrame,
|
||||||
|
) -> Vec<GlyphInstance> {
|
||||||
|
let mut instances = Vec::with_capacity(HAND_TIP_MATRICES.len() * rows as usize * cols as usize);
|
||||||
|
|
||||||
|
for tip in HAND_TIP_MATRICES {
|
||||||
|
let cos = tip.angle_rad.cos();
|
||||||
|
let sin = tip.angle_rad.sin();
|
||||||
|
|
||||||
|
for row in 0..rows {
|
||||||
|
for col in 0..cols {
|
||||||
|
let index = (row * cols + col) as usize;
|
||||||
|
let [normalized, display_value] =
|
||||||
|
pressure.get(index).copied().unwrap_or([0.0, 0.0]);
|
||||||
|
|
||||||
|
// Lay out a rows x cols matrix in fingertip-local pixel space.
|
||||||
|
let local_x = (col as f32 - cols as f32 / 2.0 + 0.5) / cols as f32 * tip.size_px[0];
|
||||||
|
let local_y = (row as f32 - rows as f32 / 2.0 + 0.5) / rows as f32 * tip.size_px[1];
|
||||||
|
|
||||||
|
// Rotate the local matrix so it follows the direction of the finger.
|
||||||
|
let x = tip.center_px[0] + local_x * cos - local_y * sin;
|
||||||
|
let y = tip.center_px[1] + local_x * sin + local_y * cos;
|
||||||
|
|
||||||
|
let uv_x = x / image_width.max(1.0);
|
||||||
|
let uv_y = y / image_height.max(1.0);
|
||||||
|
|
||||||
|
instances.push(GlyphInstance {
|
||||||
|
world_position: [uv_x, uv_y, 0.0, 1.0],
|
||||||
|
style: [normalized, display_value, 0.0, 0.0],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
instances
|
||||||
|
}
|
||||||
|
|
||||||
fn build_glyph_instances(
|
fn build_glyph_instances(
|
||||||
rows: u32,
|
rows: u32,
|
||||||
cols: u32,
|
cols: u32,
|
||||||
|
|||||||
@@ -336,7 +336,6 @@ fn fs_glyph(in: GlyphVertexOutput) -> @location(0) vec4f {
|
|||||||
return output_color(color, alpha);
|
return output_color(color, alpha);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// dot
|
// dot
|
||||||
struct DotVertexInput {
|
struct DotVertexInput {
|
||||||
@location(0) local: vec2f,
|
@location(0) local: vec2f,
|
||||||
@@ -358,12 +357,71 @@ fn circle_alpha(local: vec2f, radius: f32, softness: f32) -> f32 {
|
|||||||
return 1.0 - smoothstep(radius, radius + softness, dist);
|
return 1.0 - smoothstep(radius, radius + softness, dist);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Convert a point authored in hand.png UV space into clip space.
|
||||||
|
// This mirrors fs_hand_image's aspect-fit math, so fingertip dots stay attached
|
||||||
|
// to the same image pixels when the app window changes shape.
|
||||||
|
fn hand_image_uv_to_clip(image_uv: vec2f) -> vec2f {
|
||||||
|
let viewport_aspect = u.viewport.x / max(u.viewport.y, 1.0);
|
||||||
|
let image_aspect = u.image.x / max(u.image.y, 1.0);
|
||||||
|
|
||||||
|
var screen_uv = image_uv;
|
||||||
|
|
||||||
|
if (viewport_aspect > image_aspect) {
|
||||||
|
let image_width = image_aspect / viewport_aspect;
|
||||||
|
screen_uv.x = image_uv.x * image_width + (1.0 - image_width) * 0.5;
|
||||||
|
} else {
|
||||||
|
let image_height = viewport_aspect / image_aspect;
|
||||||
|
screen_uv.y = image_uv.y * image_height + (1.0 - image_height) * 0.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
return vec2f(screen_uv.x * 2.0 - 1.0, 1.0 - screen_uv.y * 2.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
@vertex
|
||||||
|
fn vs_hand_dot(vertex: DotVertexInput, instance: DotInstanceInput) -> DotVertexOutput {
|
||||||
|
let intensity = saturate(instance.style.x);
|
||||||
|
|
||||||
|
let shaped = smoothstep(0.0, 1.0, intensity);
|
||||||
|
|
||||||
|
// Hand instances store hand.png UV in world_position.xy instead of 3D world space.
|
||||||
|
let center = hand_image_uv_to_clip(instance.world_position.xy);
|
||||||
|
// Hand fingertip matrices are much smaller than the full Finger view.
|
||||||
|
// Keep each bead below the local cell spacing so the 12x7 matrix remains visibly separated.
|
||||||
|
let pixel_size = u.glyph.x * mix(0.38, 0.56, shaped);
|
||||||
|
let ndc_offset = vertex.local * vec2f(pixel_size / u.viewport.x, pixel_size / u.viewport.y) * 2.0;
|
||||||
|
|
||||||
|
var out: DotVertexOutput;
|
||||||
|
out.clip_position = vec4f(center + ndc_offset, 0.0, 1.0);
|
||||||
|
out.local = vertex.local;
|
||||||
|
out.intensity = intensity;
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
|
@fragment
|
||||||
|
fn fs_hand_dot(in: DotVertexOutput) -> @location(0) vec4f {
|
||||||
|
let intensity = saturate(in.intensity);
|
||||||
|
|
||||||
|
// Use a compact round bead instead of the larger Finger-mode glow marker.
|
||||||
|
let core = circle_alpha(in.local, 0.56, 0.08);
|
||||||
|
let halo = circle_alpha(in.local, 0.78, 0.14) * 0.16;
|
||||||
|
|
||||||
|
// Keep the fingertip matrix visually close to JE-Skin's cyan model dots,
|
||||||
|
// while still letting pressure brighten the bead a little.
|
||||||
|
let cyan = vec3f(0.34, 0.86, 1.0);
|
||||||
|
let hot = sample_range_color(intensity);
|
||||||
|
let color = mix(cyan, hot, 0.22) * mix(0.88, 1.18, intensity);
|
||||||
|
|
||||||
|
return output_color(color, max(core, halo));
|
||||||
|
}
|
||||||
|
|
||||||
@vertex
|
@vertex
|
||||||
fn vs_dot(vertex: DotVertexInput, instance: DotInstanceInput) -> DotVertexOutput {
|
fn vs_dot(vertex: DotVertexInput, instance: DotInstanceInput) -> DotVertexOutput {
|
||||||
let center = u.view_proj * vec4f(instance.world_position.xyz, 1.0);
|
let center = u.view_proj * vec4f(instance.world_position.xyz, 1.0);
|
||||||
let intensity = saturate(instance.style.x);
|
let intensity = saturate(instance.style.x);
|
||||||
let shaped = pow(intensity, 0.9);
|
let shaped = smoothstep(0.0, 1.0, intensity);
|
||||||
let pixel_size = u.glyph.x * mix(0.72, 1.85, shaped);
|
|
||||||
|
let pixel_size = u.glyph.x * mix(1.07, 2.23, shaped);
|
||||||
|
|
||||||
let ndc_offset = vertex.local * vec2f(pixel_size / u.viewport.x, pixel_size / u.viewport.y) * 2.0;
|
let ndc_offset = vertex.local * vec2f(pixel_size / u.viewport.x, pixel_size / u.viewport.y) * 2.0;
|
||||||
var out: DotVertexOutput;
|
var out: DotVertexOutput;
|
||||||
out.clip_position = vec4f(center.xy + ndc_offset * center.w, center.z, center.w);
|
out.clip_position = vec4f(center.xy + ndc_offset * center.w, center.z, center.w);
|
||||||
@@ -379,7 +437,7 @@ fn fs_dot(in: DotVertexOutput) -> @location(0) vec4f {
|
|||||||
|
|
||||||
let core = circle_alpha(in.local, 0.42, 0.055);
|
let core = circle_alpha(in.local, 0.42, 0.055);
|
||||||
|
|
||||||
let glow = circle_alpha(in.local, 0.78, 0.18) * intensity * 0.45;
|
let glow = circle_alpha(in.local, 0.92, 0.20) * intensity * 0.32;
|
||||||
|
|
||||||
let highlight_pos = in.local - vec2f(-0.18, 0.20);
|
let highlight_pos = in.local - vec2f(-0.18, 0.20);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user