Created
December 3, 2018 17:58
-
-
Save skrat/90da7738d335dfe48973b8f80dce5a00 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(ns skrat.sketch-002.filament) | |
(def ^:dynamic *engine* nil) | |
(defn mat4 | |
"Create new mat4" | |
[] | |
(. js/mat4 (create))) | |
(def VertexAttribute | |
js/Filament.VertexAttribute) | |
(def vPOSITION | |
(.-POSITION VertexAttribute)) | |
(def vNORMAL | |
(.-NORMAL VertexAttribute)) | |
(def vCOLOR | |
(.-COLOR VertexAttribute)) | |
(def AttributeType | |
js/Filament.VertexBuffer$AttributeType) | |
(def aFLOAT2 | |
(.-FLOAT2 AttributeType)) | |
(def aUBYTE4 | |
(.-UBYTE4 AttributeType)) | |
(def IndexType | |
js/Filament.IndexBuffer$IndexType) | |
(def iUSHORT | |
(.-USHORT IndexType)) | |
(def PrimitiveType | |
js/Filament.RenderableManager$PrimitiveType) | |
(def pTRIANGLES | |
(.-TRIANGLES PrimitiveType)) | |
(def Projection | |
js/Filament.Camera$Projection) | |
(def pORTHO | |
(.-ORTHO Projection)) | |
(defn engine | |
"Create engine for `canvas` element" | |
[canvas] | |
(. js/Filament.Engine (create canvas))) | |
(defn scene | |
"Create new scene" | |
[] | |
(. *engine* (createScene))) | |
(defn entity | |
"Create new entity" | |
[] | |
(.. js/Filament.EntityManager (get) (create))) | |
(defn vertex-buffer | |
"Create new vertex buffer builder" | |
[] | |
(.. js/Filament.VertexBuffer (Builder))) | |
(defn index-buffer | |
"Create new index buffer builder" | |
[] | |
(.. js/Filament.IndexBuffer (Builder))) | |
(defn material | |
"Create new material" | |
[url] | |
(. *engine* (createMaterial url))) | |
(defn material-instance | |
"Get material default instance" | |
[mat] | |
(. mat (getDefaultInstance))) | |
(defn swap-chain | |
"Create swap chain" | |
[] | |
(. *engine* (createSwapChain))) | |
(defn renderer | |
"Create new renderer" | |
[] | |
(. *engine* (createRenderer))) | |
(defn camera | |
"Create new camera" | |
[] | |
(. *engine* (createCamera))) | |
(defn view | |
"Create new view" | |
[] | |
(. *engine* (createView))) | |
(defn transform-manager | |
"Get transform manager" | |
[] | |
(. *engine* (getTransformManager))) | |
(defn get-instance | |
"Gets an Instance representing the transform component associated with the given Entity" | |
[tm e] | |
(. tm (getInstance e))) | |
(defn set-transform | |
"Set a local transform of a transform component" | |
[tm e tf] | |
(. tm (setTransform (get-instance tm e) tf))) | |
(defn add-entity | |
"Add entity to scene" | |
[scene entity] | |
(. scene (addEntity entity))) | |
(defn set-buffer-at | |
"Fill vertex buffer with data" | |
[vb idx buf] | |
(. vb (setBufferAt *engine* idx buf))) | |
(defn set-buffer | |
"Fill index buffer with data" | |
[ib buf] | |
(. ib (setBuffer *engine* buf))) | |
(defn set-camera | |
"Set view camera" | |
[view camera] | |
(. view (setCamera camera))) | |
(defn set-scene | |
"Set view scene" | |
[view scene] | |
(. view (setScene scene))) | |
(defn set-clear-color | |
"Set view clear color" | |
[view [r g b a]] | |
(. view (setClearColor #js [r g b a]))) | |
(defn set-viewport | |
"Set view viewport" | |
[view [x y w h]] | |
(. view (setViewport #js [x y w h]))) | |
(defn set-projection | |
"Set camera projection" | |
[camera proj left right bottom top near far] | |
(. camera (setProjection proj left right bottom top near far))) | |
(defn renderable-manager | |
"Create renederable manager builder" | |
[count] | |
(.. js/Filament.RenderableManager (Builder count))) | |
(defn build | |
"Build anything" | |
[builder & args] | |
(apply (.bind (.-build builder) builder) *engine* args)) | |
(defn render | |
"Render" | |
[renderer swapchain view] | |
(. renderer (render swapchain view))) | |
(defn init | |
"Init Filament" | |
[deps canvas f] | |
(js/Filament.init | |
(clj->js deps) | |
#(binding [*engine* (engine canvas)] (f)))) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment