Files
loop/src/Shader.hs
T
2023-03-23 21:17:24 +00:00

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