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