packages feed

fir-0.1.0.0: test/Tests/Vector/Swizzle.hs

{-# LANGUAGE AllowAmbiguousTypes   #-}
{-# LANGUAGE BlockArguments        #-}
{-# LANGUAGE DataKinds             #-}
{-# LANGUAGE FlexibleInstances     #-}
{-# LANGUAGE GADTs                 #-}
{-# LANGUAGE NamedWildCards        #-}
{-# LANGUAGE OverloadedLabels      #-}
{-# LANGUAGE PatternSynonyms       #-}
{-# LANGUAGE PartialTypeSignatures #-}
{-# LANGUAGE PolyKinds             #-}
{-# LANGUAGE RebindableSyntax      #-}
{-# LANGUAGE ScopedTypeVariables   #-}
{-# LANGUAGE TypeApplications      #-}
{-# LANGUAGE TypeFamilies          #-}
{-# LANGUAGE TypeOperators         #-}
{-# LANGUAGE UndecidableInstances  #-}

module Tests.Vector.Swizzle where

-- fir
import FIR
import Math.Linear

---------------------------------------------------------------------------------

type Defs = '[ "in_col"  ':-> Input      '[Location 0] (V 4 Float)
             , "out_col" ':-> Output     '[Location 0] (V 3 Float)
             , "main"    ':-> EntryPoint '[OriginUpperLeft] Fragment
             ]

blue1 :: V 4 Float
blue1 = V4 0.2 0.8 1 1

darkGrey :: V 3 Float
darkGrey = view @(Swizzle "rrr") blue1

blue2 :: V 3 Float
blue2 = view @(Swizzle "rgb") blue1


program :: Module Defs
program = Module $ entryPoint @"main" @Fragment do

    col1 <- use @(Name "in_col" :.: Swizzle "rgb")
    col2 <- use @(Name "in_col")
    let col3 = view @(Swizzle "bgr") col2
        col = 0.25 *^ ( col1 ^+^ col3 ^+^ Lit darkGrey ^+^ Lit blue2 )

    r <- use @( Name "in_col" :.: Swizzle "r" )


    put @"out_col" col
    
    assign @(Name "out_col" :.: Index 1 ) r