Refactor poking slightly

This commit is contained in:
2021-06-12 02:40:45 +02:00
parent 02a2d3920d
commit 8723be7f26
5 changed files with 71 additions and 75 deletions
+3 -41
View File
@@ -1,8 +1,5 @@
module Shader
( pokeShaders
, pokeArrayOff
, pokeShader'
, bindArrayBuffers'
( bindArrayBuffers'
, bindShaderBuffers
, drawShader
, drawShaders
@@ -11,18 +8,14 @@ module Shader
, extractProgAndUnis
, freeShaderPointers
, setPerpMatUniform
, module Shader.Data
)
where
import Geometry
) where
import Geometry.Data
import Shader.Data
import Shader.Parameters
import MatrixHelper
import Picture.Data
import Foreign
import Control.Monad
import qualified Control.Foldl as F
import Graphics.Rendering.OpenGL hiding (Point,translate,scale,imageHeight)
--import Text.RawString.QQ
import Linear.Matrix
@@ -31,37 +24,6 @@ import Linear.V4
extractProgAndUnis :: FullShader -> (Program,UniformLocation)
extractProgAndUnis s = (_shaderProgram s, _shaderMatrixUniform s)
pokeShaders :: [FullShader] -> F.FoldM IO RenderType [Int]
pokeShaders = traverse pokeShader'
pokeShader' :: FullShader -> F.FoldM IO RenderType Int
pokeShader' fs = F.FoldM (pokeRender' fls ptr stride) (return 0) return
where
theVBO = _vaoVBO $ _shaderVAO fs
ptr = _vboPointer theVBO
stride = sum $ _vboAttribSizes theVBO
fls = _shaderPokeStrategy fs
pokeRender'
:: (RenderType -> [[Float]])
-> Ptr Float
-> Int -- ^ stride
-> Int
-> RenderType
-> IO Int
pokeRender' toFs ptr stride n rt = pokeList' ptr stride n (toFs rt)
pokeList' :: Ptr Float -> Int -> Int -> [[Float]] -> IO Int
pokeList' ptr stride = foldM (pokePtrs' ptr stride)
pokePtrs' :: Ptr Float -> Int -> Int -> [Float] -> IO Int
pokePtrs' ptr stride n fs = do
pokeArrayOff ptr (stride * n) fs
return $ n + 1
pokeArrayOff :: Storable a => Ptr a -> Int -> [a] -> IO ()
pokeArrayOff ptr i = zipWithM_ (pokeElemOff ptr) [i..]
bindArrayBuffers' :: Int -> VBO -> IO ()
bindArrayBuffers' numVs theVBO = do
bindBuffer ArrayBuffer $= Just (_vbo theVBO)