From 7dce9eb84247328519697a422f83d60a7a910dfa Mon Sep 17 00:00:00 2001 From: Matei Adriel Date: Thu, 17 Jan 2019 13:32:31 +0200 Subject: [PATCH 1/3] typescript(fourjs): Initial commit Signed-off-by: prescientmoon --- typescript/fourjs/.gitignore | 61 +++++++++++ typescript/fourjs/LICENSE | 201 +++++++++++++++++++++++++++++++++++ typescript/fourjs/README.md | 1 + 3 files changed, 263 insertions(+) create mode 100644 typescript/fourjs/.gitignore create mode 100644 typescript/fourjs/LICENSE create mode 100644 typescript/fourjs/README.md diff --git a/typescript/fourjs/.gitignore b/typescript/fourjs/.gitignore new file mode 100644 index 0000000..ad46b30 --- /dev/null +++ b/typescript/fourjs/.gitignore @@ -0,0 +1,61 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# TypeScript v1 declaration files +typings/ + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env + +# next.js build output +.next diff --git a/typescript/fourjs/LICENSE b/typescript/fourjs/LICENSE new file mode 100644 index 0000000..261eeb9 --- /dev/null +++ b/typescript/fourjs/LICENSE @@ -0,0 +1,201 @@ + 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/typescript/fourjs/README.md b/typescript/fourjs/README.md new file mode 100644 index 0000000..eec941a --- /dev/null +++ b/typescript/fourjs/README.md @@ -0,0 +1 @@ +# Four.js \ No newline at end of file From c19818b95bec4c7f89cc56d25fe6d6781bd1b62f Mon Sep 17 00:00:00 2001 From: Matei Adriel Date: Thu, 17 Jan 2019 15:53:12 +0200 Subject: [PATCH 2/3] typescript(fourjs): first commit Signed-off-by: prescientmoon --- typescript/fourjs/app.js | 19 ++ typescript/fourjs/app.ts | 21 ++ typescript/fourjs/package-lock.json | 424 ++++++++++++++++++++++++ typescript/fourjs/package.json | 16 + typescript/fourjs/public/index.html | 19 ++ typescript/fourjs/public/js/gl.mjs | 47 +++ typescript/fourjs/public/js/main.mjs | 44 +++ typescript/fourjs/public/js/shader.mjs | 62 ++++ typescript/fourjs/server/four/sender.js | 18 + typescript/fourjs/server/four/sender.ts | 14 + typescript/fourjs/server/read.js | 13 + typescript/fourjs/server/read.ts | 12 + typescript/fourjs/shaders/fragment.glsl | 9 + typescript/fourjs/shaders/vertex.glsl | 9 + typescript/fourjs/tsconfig.json | 9 + 15 files changed, 736 insertions(+) create mode 100644 typescript/fourjs/app.js create mode 100644 typescript/fourjs/app.ts create mode 100644 typescript/fourjs/package-lock.json create mode 100644 typescript/fourjs/package.json create mode 100644 typescript/fourjs/public/index.html create mode 100644 typescript/fourjs/public/js/gl.mjs create mode 100644 typescript/fourjs/public/js/main.mjs create mode 100644 typescript/fourjs/public/js/shader.mjs create mode 100644 typescript/fourjs/server/four/sender.js create mode 100644 typescript/fourjs/server/four/sender.ts create mode 100644 typescript/fourjs/server/read.js create mode 100644 typescript/fourjs/server/read.ts create mode 100644 typescript/fourjs/shaders/fragment.glsl create mode 100644 typescript/fourjs/shaders/vertex.glsl create mode 100644 typescript/fourjs/tsconfig.json diff --git a/typescript/fourjs/app.js b/typescript/fourjs/app.js new file mode 100644 index 0000000..173c876 --- /dev/null +++ b/typescript/fourjs/app.js @@ -0,0 +1,19 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const express = require("express"); +const app = express(); +const http = require("http").Server(app); +app.get("/", (req, res) => { + res.sendFile(`${__dirname}/public/index.html`); +}); +app.use("/public", express.static(__dirname + "/public")); +const port = 8000; +http.listen(port, () => { + console.log(`>>Listeing on port ${port}`); +}); +const sender_1 = require("./server/four/sender"); +const sender = new sender_1.ShaderSender(app, __dirname); +sender.listen({ + vertex: "shaders/vertex.glsl", + fragment: "shaders/fragment.glsl" +}); diff --git a/typescript/fourjs/app.ts b/typescript/fourjs/app.ts new file mode 100644 index 0000000..adfdb53 --- /dev/null +++ b/typescript/fourjs/app.ts @@ -0,0 +1,21 @@ +const express = require("express"); +const app = express(); +const http = require("http").Server(app); + +app.get("/",(req,res) => { + res.sendFile(`${__dirname}/public/index.html`); +}); +app.use("/public",express.static(__dirname + "/public")); + +const port = 8000; + +http.listen(port, () => { + console.log(`>>Listeing on port ${port}`); +}); +import {ShaderSender} from "./server/four/sender"; + +const sender = new ShaderSender(app,__dirname); +sender.listen({ + vertex:"shaders/vertex.glsl", + fragment:"shaders/fragment.glsl" +}); diff --git a/typescript/fourjs/package-lock.json b/typescript/fourjs/package-lock.json new file mode 100644 index 0000000..c2884b7 --- /dev/null +++ b/typescript/fourjs/package-lock.json @@ -0,0 +1,424 @@ +{ + "name": "four", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@types/body-parser": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.17.0.tgz", + "integrity": "sha512-a2+YeUjPkztKJu5aIF2yArYFQQp8d51wZ7DavSHjFuY1mqVgidGyzEQ41JIVNy82fXj8yPgy2vJmfIywgESW6w==", + "requires": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "@types/connect": { + "version": "3.4.32", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.32.tgz", + "integrity": "sha512-4r8qa0quOvh7lGD0pre62CAb1oni1OO6ecJLGCezTmhQ8Fz50Arx9RUszryR8KlgK6avuSXvviL6yWyViQABOg==", + "requires": { + "@types/node": "*" + } + }, + "@types/events": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@types/events/-/events-1.2.0.tgz", + "integrity": "sha512-KEIlhXnIutzKwRbQkGWb/I4HFqBuUykAdHgDED6xqwXJfONCjF5VoE0cXEiurh3XauygxzeDzgtXUqvLkxFzzA==" + }, + "@types/express": { + "version": "4.16.0", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.16.0.tgz", + "integrity": "sha512-TtPEYumsmSTtTetAPXlJVf3kEqb6wZK0bZojpJQrnD/djV4q1oB6QQ8aKvKqwNPACoe02GNiy5zDzcYivR5Z2w==", + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "*", + "@types/serve-static": "*" + } + }, + "@types/express-serve-static-core": { + "version": "4.16.0", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.16.0.tgz", + "integrity": "sha512-lTeoCu5NxJU4OD9moCgm0ESZzweAx0YqsAcab6OB0EB3+As1OaHtKnaGJvcngQxYsi9UNv0abn4/DRavrRxt4w==", + "requires": { + "@types/events": "*", + "@types/node": "*", + "@types/range-parser": "*" + } + }, + "@types/mime": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.0.tgz", + "integrity": "sha512-A2TAGbTFdBw9azHbpVd+/FkdW2T6msN1uct1O9bH3vTerEHKZhTXJUQXy+hNq1B0RagfU8U+KBdqiZpxjhOUQA==" + }, + "@types/node": { + "version": "10.12.18", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.18.tgz", + "integrity": "sha512-fh+pAqt4xRzPfqA6eh3Z2y6fyZavRIumvjhaCL753+TVkGKGhpPeyrJG2JftD0T9q4GF00KjefsQ+PQNDdWQaQ==" + }, + "@types/range-parser": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz", + "integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==" + }, + "@types/serve-static": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha512-/BZ4QRLpH/bNYgZgwhKEh+5AsboDBcUdlBYgzoLX0fpj3Y2gp6EApyOlM3bK53wQS/OE1SrdSYBAbux2D1528Q==", + "requires": { + "@types/express-serve-static-core": "*", + "@types/mime": "*" + } + }, + "accepts": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", + "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", + "requires": { + "mime-types": "~2.1.18", + "negotiator": "0.6.1" + } + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "body-parser": { + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", + "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", + "requires": { + "bytes": "3.0.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "~1.6.3", + "iconv-lite": "0.4.23", + "on-finished": "~2.3.0", + "qs": "6.5.2", + "raw-body": "2.3.3", + "type-is": "~1.6.16" + } + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + }, + "content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "express": { + "version": "4.16.4", + "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", + "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", + "requires": { + "accepts": "~1.3.5", + "array-flatten": "1.1.1", + "body-parser": "1.18.3", + "content-disposition": "0.5.2", + "content-type": "~1.0.4", + "cookie": "0.3.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.1.1", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.4", + "qs": "6.5.2", + "range-parser": "~1.2.0", + "safe-buffer": "5.1.2", + "send": "0.16.2", + "serve-static": "1.13.2", + "setprototypeof": "1.1.0", + "statuses": "~1.4.0", + "type-is": "~1.6.16", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + } + }, + "finalhandler": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", + "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.4.0", + "unpipe": "~1.0.0" + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "iconv-lite": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ipaddr.js": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", + "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=" + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" + }, + "mime-db": { + "version": "1.37.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", + "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==" + }, + "mime-types": { + "version": "2.1.21", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", + "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", + "requires": { + "mime-db": "~1.37.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "negotiator": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "parseurl": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", + "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "proxy-addr": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", + "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", + "requires": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.8.0" + } + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + }, + "range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" + }, + "raw-body": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", + "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", + "requires": { + "bytes": "3.0.0", + "http-errors": "1.6.3", + "iconv-lite": "0.4.23", + "unpipe": "1.0.0" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "send": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.6.2", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "~2.3.0", + "range-parser": "~1.2.0", + "statuses": "~1.4.0" + } + }, + "serve-static": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.2", + "send": "0.16.2" + } + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + }, + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" + }, + "type-is": { + "version": "1.6.16", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", + "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.18" + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + } + } +} diff --git a/typescript/fourjs/package.json b/typescript/fourjs/package.json new file mode 100644 index 0000000..9bdbf5f --- /dev/null +++ b/typescript/fourjs/package.json @@ -0,0 +1,16 @@ +{ + "name": "four", + "version": "1.0.0", + "description": "", + "main": "app.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "Matei Adriel", + "license": "ISC", + "dependencies": { + "@types/express": "^4.16.0", + "express": "^4.16.4", + "typescript": "^3.2.2" + } +} diff --git a/typescript/fourjs/public/index.html b/typescript/fourjs/public/index.html new file mode 100644 index 0000000..38a4b8a --- /dev/null +++ b/typescript/fourjs/public/index.html @@ -0,0 +1,19 @@ + + + + + + + Four + + + + + + + + + diff --git a/typescript/fourjs/public/js/gl.mjs b/typescript/fourjs/public/js/gl.mjs new file mode 100644 index 0000000..cea8b7f --- /dev/null +++ b/typescript/fourjs/public/js/gl.mjs @@ -0,0 +1,47 @@ +class GL{ + constructor(){ + this.id = GL.id++; + this.color = "#0000ff"; + + this.objects = []; + } + createObject(){ + const obj = new Object(arguments); + + this.objects.push(obj); + } + init(){ + const canvas = ``; + $("body").append(canvas); + + this.canvas = $(`#${this.id}`)[0]; + this.ctx = this.canvas.getContext("webgl2"); + + console.log(this.canvas); + + if (!this.ctx){ console.error("WebGL context is not available."); return null; } + + return this; + } + updateColor(){ + this.ctx.clearColor(this.color); + + return this; + } + setColor(color){ + this.color = color; + this.ctx.updateColor(); + + return this; + } + clear(){ + this.ctx.clear( + this.ctx.COLOR_BUFFER_BIT | + this.ctx.DEPTH_BUFFER_BIT + ); + return this; + } +} +GL.id = 0; + +export {GL}; diff --git a/typescript/fourjs/public/js/main.mjs b/typescript/fourjs/public/js/main.mjs new file mode 100644 index 0000000..050331b --- /dev/null +++ b/typescript/fourjs/public/js/main.mjs @@ -0,0 +1,44 @@ +import {GL} from "./gl.mjs"; +import {ShaderCompiler} from "./shader.mjs" + +const renderer = new GL(); +renderer.init(); + +const compiler = new ShaderCompiler(renderer); +compiler.getShader("http://localhost:8000/fragment") +compiler.getShader("http://localhost:8000/vertex") +// +// const vShaderTxt = ShaderUtil.load("vertex_shader"), +// fShaderTxt = ShaderUtil.domShaderSrc("fragment_shader"), +// // 2. Compile text and validate +// vShader = ShaderUtil.createShader(gl,vShaderTxt,gl.VERTEX_SHADER), +// fShader = ShaderUtil.createShader(gl,fShaderTxt,gl.FRAGMENT_SHADER), +// // 3. Link the shaders together as a program. +// shaderProg = ShaderUtil.createProgram(gl,vShader,fShader,true); +// +// +// +// // 4. Get Location of Uniforms and Attributes. +// gl.useProgram(shaderProg); +// var aPositionLoc = gl.getAttribLocation(shaderProg,"a_position"), +// uPointSizeLoc = gl.getUniformLocation(shaderProg,"uPointSize"); +// gl.useProgram(null); +// //............................................ +// //Set Up Data Buffers +// var aryVerts = new Float32Array([0,0,0, 0.5,0.5,0 ]), +// bufVerts = gl.createBuffer(); +// gl.bindBuffer(gl.ARRAY_BUFFER,bufVerts); +// gl.bufferData(gl.ARRAY_BUFFER, aryVerts, gl.STATIC_DRAW); +// gl.bindBuffer(gl.ARRAY_BUFFER,null); +// //............................................ +// //Set Up For Drawing +// gl.useProgram(shaderProg); //Activate the Shader +// gl.uniform1f(uPointSizeLoc,50.0); //Store data to the shader's uniform variable uPointSize +// //how its down without VAOs +// gl.bindBuffer(gl.ARRAY_BUFFER,bufVerts); //Tell gl which buffer we want to use at the moment +// gl.enableVertexAttribArray(aPositionLoc); //Enable the position attribute in the shader +// gl.vertexAttribPointer(aPositionLoc,3,gl.FLOAT,false,0,0); //Set which buffer the attribute will pull its data from +// gl.bindBuffer(gl.ARRAY_BUFFER,null); //Done setting up the buffer +// +// this.gl.drawArrays(gl.POINTS, 0, 2); //Draw the points +// }); diff --git a/typescript/fourjs/public/js/shader.mjs b/typescript/fourjs/public/js/shader.mjs new file mode 100644 index 0000000..1ab7db5 --- /dev/null +++ b/typescript/fourjs/public/js/shader.mjs @@ -0,0 +1,62 @@ +class ShaderCompiler{ + constructor(gl){ + this.ctx = gl.ctx; + } + createShader(gl,src,type){ + const shader = this.ctx.createShader(type); + + this.ctx.shaderSource(shader,src); + this.ctx.compileShader(shader); + + //Get Error data if shader failed compiling + if(!this.ctx.getShaderParameter(shader, this.ctx.COMPILE_STATUS)){ + console.error(`Error compiling shader: ${src}. Log: ${gl.getShaderInfoLog(shader)}`); + this.ctx.deleteShader(shader); + return null; + } + + return shader; + } + + createProgram(gl,vShader,fShader,doValidate){ + //Link shaders together + const prog = gl.ctx.createProgram(); + + this.ctx.attachShader(prog,vShader); + this.ctx.attachShader(prog,fShader); + this.ctx.linkProgram(prog); + + //Check if successful + if(!this.ctx.getProgramParameter(prog, gl.LINK_STATUS)){ + console.error(`Error creating shader program. Log: ${gl.getProgramInfoLog(prog)}`); + this.ctx.deleteProgram(prog); + return null; + } + + //Only do this for additional debugging. + if(doValidate){ + this.ctx.validateProgram(prog); + if(!this.ctx.getProgramParameter(prog,gl.VALIDATE_STATUS)){ + console.error(`Error validating shader program. Log: ${gl.getProgramInfoLog(prog)}`); + this.ctx.deleteProgram(prog); + return null; + } + } + + //Can delete the shaders since the program has been made. + this.ctx.detachShader(prog,vShader); //TODO, detaching might cause issues on some browsers, Might only need to delete. + this.ctx.detachShader(prog,fShader); + this.ctx.deleteShader(fShader); + this.ctx.deleteShader(vShader); + + return prog; + } + async getShader(url){ + const response = await fetch(url); + const obj = await response.json(); + const text = obj.text; + console.log(text); + } +} + +export {ShaderCompiler}; diff --git a/typescript/fourjs/server/four/sender.js b/typescript/fourjs/server/four/sender.js new file mode 100644 index 0000000..bc8c4a5 --- /dev/null +++ b/typescript/fourjs/server/four/sender.js @@ -0,0 +1,18 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const read_1 = require("../read"); +class ShaderSender { + constructor(app, dir) { + this.app = app; + this.dir = dir; + } + async listen(data) { + for (let i in data) { + const text = await read_1.read(`./${data[i]}`); + this.app.get(`/${i}`, (req, res) => { + res.json({ text }); + }); + } + } +} +exports.ShaderSender = ShaderSender; diff --git a/typescript/fourjs/server/four/sender.ts b/typescript/fourjs/server/four/sender.ts new file mode 100644 index 0000000..6d322cd --- /dev/null +++ b/typescript/fourjs/server/four/sender.ts @@ -0,0 +1,14 @@ +import {read} from "../read" +class ShaderSender{ + constructor(public app,public dir:String){} + async listen(data:any){ + for (let i in data){ + const text = await read(`./${data[i]}`); + this.app.get(`/${i}`,(req,res) => { + res.json({text}); + }); + } + } +} + +export {ShaderSender}; diff --git a/typescript/fourjs/server/read.js b/typescript/fourjs/server/read.js new file mode 100644 index 0000000..303dc15 --- /dev/null +++ b/typescript/fourjs/server/read.js @@ -0,0 +1,13 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const fs = require('fs'); +function read(url) { + return new Promise((resolve, reject) => { + fs.readFile(`./${url}`, "utf8", (err, data) => { + if (err) + reject(err); + resolve(data); + }); + }); +} +exports.read = read; diff --git a/typescript/fourjs/server/read.ts b/typescript/fourjs/server/read.ts new file mode 100644 index 0000000..5abc4b9 --- /dev/null +++ b/typescript/fourjs/server/read.ts @@ -0,0 +1,12 @@ +const fs = require('fs'); + +function read(url:string):Promise{ + return new Promise((resolve,reject) => { + fs.readFile(`./${url}`,"utf8",(err,data) => { + if (err) reject(err); + resolve(data); + }); + }); +} + +export {read}; diff --git a/typescript/fourjs/shaders/fragment.glsl b/typescript/fourjs/shaders/fragment.glsl new file mode 100644 index 0000000..c8602c2 --- /dev/null +++ b/typescript/fourjs/shaders/fragment.glsl @@ -0,0 +1,9 @@ +#version 300 es + +precision mediump float; + +out vec4 finalColor; + +void main(void) { + finalColor = vec4(0.0, 0.0, 0.0, 1.0); +} diff --git a/typescript/fourjs/shaders/vertex.glsl b/typescript/fourjs/shaders/vertex.glsl new file mode 100644 index 0000000..5e7add1 --- /dev/null +++ b/typescript/fourjs/shaders/vertex.glsl @@ -0,0 +1,9 @@ +#version 300 es + +in vec3 a_position; + +uniform float uPointSize; +void main(void){ + gl_PointSize = uPointSize; + gl_Position = vec4(a_position, 1.0); +} diff --git a/typescript/fourjs/tsconfig.json b/typescript/fourjs/tsconfig.json new file mode 100644 index 0000000..4a38e41 --- /dev/null +++ b/typescript/fourjs/tsconfig.json @@ -0,0 +1,9 @@ +{ + "compilerOptions":{ + "target":"esnext", + "watch":true, + "lib":["es2017"], + "module": "commonjs" + }, + "exclude": ["node_modules", "**/__tests__/*"] +} From 111e03239dc8ac2d2a86a8c2af0f6bf4f163a945 Mon Sep 17 00:00:00 2001 From: prescientmoon Date: Tue, 28 May 2024 01:55:26 +0200 Subject: [PATCH 3/3] typescript(fourjs): Added movement notice to readme [skip-ci] Signed-off-by: prescientmoon --- typescript/fourjs/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/typescript/fourjs/README.md b/typescript/fourjs/README.md index eec941a..168c26c 100644 --- a/typescript/fourjs/README.md +++ b/typescript/fourjs/README.md @@ -1 +1,2 @@ +# 🚧 This repo has been moved to [prescientmoon/Four.js](https://github.com/prescientmoon/Four.js) 🚧 # Four.js \ No newline at end of file