{-# LANGUAGE DerivingVia #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE OverloadedStrings #-}
module THREE.WebGLRenderer
(
WebGLRenderer (..)
, THREE.WebGLRenderer.new
, domElement
, render
, setAnimationLoop
, setSize
, onBeforeCompileMaterial
, onBeforeRenderMaterial
) where
import Control.Monad (void)
import Miso
import THREE.BufferGeometry
import THREE.Camera
import THREE.Group
import THREE.Internal as THREE
import THREE.Material
import THREE.Object3D
import THREE.Scene
newtype WebGLRenderer
= WebGLRenderer
{ WebGLRenderer -> JSVal
unWebGLRenderer :: JSVal
} deriving (WebGLRenderer -> IO [JSVal]
(WebGLRenderer -> IO [JSVal]) -> ToArgs WebGLRenderer
forall args. (args -> IO [JSVal]) -> ToArgs args
$ctoArgs :: WebGLRenderer -> IO [JSVal]
toArgs :: WebGLRenderer -> IO [JSVal]
ToArgs, WebGLRenderer -> IO Object
(WebGLRenderer -> IO Object) -> ToObject WebGLRenderer
forall a. (a -> IO Object) -> ToObject a
$ctoObject :: WebGLRenderer -> IO Object
toObject :: WebGLRenderer -> IO Object
ToObject, WebGLRenderer -> IO JSVal
(WebGLRenderer -> IO JSVal) -> ToJSVal WebGLRenderer
forall a. (a -> IO JSVal) -> ToJSVal a
$ctoJSVal :: WebGLRenderer -> IO JSVal
toJSVal :: WebGLRenderer -> IO JSVal
ToJSVal)
instance FromJSVal WebGLRenderer where
fromJSVal :: JSVal -> IO (Maybe WebGLRenderer)
fromJSVal = Maybe WebGLRenderer -> IO (Maybe WebGLRenderer)
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Maybe WebGLRenderer -> IO (Maybe WebGLRenderer))
-> (JSVal -> Maybe WebGLRenderer)
-> JSVal
-> IO (Maybe WebGLRenderer)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. WebGLRenderer -> Maybe WebGLRenderer
forall a. a -> Maybe a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (WebGLRenderer -> Maybe WebGLRenderer)
-> (JSVal -> WebGLRenderer) -> JSVal -> Maybe WebGLRenderer
forall b c a. (b -> c) -> (a -> b) -> a -> c
. JSVal -> WebGLRenderer
WebGLRenderer
new :: Maybe JSVal -> Three WebGLRenderer
new :: Maybe JSVal -> IO WebGLRenderer
new Maybe JSVal
Nothing = (JSVal -> WebGLRenderer) -> MisoString -> () -> IO WebGLRenderer
forall args con.
ToArgs args =>
(JSVal -> con) -> MisoString -> args -> Three con
THREE.new JSVal -> WebGLRenderer
WebGLRenderer MisoString
"WebGLRenderer" ()
new (Just JSVal
canvasRef) = do
o <- IO Object
create
setProp "canvas" canvasRef o
THREE.new WebGLRenderer "WebGLRenderer" o
domElement :: Property WebGLRenderer JSVal
domElement :: Property WebGLRenderer JSVal
domElement = MisoString -> Property WebGLRenderer JSVal
forall object field.
(ToObject object, ToJSVal field, FromJSVal field) =>
MisoString -> Property object field
property MisoString
"domElement"
render
:: (Object3D object, Camera camera)
=> (object, camera)
-> WebGLRenderer
-> Three ()
render :: forall object camera.
(Object3D object, Camera camera) =>
(object, camera) -> WebGLRenderer -> IO ()
render (object, camera)
args (WebGLRenderer JSVal
v) =
IO JSVal -> IO ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (IO JSVal -> IO ()) -> IO JSVal -> IO ()
forall a b. (a -> b) -> a -> b
$ JSVal
v JSVal -> MisoString -> (object, camera) -> IO JSVal
forall object args.
(ToObject object, ToArgs args) =>
object -> MisoString -> args -> IO JSVal
# (MisoString
"render" :: MisoString) ((object, camera) -> IO JSVal) -> (object, camera) -> IO JSVal
forall a b. (a -> b) -> a -> b
$ (object, camera)
args
setAnimationLoop :: Function -> WebGLRenderer -> IO ()
setAnimationLoop :: Function -> WebGLRenderer -> IO ()
setAnimationLoop Function
f (WebGLRenderer JSVal
v) =
IO JSVal -> IO ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (IO JSVal -> IO ()) -> IO JSVal -> IO ()
forall a b. (a -> b) -> a -> b
$ JSVal
v JSVal -> MisoString -> Function -> IO JSVal
forall object args.
(ToObject object, ToArgs args) =>
object -> MisoString -> args -> IO JSVal
# (MisoString
"setAnimationLoop" :: MisoString) (Function -> IO JSVal) -> Function -> IO JSVal
forall a b. (a -> b) -> a -> b
$ Function
f
setSize :: (Int, Int, Bool) -> WebGLRenderer -> IO ()
setSize :: (Int, Int, Bool) -> WebGLRenderer -> IO ()
setSize (Int
width, Int
height, Bool
updateStyle) (WebGLRenderer JSVal
v) =
IO JSVal -> IO ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (IO JSVal -> IO ()) -> IO JSVal -> IO ()
forall a b. (a -> b) -> a -> b
$ JSVal
v JSVal -> MisoString -> (Int, Int, Bool) -> IO JSVal
forall object args.
(ToObject object, ToArgs args) =>
object -> MisoString -> args -> IO JSVal
# (MisoString
"setSize" :: MisoString) ((Int, Int, Bool) -> IO JSVal) -> (Int, Int, Bool) -> IO JSVal
forall a b. (a -> b) -> a -> b
$ (Int
width, Int
height, Bool
updateStyle)
onBeforeCompileMaterial :: Material material => Method material (Object, WebGLRenderer) ()
onBeforeCompileMaterial :: forall material.
Material material =>
Method material (Object, WebGLRenderer) ()
onBeforeCompileMaterial = MisoString -> Method material (Object, WebGLRenderer) ()
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"onBeforeCompile"
onBeforeRenderMaterial
:: (Material material, Camera camera, BufferGeometryClass geometry, Object3D object)
=> Method material (WebGLRenderer, Scene, camera, geometry, object, Group) ()
onBeforeRenderMaterial :: forall material camera geometry object.
(Material material, Camera camera, BufferGeometryClass geometry,
Object3D object) =>
Method
material (WebGLRenderer, Scene, camera, geometry, object, Group) ()
onBeforeRenderMaterial = MisoString
-> Method
material (WebGLRenderer, Scene, camera, geometry, object, Group) ()
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"onBeforeRender"