{"id":16894177,"url":"https://github.com/jsuereth/shady-side","last_synced_at":"2025-10-13T10:37:20.271Z","repository":{"id":66607436,"uuid":"196061652","full_name":"jsuereth/shady-side","owner":"jsuereth","description":"Prototype Scala -\u003e GLSL translation, including scaffolding to run + test","archived":false,"fork":false,"pushed_at":"2020-05-14T22:44:46.000Z","size":1459,"stargazers_count":21,"open_issues_count":0,"forks_count":3,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-04-11T13:53:11.879Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Scala","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jsuereth.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.md","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-07-09T18:25:14.000Z","updated_at":"2022-05-03T04:49:45.000Z","dependencies_parsed_at":"2023-03-22T20:15:41.088Z","dependency_job_id":null,"html_url":"https://github.com/jsuereth/shady-side","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/jsuereth/shady-side","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jsuereth%2Fshady-side","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jsuereth%2Fshady-side/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jsuereth%2Fshady-side/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jsuereth%2Fshady-side/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jsuereth","download_url":"https://codeload.github.com/jsuereth/shady-side/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jsuereth%2Fshady-side/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279014651,"owners_count":26085555,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-13T02:00:06.723Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-13T17:17:54.325Z","updated_at":"2025-10-13T10:37:20.266Z","avatar_url":"https://github.com/jsuereth.png","language":"Scala","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ShadySide - OpenGL hackery in Scala 3.0\n\nThis project aims to run Scala 3.0 through the ringer via producing \nan OpenGL DSL on top of LWJGL.  The API should allow the following:\n\n- GLSL shaders defined fully within Scala, staged and commpiled on GPU.\n- \"Fast\" vector/matrix library for canonical graphics/gpu applications to\n  pair w/ the GLSL shader API.\n- Easy support for stack-allocation hook of LWJGL\n- No attempt, at ALL, to be a \"game engine\".\n- Modest attempt at a linear algebra library, to be hacked on\n  when it seems fun.\n\nThis is a direct re-write of a personal project from 2013 where I was first learning OpenGL in Scala.  As such, it retains many mistakes\nand poor assumptions.  \n\nThis project is split into several components:\n\n## Linear Algebra\nA linear algebra library that provides missing types required in OpenGL shader language, specifically:\n\n* UInt\n* Vec2[T]\n* Vec3[T]\n* Vec4[T]\n* Matrix3x3[T]\n* Matrix4x4[T]\n\nIn addition to baseline types, this library also provides some abstractions around types to be usable for numbers, specfically:\n\n* Trigonometry[T]\n* Rootable[T]\n\nAn other types useful in implementing scene graphs/engines.\n\n## OpenGL I/O\nA library that helps get data into/out of graphics memory.  This consists of a few core pieces:\n\n* BufferLoadable[T] - load data into java.nio.ByteBuffers\n* VertexArrayObject[T] - load POD-type case classes into VAO.  Can load raw vertices, or vertex+index arrays.\n\n## OpenGL Shader DSL\nA library that allows specifying OpenGL shaders completely in scala.  Relies on Linear Algebra types, and the I/O library for sending\ndata into/out of graphics memory.\n\n## Scene Graph\nA library to help simplify setting up a Scene in OpenGL and rendering it.   This is used for the example application.\n\n# TODOs\n\nHere's a set of TODOs for this project.  These are just the ones we find interesting enough to list out.  There are probably more, if there's one you're interested in working on, list it out and work on it.\n\n## Linear Algebra library\n- [ ] Add Matrix2x2\n- [ ] Add (optimal) Matrix multiplication\n- [ ] Create fuzzy equals method (floating point friendly)\n- [ ] Optimise matrix inverses\n- [ ] Create a legitimate set of tests\n- [ ] Derive \"Show\" typeclass for pretty-printing\n- [ ] Matrix +/- operations.\n\n## OpenGL I/O library\n- [ ] Encode Textures and \"opaque\" types\n- [ ] Write tests for buffer loading\n\n## Shader DSL\n- [ ] use compiler error messages instead of exceptions.\n- [ ] support helper/nested methods\n- [ ] support opaque type: Sampler2D\n- [ ] support unsigned ints\n- [ ] Add check for outside references that are not uniforms\n- [ ] Figure out a way to enforce vertex input in GLSL aligns with vertex buffer input from CPU.\n\n## Scene Graph\n- [ ] Material support\n- [ ] non-static scenes?\n\n## Example\n- [ ] load/use a texture\n- [ ] add a post-process shader (anti-aliasing?)\n\n## Bugs to be reported to Dotty\n\n- [ ] Investigate using float literals and open types leading to stack-overflow\n- [ ] Investigate having open-type + constrained type in overloaded method causing\n  issues in type inference/method discovery\n- [ ] Investigate anonymous delegate for multiple fully qualified type constructor\n  having name collisions.\n- [ ] Report inconsistency of companion-object vs. free-floating delegates/givens.  \n\n# Assets\n\nMesh assets are graciously provided from NASA, with others.  \nSee [https://github.com/nasa/NASA-3D-Resources](https://github.com/nasa/NASA-3D-Resources) for more options.\n\n# Community Guidelines\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) and [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md)\n\n# License\n\nCopyright 2019 Google LLC\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\nSee LICENSE.md for more info.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjsuereth%2Fshady-side","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjsuereth%2Fshady-side","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjsuereth%2Fshady-side/lists"}