packages feed

brillo-rendering-1.13.3: Brillo/Rendering.hs

module Brillo.Rendering (
  -- * Picture data type
  Picture (..),
  Point,
  Vector,
  Path,

  -- * Colors
  Color,
  makeColor,
  makeColorI,
  makeRawColor,
  makeRawColorI,
  rgbaOfColor,
  clampColor,

  -- * Bitmaps
  Rectangle (..),
  BitmapData,
  bitmapSize,
  BitmapFormat (..),
  PixelFormat (..),
  RowOrder (..),
  bitmapOfForeignPtr,
  bitmapDataOfForeignPtr,
  bitmapOfByteString,
  bitmapDataOfByteString,
  bitmapOfBMP,
  bitmapDataOfBMP,
  loadBMP,

  -- * Rendering
  displayPicture,
  renderPicture,
  withModelview,
  withClearBuffer,
  RS.initState,
  RS.State,
)
where

import Brillo.Internals.Data.Color
import Brillo.Internals.Data.Picture
import Brillo.Internals.Rendering.Common
import Brillo.Internals.Rendering.Picture
import Brillo.Internals.Rendering.State qualified as RS


{-| Set up the OpenGL context, clear the buffer, and render the given picture
  into it.

  This is the same as `renderPicture` composed with `withModelview`
  and `withClearBuffer`. If you want to manage your own OpenGL context then
  you can just call `renderPicture`.

  Using this function assumes that you've already opened a window
  and set that to the active context. If you don't want to do your own window
  management then use the @brillo@ package instead.
-}
displayPicture
  :: (Int, Int)
  -- ^ Window width and height.
  -> Color
  -- ^ Color to clear the window with.
  -> RS.State
  -- ^ Current rendering state.
  -> Float
  -- ^ View port scale, which controls the level of detail.
  --   Use 1.0 to start with.
  -> Picture
  -- ^ Picture to draw.
  -> IO ()
displayPicture windowSize colorClear state scale picture =
  withModelview windowSize $
    withClearBuffer colorClear $
      renderPicture state scale picture