packages feed

luminance-samples-0.11: src/Blending.hs

import Common
import Graphics.Luminance

main :: IO ()
main = startup $ \window loop -> do
  triangle <- createGeometry vertices Nothing Triangle
  vs <- createStage VertexShader vsSource
  fs <- createStage FragmentShader fsSource
  program <- createProgram [vs,fs] $ \uni -> do
    colorU <- uni (UniformName "color")
    offsetU <- uni (UniformName "offset")
    pure (colorU,offsetU)
  loop $ do
    let cmd color offset =
          updateAndDraw (\(colorU,offsetU) -> (colorU .= color <> offsetU .= offset)) (renderCmd blending False triangle)
    _ <- draw $ defaultFrameCmd [ShadingCmd program mempty $ zipWith cmd colors offsets]
    endFrame window

colors :: [(Float,Float,Float)]
colors =
  [
    (1,0,0)
  , (0,1,0)
  , (0,0,1)
  ]

offsets :: [(Float,Float)]
offsets = 
  [
    (-0.25,0)
  , (0.25,0)
  , (0,0.25)
  ]

vertices :: [V 2 Float]
vertices =
  [
    vec2 (-0.5) (-0.5)
  , vec2 0 0.5
  , vec2 0.5 (-0.5)
  ]

blending :: Maybe (BlendingMode,BlendingFactor,BlendingFactor)
blending = Just (Additive,One,One)

vsSource :: String
vsSource = unlines
  [
    "in vec2 co;"

  , "uniform vec2 offset;"

  , "void main() {"
  , "  gl_Position = vec4(co + offset, 0., 1.);"
  , "}"
  ]

fsSource :: String
fsSource = unlines
  [
    "out vec4 frag;"

  , "uniform vec3 color;"

  , "void main() {"
  , "  frag = vec4(color, 1.);"
  , "}"
  ]