From 85aa3c48b70af2b0d67e9bab6b59597badbb8aca Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Sat, 28 Sep 2019 12:16:30 +0100 Subject: [PATCH] Upgrade tinygo and retire tinygo-canvas tinygo-canvas has outlive its purpose now that tinygo has improved enough to run the original version. --- Makefile | 12 +-- README.md | 8 +- tinygo-canvas/LICENSE | 201 --------------------------------------- tinygo-canvas/index.html | 125 ------------------------ tinygo-canvas/main.go | 197 -------------------------------------- 5 files changed, 9 insertions(+), 534 deletions(-) delete mode 100644 tinygo-canvas/LICENSE delete mode 100644 tinygo-canvas/index.html delete mode 100644 tinygo-canvas/main.go diff --git a/Makefile b/Makefile index c6089b2..14d5a44 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,7 @@ hello: clean .PHONY: tinygo tinygo: clean - docker run --rm -v $$(pwd):/go/src/github.com/johanbrandhorst/wasm-experiments tinygo/tinygo:0.6.1 /bin/bash -c "\ + docker run --rm -v $$(pwd):/go/src/github.com/johanbrandhorst/wasm-experiments tinygo/tinygo:0.8.0 /bin/bash -c "\ cd /go/src/github.com/johanbrandhorst/wasm-experiments && \ tinygo build -o ./html/test.wasm -target wasm --no-debug ./$(target)/main.go && \ cp /usr/local/tinygo/targets/wasm_exec.js ./html/wasm_exec.js\ @@ -42,13 +42,13 @@ canvas: clean cp $$(go env GOROOT)/misc/wasm/wasm_exec.js ./html/wasm_exec.js tinygo-canvas: clean - docker run --rm -v $$(pwd):/go/src/github.com/johanbrandhorst/wasm-experiments tinygo/tinygo:0.7.0 /bin/bash -c "\ + docker run --rm -v $$(pwd):/go/src/github.com/johanbrandhorst/wasm-experiments tinygo/tinygo:0.8.0 /bin/bash -c "\ cd /go/src/github.com/johanbrandhorst/wasm-experiments && \ - tinygo build -o ./html/test.wasm -target wasm --no-debug ./tinygo-canvas/main.go && \ - cp /go/src/github.com/tinygo-org/tinygo/targets/wasm_exec.js ./html/wasm_exec.js\ + tinygo build -o ./html/test.wasm -target wasm --no-debug ./canvas/main.go && \ + cp /usr/local/tinygo/targets/wasm_exec.js ./html/wasm_exec.js\ " - cp ./tinygo-canvas/index.html ./html/index.html - cp ./tinygo-canvas/main.go ./html/main.go + cp ./canvas/index.html ./html/index.html + cp ./canvas/main.go ./html/main.go .PHONY: ebiten ebiten: clean diff --git a/README.md b/README.md index 4f48a3e..3ac5f9f 100644 --- a/README.md +++ b/README.md @@ -46,7 +46,7 @@ serve as usual. For example: ```bash $ make tinygo target=hello -docker run --rm -v $$(pwd):/go/src/github.com/johanbrandhorst/wasm-experiments tinygo/tinygo:0.6.1 /bin/bash -c "\ +docker run --rm -v $$(pwd):/go/src/github.com/johanbrandhorst/wasm-experiments tinygo/tinygo:0.8.0 /bin/bash -c "\ cd /go/src/github.com/johanbrandhorst/wasm-experiments && \ tinygo build -o ./html/test.wasm -target wasm --no-debug ./hello/main.go && \ cp /usr/local/tinygo/targets/wasm_exec.js ./html/wasm_exec.js\ @@ -88,13 +88,11 @@ send a HTTP request, parse the result and write it to the DOM. ### Canvas An updated version of the [repulsion](https://stdiopt.github.io/gowasm-experiments/repulsion) -demo by [Luis Figuerido](https://github.com/stdiopt) usin Go 1.12. +demo by [Luis Figuerido](https://github.com/stdiopt). ### TinyGo-Canvas -Same as above but slightly adapted for TinyGo but avoiding the use of JS callbacks -in Go code. Requires an experimental version of TinyGo to build. Based on work -by [Justin Clift](https://github.com/justinclift). +Same as above but built with TinyGo. ### Ebiten diff --git a/tinygo-canvas/LICENSE b/tinygo-canvas/LICENSE deleted file mode 100644 index 261eeb9..0000000 --- a/tinygo-canvas/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/tinygo-canvas/index.html b/tinygo-canvas/index.html deleted file mode 100644 index a9a26a5..0000000 --- a/tinygo-canvas/index.html +++ /dev/null @@ -1,125 +0,0 @@ - - - - go webassembly - repulsion - - - - - - - - - -
-
-
- -
-
0
-
- - 160 -
-
- 100 -
-
- - - diff --git a/tinygo-canvas/main.go b/tinygo-canvas/main.go deleted file mode 100644 index 8f2911f..0000000 --- a/tinygo-canvas/main.go +++ /dev/null @@ -1,197 +0,0 @@ -// +build js,wasm - -package main - -import ( - "math" - "math/rand" - "strconv" - "syscall/js" -) - -var ( - width float64 - height float64 - mousePos [2]float64 - ctx, doc js.Value - canvasEl js.Value - dt DotThing - - tmark float64 - markCount = 0 - tdiffSum float64 -) - -func main() { - // Init Canvas stuff - doc = js.Global().Get("document") - canvasEl = doc.Call("getElementById", "mycanvas") - width = doc.Get("body").Get("clientWidth").Float() - height = doc.Get("body").Get("clientHeight").Float() - canvasEl.Call("setAttribute", "width", width) - canvasEl.Call("setAttribute", "height", height) - ctx = canvasEl.Call("getContext", "2d") - - // Set up dot thing - dt = DotThing{speed: 160} - dt.SetNDots(100) - dt.lines = false - - js.Global().Call("requestAnimationFrame", js.Global().Get("renderFrame")) -} - -// * Handlers for JS callback functions * - -//go:export speedInput -func speedInput(fval float64) { - dt.speed = fval -} - -//go:export countChange -func countChange(intVal int) { - dt.SetNDots(intVal) -} - -//go:export moveHandler -func moveHandler(cx int, cy int) { - mousePos[0] = float64(cx) - mousePos[1] = float64(cy) -} - -//go:export renderFrame -func renderFrame(now float64) { - tdiff := now - tmark - tdiffSum += now - tmark - markCount++ - if markCount > 10 { - doc.Call("getElementById", "fps").Set("innerHTML", "FPS: "+strconv.FormatFloat(1000/(tdiffSum/float64(markCount)), 'f', 1, 64)) - tdiffSum, markCount = 0, 0 - } - tmark = now - - // Pool window size to handle resize - curBodyW := doc.Get("body").Get("clientWidth").Float() - curBodyH := doc.Get("body").Get("clientHeight").Float() - if curBodyW != width || curBodyH != height { - width, height = curBodyW, curBodyH - canvasEl.Set("width", width) - canvasEl.Set("height", height) - } - dt.Update(tdiff / 1000) - js.Global().Call("requestAnimationFrame", js.Global().Get("renderFrame")) -} - -// DotThing manager -type DotThing struct { - dots []*Dot - lines bool - speed float64 -} - -// Update updates the dot positions and draws -func (dt *DotThing) Update(dtTime float64) { - if dt.dots == nil { - return - } - ctx.Call("clearRect", 0, 0, width, height) - - // Update - for i, dot := range dt.dots { - if dot.pos[0] < dot.size { - dot.pos[0] = dot.size - dot.dir[0] *= -1 - } - if dot.pos[0] > width-dot.size { - dot.pos[0] = width - dot.size - dot.dir[0] *= -1 - } - - if dot.pos[1] < dot.size { - dot.pos[1] = dot.size - dot.dir[1] *= -1 - } - - if dot.pos[1] > height-dot.size { - dot.pos[1] = height - dot.size - dot.dir[1] *= -1 - } - - mdx := mousePos[0] - dot.pos[0] - mdy := mousePos[1] - dot.pos[1] - d := math.Sqrt(mdx*mdx + mdy*mdy) - if d < 200 { - dInv := 1 - d/200 - dot.dir[0] += (-mdx / d) * dInv * 8 - dot.dir[1] += (-mdy / d) * dInv * 8 - } - for j, dot2 := range dt.dots { - if i == j { - continue - } - mx := dot2.pos[0] - dot.pos[0] - my := dot2.pos[1] - dot.pos[1] - d := math.Sqrt(mx*mx + my*my) - if d < 100 { - dInv := 1 - d/100 - dot.dir[0] += (-mx / d) * dInv - dot.dir[1] += (-my / d) * dInv - } - } - dot.dir[0] *= 0.1 //friction - dot.dir[1] *= 0.1 //friction - - dot.pos[0] += dot.dir[0] * dt.speed * dtTime * 10 - dot.pos[1] += dot.dir[1] * dt.speed * dtTime * 10 - - ctx.Set("globalAlpha", 0.5) - ctx.Call("beginPath") - hexCol := hexFormat(dot.color) - ctx.Set("fillStyle", hexCol) - ctx.Set("strokeStyle", hexCol) - ctx.Set("lineWidth", dot.size) - ctx.Call("arc", dot.pos[0], dot.pos[1], dot.size, 0, 2*math.Pi) - ctx.Call("fill") - } -} - -// SetNDots reinitializes dots with n size -func (dt *DotThing) SetNDots(n int) { - dt.dots = make([]*Dot, n) - for i := 0; i < n; i++ { - dt.dots[i] = &Dot{ - pos: [2]float64{ - rand.Float64() * width, - rand.Float64() * height, - }, - dir: [2]float64{ - rand.NormFloat64(), - rand.NormFloat64(), - }, - color: uint32(rand.Intn(0xFFFFFF)), - size: 10, - } - } -} - -// Adapted from the Go source: https://github.com/golang/go/blob/4ce6a8e89668b87dce67e2f55802903d6eb9110a/src/fmt/format.go#L248-L252 -func hexFormat(u uint32) string { - digits := "0123456789abcdefx" - buf := make([]uint8, 6) - i := len(buf) - for u >= 16 { - i-- - buf[i] = digits[u&0xF] - u >>= 4 - } - i-- - buf[i] = digits[u] - return "#" + string(buf) -} - -// Dot represents a dot ... -type Dot struct { - pos [2]float64 - dir [2]float64 - color uint32 - size float64 -}