clear = imageFrame (emptyDepthImage 1, emptyColorImage teal) triangleRasterCtx = TriangleCtx CullNone PolygonFill NoOffset LastVertex colorFragmentCtx = (DepthOp Less True, ColorOp NoBlending (V4 True True True True)) cubeVertexStream = fetch "stream4" Triangle (Attribute "position4" :: Vec 4 Float, Attribute "vertexUV" :: Vec 2 Float) rotMatrix = Uniform "MVP" :: Mat 4 4 Float setAlpha v = v * V4 1.0 1 1 0 + V4 0 0 0 1 cube' res (n :: Float) fb = clear `overlay` cubeVertexStream & mapPrimitives (\(v, u) -> (rotMatrix *. scale 0.4 (rotMatrixX (n/10) *. v), u)) & rasterizePrimitives triangleRasterCtx Smooth & mapFragments (\a -> setAlpha $ (a%yyyx *! 0.5 + texture2D sampler a) *! 0.7) & accumulateWith colorFragmentCtx where sampler = Sampler LinearFilter MirroredRepeat $ Texture2D (V2 res res) (PrjImageColor fb) main :: Output main = ScreenOut $ snd $ iterate (\(n, f) -> (n+1, cube' 256 n f)) (0, clear) !! 15