module FWGL.Backend.JavaScript.WebGL.Types (
Ctx,
Image,
Float32Array,
Int32Array,
Uint16Array,
Program,
Shader,
Buffer,
FrameBuffer,
RenderBuffer,
Texture,
UniformLocation,
ActiveInfo,
ShaderPrecisionFormat,
ArrayBufferView,
getCtx,
float32Array,
int32Array,
uint16Array,
uint8Array,
float32View,
int32View,
uint16View,
uint8View,
toJSArray,
listToJSArray,
noBuffer,
noTexture,
noArray
) where
import Data.Int (Int32)
import Data.Word (Word8, Word16)
import GHCJS.Marshal
import GHCJS.Foreign
import GHCJS.Types
data Ctx_
type Ctx = JSRef Ctx_
data Image_
type Image = JSRef Image_
data Float32Array_
type Float32Array = JSRef Float32Array_
data Int32Array_
type Int32Array = JSRef Int32Array_
data Uint16Array_
type Uint16Array = JSRef Uint16Array_
data Uint8Array_
type Uint8Array = JSRef Uint8Array_
data Program_
type Program = JSRef Program_
data Shader_
type Shader = JSRef Shader_
data Buffer_
type Buffer = JSRef Buffer_
data FrameBuffer_
type FrameBuffer = JSRef FrameBuffer_
data RenderBuffer_
type RenderBuffer = JSRef RenderBuffer_
data Texture_
type Texture = JSRef Texture_
data UniformLocation_
type UniformLocation = JSRef UniformLocation_
data ActiveInfo_
type ActiveInfo = JSRef ActiveInfo_
data ShaderPrecisionFormat_
type ShaderPrecisionFormat = JSRef ShaderPrecisionFormat_
data ArrayBufferView_
type ArrayBufferView = JSRef ArrayBufferView_
noBuffer :: Buffer
noBuffer = jsNull
noTexture :: Texture
noTexture = jsNull
noArray :: IO ArrayBufferView
noArray = return jsNull
float32View :: JSArray Float -> IO ArrayBufferView
float32View = fmap castRef . float32Array
int32View :: JSArray Int32 -> IO ArrayBufferView
int32View = fmap castRef . int32Array
uint16View :: JSArray Word16 -> IO ArrayBufferView
uint16View = fmap castRef . uint16Array
uint8View :: JSArray Word8 -> IO ArrayBufferView
uint8View = fmap castRef . uint8Array
toJSArray :: ToJSRef a => (v -> Maybe (a, v)) -> v -> IO (JSArray a)
toJSArray next iv = newArray >>= iterPush iv
where iterPush v arr = case next v of
Just (x, v') -> do xRef <- toJSRef x
pushArray xRef arr
iterPush v' arr
Nothing -> return arr
listToJSArray :: ToJSRef a => [a] -> IO (JSArray a)
listToJSArray = toJSArray deconstr
where deconstr (x : xs) = Just (x, xs)
deconstr [] = Nothing
foreign import javascript unsafe "$r = new Float32Array($1);"
float32Array :: JSArray Float -> IO Float32Array
foreign import javascript unsafe "$r = new Int32Array($1);"
int32Array :: JSArray Int32 -> IO Int32Array
foreign import javascript unsafe "$r = new Uint16Array($1);"
uint16Array :: JSArray Word16 -> IO Uint16Array
foreign import javascript unsafe "$r = new Uint8Array($1);"
uint8Array :: JSArray Word8 -> IO Uint8Array
foreign import javascript unsafe "$r = $1.getContext(\"webgl\");"
getCtx :: JSRef a -> IO Ctx