This commit is contained in:
2025-11-21 00:25:50 +00:00
parent ed6ebc930e
commit 3ceff22f36
20 changed files with 37 additions and 425 deletions
+2 -2
View File
@@ -30,8 +30,8 @@ bufferEBO x i =
glNamedBufferSubData (x ^. uiboName) 0 (fromIntegral $ gluintSize * i) (x ^. uiboPtr)
bufferShaderLayers
:: MV.MVector (PrimState IO) (GLuint, VBO) -> UMV.MVector (PrimState IO) Int -> IO ()
bufferShaderLayers shads counts = MV.imapM_ f shads
:: UMV.MVector (PrimState IO) Int -> MV.MVector (PrimState IO) (GLuint, VBO) -> IO ()
bufferShaderLayers counts = MV.imapM_ f
where
f i shad = do
let theVBO = snd shad
+1 -53
View File
@@ -32,10 +32,7 @@ makeShaderVBO ::
makeShaderVBO s shaderlist sizes = do
prog <- makeSourcedShader s shaderlist
vbo <- setupVBO (vasTightStride sizes)
return
( prog
, vbo
)
return (prog , vbo)
setupVBO :: Int -> IO VBO
setupVBO vertexsize = do
@@ -66,28 +63,6 @@ shaderTypeExt GL_FRAGMENT_SHADER = ".frag"
shaderTypeExt GL_COMPUTE_SHADER = ".comp"
shaderTypeExt _ = undefined
setupVAOUsingVBO :: [VertexAttribute] -> VBO -> IO VAO
setupVAOUsingVBO vas vbo = do
let strd = vbo ^. vboVertexBytes
vaoname <- mglCreate glCreateVertexArrays
glBindVertexArray vaoname
setupVertexAttribs
(vbo ^. vboName)
vaoname
vas
(fromIntegral strd)
return $ VAO vaoname
setupVBOVAO :: [VertexAttribute] -> IO (VAO, VBO)
setupVBOVAO vas = do
vaoname <- mglCreate glCreateVertexArrays
glBindVertexArray vaoname
vbo <- setupVBO strd
vao <- setupVAOUsingVBO vas vbo
return (vao, vbo)
where
strd = vasTightStride vas
toFloatVAs :: [Int] -> [VertexAttribute]
toFloatVAs = go 0
where
@@ -96,31 +71,6 @@ toFloatVAs = go 0
VertexAttribute (fromIntegral i) GL_FLOAT GL_FALSE x :
go (x + fromIntegral floatSize * fromIntegral i) is
setupVertexAttribs :: GLuint -> GLuint -> [VertexAttribute] -> GLsizei -> IO ()
setupVertexAttribs vbo vao vas strd = do
glVertexArrayVertexBuffer vao 0 vbo 0 strd
zipWithM_ (setupVertexAttribPointer vao) [0 ..] vas
-- | Assumes the correct VBO is bound
setupVertexAttribPointer ::
GLuint ->
-- | Location (in shader)
Int ->
VertexAttribute ->
IO ()
setupVertexAttribPointer vao loc va = do
glEnableVertexArrayAttrib vao loc'
glVertexArrayAttribFormat
vao
loc'
(va ^. vaCount)
(va ^. vaType)
(va ^. vaNormalize)
(va ^. vaOffset)
glVertexArrayAttribBinding vao loc' 0
where
loc' = fromIntegral loc
makeShaderProgram :: String -> [(GLenum, BS.ByteString)] -> IO GLuint
makeShaderProgram str srcs = do
theprog <- glCreateProgram
@@ -208,5 +158,3 @@ withByteString :: Num t => BS.ByteString -> (Ptr b -> t -> IO a) -> IO a
withByteString bs act =
BU.unsafeUseAsCStringLen bs $ \(ptr, size) ->
act (castPtr ptr) (fromIntegral size)
--boVertex