data AB = A | B render choice = let emptyFB = FrameBuffer (colorImage1 (V4 0.0 0.0 0.4 1.0)) rasterCtx = TriangleCtx CullNone PolygonFill NoOffset LastVertex fragmentCtx = (ColorOp NoBlending (V4 True True True True)) vertexShader v = (v, v) vertexStream = fetch "stream4" Triangle (Attribute "position4" :: Vec 4 Float) primitiveStream = mapPrimitives vertexShader vertexStream fragmentStream = rasterizePrimitives rasterCtx Smooth primitiveStream fragmentShader = \v -> case choice of A -> v B -> V4 1.0 0.0 0.0 1.0 frame = accumulate fragmentCtx fragmentShader fragmentStream emptyFB in ScreenOut frame data Out = Out (AB -> Output) out = Out render main = let Out o = out in o A