43 lines
1.2 KiB
Haskell
43 lines
1.2 KiB
Haskell
module Shader (
|
|
freeShaderPointers',
|
|
drawShaderLay,
|
|
shadVBOptr,
|
|
drawShader,
|
|
) where
|
|
|
|
import Control.Lens
|
|
import Control.Monad.Primitive
|
|
import qualified Data.Vector.Unboxed.Mutable as UMV
|
|
import Foreign
|
|
import Graphics.GL.Core45
|
|
import Shader.Data
|
|
import Shader.Parameters
|
|
|
|
drawShaderLay :: Int -> UMV.MVector (PrimState IO) Int -> Int -> (Shader, VBO) -> IO ()
|
|
{-# INLINE drawShaderLay #-}
|
|
drawShaderLay l countsVector shadIn fs = do
|
|
i <- UMV.read countsVector shadIn
|
|
glUseProgram (_shaderUINT $ fst fs)
|
|
glBindVertexArray $ fs ^. _1 . shaderVAO . vaoName
|
|
glDrawArrays
|
|
(_unPrimitiveMode $ _shaderPrimitive $ fst fs)
|
|
(fromIntegral $ l * numSubElements)
|
|
(fromIntegral i)
|
|
|
|
drawShader :: Shader -> Int -> IO ()
|
|
{-# INLINE drawShader #-}
|
|
drawShader fs i = do
|
|
glUseProgram (_shaderUINT fs)
|
|
glBindVertexArray $ fs ^. shaderVAO . vaoName
|
|
glDrawArrays
|
|
(_unPrimitiveMode $ _shaderPrimitive fs)
|
|
0
|
|
(fromIntegral i)
|
|
|
|
freeShaderPointers' :: (Shader, VBO) -> IO ()
|
|
freeShaderPointers' = free . _vboPtr . snd
|
|
|
|
shadVBOptr :: (Shader, VBO) -> Ptr Float
|
|
{-# INLINE shadVBOptr #-}
|
|
shadVBOptr = _vboPtr . snd
|