    --------------------------------------------------------------------------------
    -- |
    -- Module      :  Graphics.Rendering.OpenGL.GL.ObjectName
    -- Copyright   :  (c) Sven Panne 2009
    -- License     :  BSD-style (see the file LICENSE)
    --
    -- Maintainer  :  sven.panne@aedion.de
    -- Stability   :  stable
    -- Portability :  portable
    --
    -- Object names are explicitly handled identifiers for API objects, e.g. a
    -- texture object name in OpenGL or a buffer object name in OpenAL.
    --
    --------------------------------------------------------------------------------

    module Graphics.Rendering.OpenGL.GL.ObjectName ( ObjectName(..) ) where

    -- | An 'ObjectName' is an explicitly handled identifier for API objects, e.g. a
    -- texture object name in OpenGL or a buffer object name in OpenAL.

    class ObjectName a where
       -- | Generate a given number of object names, which are guaranteed to be
       -- unused. By generating the names, they become used.
       genObjectNames :: Int -> IO [a]

       -- | Make the given object names available again, declaring them as unused.
       deleteObjectNames:: [a] -> IO ()

       -- | Test if the given object name is currently in use, i.e. test if it has
       -- been generated, but not been deleted so far.
       isObjectName :: a -> IO Bool