-
Notifications
You must be signed in to change notification settings - Fork 5
/
Vignette.hs
31 lines (26 loc) · 933 Bytes
/
Vignette.hs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
{-# LANGUAGE DataKinds #-}
module Vignette where
import LambdaCube.GL
import Utility
import BuiltinVec
data Vignette = Vignette
{ vignetteOuterRadius :: Exp F Float
, vignetteInnerRadius :: Exp F Float
}
vignette = Vignette
{ vignetteOuterRadius = floatF 1
, vignetteInnerRadius = floatF 0.5
}
fVignette :: Vignette -> Exp F V2F -> Exp F V4F -> Exp F V4F
fVignette v uv fromColor = fromColor @* smoothstep' o i d
where
o = vignetteOuterRadius v
i = vignetteInnerRadius v
d = distance' uv (vec2' (floatF 0.5) (floatF 0.5))
-- Vignette from a texture, useable as a render pass.
-- Use @fVignette@ to use it as part of a bigger fragment shader.
fxVignette :: Vignette -> Exp Obj (Image 1 V4F) -> Exp F V2F -> Exp F V4F
fxVignette v img uv = fVignette v uv c
where
w = 1024
c = texture' (Sampler LinearFilter ClampToEdge $ Texture (Texture2D (Float RGBA) n1) (V2 w w) NoMip [img]) uv