Skip to content

Commit 2d4bea5

Browse files
author
Mike Solomon
committed
Adds canvas bindings
1 parent 32d7eae commit 2d4bea5

9 files changed

Lines changed: 137 additions & 1 deletion
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
module Web.GPU.GPUCanvasAlphaMode
2+
( GPUCanvasAlphaMode
3+
, opaque
4+
, premultiplied
5+
) where
6+
7+
import Prelude
8+
9+
newtype GPUCanvasAlphaMode = GPUCanvasAlphaMode String
10+
11+
derive instance Eq GPUCanvasAlphaMode
12+
derive instance Ord GPUCanvasAlphaMode
13+
derive newtype instance Show GPUCanvasAlphaMode
14+
15+
opaque :: GPUCanvasAlphaMode
16+
opaque = GPUCanvasAlphaMode "opaque"
17+
18+
premultiplied :: GPUCanvasAlphaMode
19+
premultiplied = GPUCanvasAlphaMode "premultiplied"
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
module Web.GPU.GPUCanvasConfiguration where
2+
3+
import Data.Newtype (class Newtype)
4+
import Web.GPU.GPUCanvasAlphaMode (GPUCanvasAlphaMode)
5+
import Web.GPU.GPUTextureFormat (GPUTextureFormat)
6+
import Web.GPU.GPUTextureUsage (GPUTextureUsageFlags)
7+
import Web.GPU.Internal.RequiredAndOptional (RequiredAndOptional)
8+
import Web.GPU.Internal.Types (GPUDevice)
9+
import Web.GPU.PredefinedColorSpace (PredefinedColorSpace)
10+
11+
newtype GPUCanvasConfiguration = GPUCanvasConfiguration
12+
( RequiredAndOptional
13+
( device :: GPUDevice
14+
, format :: GPUTextureFormat
15+
16+
)
17+
( usage :: GPUTextureUsageFlags
18+
, viewFormats :: Array GPUTextureFormat
19+
, colorSpace :: PredefinedColorSpace
20+
, alphaMode :: GPUCanvasAlphaMode
21+
22+
)
23+
)
24+
25+
derive instance Newtype GPUCanvasConfiguration _

src/Web/GPU/GPUCanvasContext.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
export const canvasImpl = (context) => () => context.canvas;
2+
export const configureImpl = (context) => (descriptor) => () =>
3+
context.configure(descriptor);
4+
export const unconfigureImpl = (context) => () => context.unconfigure();
5+
export const getCurrentTextureImpl = (context) => () =>
6+
context.getCurrentTexture();

src/Web/GPU/GPUCanvasContext.purs

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
module Web.GPU.GPUCanvasContext
2+
( canvas
3+
, configure
4+
, getCurrentTexture
5+
, unconfigure
6+
) where
7+
8+
import Prelude
9+
10+
import Effect (Effect)
11+
import Web.GPU.GPUCanvasConfiguration (GPUCanvasConfiguration)
12+
import Web.GPU.Internal.Types (GPUCanvasContext, GPUTexture)
13+
import Web.HTML (HTMLCanvasElement)
14+
15+
foreign import canvasImpl :: GPUCanvasContext -> Effect HTMLCanvasElement
16+
17+
canvas :: GPUCanvasContext -> Effect HTMLCanvasElement
18+
canvas = canvasImpl
19+
20+
foreign import configureImpl
21+
:: GPUCanvasContext -> GPUCanvasConfiguration -> Effect Unit
22+
23+
configure :: GPUCanvasContext -> GPUCanvasConfiguration -> Effect Unit
24+
configure = configureImpl
25+
26+
foreign import unconfigureImpl :: GPUCanvasContext -> Effect Unit
27+
28+
unconfigure :: GPUCanvasContext -> Effect Unit
29+
unconfigure = unconfigureImpl
30+
31+
foreign import getCurrentTextureImpl :: GPUCanvasContext -> Effect GPUTexture
32+
33+
getCurrentTexture :: GPUCanvasContext -> Effect GPUTexture
34+
getCurrentTexture = getCurrentTextureImpl

src/Web/GPU/GPUQuerySet.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export const destroyImpl = (querySet) => () => querySet.destroy();
2+
export const typeImpl = (querySet) => () => querySet.type;
3+
export const countImpl = (querySet) => () => querySet.count;

src/Web/GPU/GPUQuerySet.purs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
module Web.GPU.GPUQuerySet
2+
( count
3+
, destroy
4+
, type'
5+
) where
6+
7+
import Prelude
8+
9+
import Effect (Effect)
10+
import Web.GPU.GPUQueryType (GPUQueryType)
11+
import Web.GPU.Internal.Types (GPUQuerySet, GPUSize32)
12+
13+
foreign import destroyImpl :: GPUQuerySet -> Effect Unit
14+
15+
destroy :: GPUQuerySet -> Effect Unit
16+
destroy = destroyImpl
17+
18+
foreign import typeImpl :: GPUQuerySet -> Effect GPUQueryType
19+
20+
type' :: GPUQuerySet -> Effect GPUQueryType
21+
type' = typeImpl
22+
23+
foreign import countImpl :: GPUQuerySet -> Effect GPUSize32
24+
25+
count :: GPUQuerySet -> Effect Int
26+
count = countImpl

src/Web/GPU/HTMLCanvasElement.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
export const getContextImpl = (just) => (nothing) => (canvas) => () => {
2+
const o = canvas.getContext("webgpu");
3+
return o ? just(o) : nothing;
4+
};

src/Web/GPU/HTMLCanvasElement.purs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
module Web.GPU.HTMLCanvasElement
2+
( getContext
3+
) where
4+
5+
import Data.Maybe (Maybe(..))
6+
import Effect (Effect)
7+
import Web.GPU.Internal.Types (GPUCanvasContext)
8+
import Web.HTML (HTMLCanvasElement)
9+
10+
foreign import getContextImpl
11+
:: (GPUCanvasContext -> Maybe GPUCanvasContext)
12+
-> Maybe GPUCanvasContext
13+
-> HTMLCanvasElement
14+
-> Effect (Maybe GPUCanvasContext)
15+
16+
getContext HTMLCanvasElement Effect (Maybe GPUCanvasContext)
17+
getContext = getContextImpl Just Nothing

src/Web/GPU/Internal/Types.purs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ module Web.GPU.Internal.Types
88
, GPUBindGroupLayoutEntry
99
, GPUBuffer
1010
, GPUBufferDynamicOffset
11+
, GPUCanvasContext
1112
, GPUColor
1213
, GPUCommandBuffer
1314
, GPUCommandEncoder
@@ -20,8 +21,8 @@ module Web.GPU.Internal.Types
2021
, GPUImageCopyExternalImageSource
2122
, GPUIndex32
2223
, GPUIntegerCoordinate
23-
, GPUOrigin3D
2424
, GPUOrigin2D
25+
, GPUOrigin3D
2526
, GPUPipelineLayout
2627
, GPUQuerySet
2728
, GPUQueue
@@ -78,6 +79,7 @@ data GPUComputePassEncoder
7879
data GPUCommandBuffer
7980
data GPURenderBundle
8081
data GPUImageCopyExternalImageSource
82+
data GPUCanvasContext
8183
data GPUOrigin3D
8284
data GPUExtent3D
8385
data GPUOrigin2D

0 commit comments

Comments
 (0)