title: Transparency/Alpha with haskell GLUT bindings
body: <p>Using the <a href="https://hackage.haskell.org/package/GLUT" rel="nofollow noreferrer">Haskell GLUT binding</a>, I modified the <a href="https://github.com/haskell-opengl/GLUT/blob/master/examples/RedBook4/Hello.hs" rel="nofollow noreferrer">Hello World example</a> in two ways:</p>
  
  <ol>
  <li>Added <code>WithAlphaComponent</code> to <code>initialDisplayMode</code>.</li>
  <li>Changed color to a <code>Color4</code> with <code>0.5</code> opacity.</li>
  </ol>
  
  <p>I would expect it to display a semi-transparent white square with the background red showing through. Instead it shows a solid white square, as if the opacity is being ignored. I can't figure out why this doesn't work?</p>
  
  <pre><code>import Graphics.UI.GLUT
  
  display :: DisplayCallback
  display = do
     -- clear all pixels
     clear [ ColorBuffer ]
  
     -- draw white polygon (rectangle) with corners at
     -- (0.25, 0.25, 0.0) and (0.75, 0.75, 0.0)
  
     -- CHANGE #2
     color (Color4 1.0 1.0 (1.0 :: GLfloat) 0.5)
  
     -- resolve overloading, not needed in "real" programs
     let vertex3f = vertex :: Vertex3 GLfloat -&gt; IO ()
     renderPrimitive Polygon $ mapM_ vertex3f [
        Vertex3 0.25 0.25 0.0,
        Vertex3 0.75 0.25 0.0,
        Vertex3 0.75 0.75 0.0,
        Vertex3 0.25 0.75 0.0]
  
     -- don't wait!
     -- start processing buffered OpenGL routines
     flush
  
  myInit :: IO ()
  myInit = do
     -- select clearing color
     clearColor $= Color4 0.7 0 0 0
  
     -- initialize viewing values
     matrixMode $= Projection
     loadIdentity
     ortho 0 1 0 1 (-1) 1
  
  -- Declare initial window size, position, and display mode (single buffer and
  -- RGBA). Open window with "hello" in its title bar. Call initialization
  -- routines. Register callback function to display graphics. Enter main loop and
  -- process events.
  main :: IO ()
  main = do
     _ &lt;- getArgsAndInitialize
     -- CHANGE #1
     initialDisplayMode $= [ SingleBuffered, RGBMode, WithAlphaComponent ]
     initialWindowSize $= Size 250 250
     initialWindowPosition $= Position 100 100
     _ &lt;- createWindow "hello"
     myInit
     displayCallback $= display
     mainLoop
  </code></pre>