Abstractions to construct shader objects for any WebGL/OpenGL/EGS/Vulkan context! You construct the objects, and then render them in any backend.
using ShaderAbstractions, LinearAlgebra using ShaderAbstractions: VertexArray using Test, GeometryBasics import GeometryBasics struct WebGL <: ShaderAbstractions.AbstractContext end m = GLNormalMesh(Sphere(Point3f(0), 1f0)) mvao = VertexArray(m) instances = VertexArray(positions = rand(GeometryBasics.Point{3, Float32}, 100)) x = ShaderAbstractions.InstancedProgram( WebGL(), "void main(){}\n", "void main(){}\n", mvao, instances, Dict( :model => Mat4f(I), :view => Mat4f(I), :projection => Mat4f(I), ) )