(program	
 (struct Vertex_Out
  [(:= position float3 (@position)) 
   (:= normal float3 (@normal)) 
   (:= uv float3 (@uv)) 
   (:= frag_pos float3 (@interp))])

 (instance
  [(:= model float4x4 (@model))])

 (fun vertex main
  [(:= position float3 (@position)) 
   (:= uv float2 (@uv)) 
   (:= normal float3 (@normal))] 
  (:= v_out Vertex_Out) 
  (= v_out.position (mul position model)) 
  (= v_out.normal normal) 
  (= v_out.uv uv) 
  (= v_out.frag_pos position) 
  (return v_out))

 (struct Pixel_Out
  [(:= color float4 (@target0)) 
   (:= emission float4 (@target1))])

 (fun pixel main
  [(:= v_in Vertex_Out)] 
  (:= p_out Pixel_Out) 
  (= p_out.color (float4 1 0.5 1 1)) 
  (= p_out.emission (float4 2 2 2 2)) 
  (return p_out)))