Use DSA for renderbuffers
This commit is contained in:
@@ -21,10 +21,10 @@ import GLHelp
|
||||
|
||||
-- I am not sure if this assumes that the shader is constructed directly before
|
||||
-- the texture is added...
|
||||
addTexture :: String -> FullShader' -> IO FullShader'
|
||||
addTexture :: String -> FullShader -> IO FullShader
|
||||
addTexture = addTexture2D 3 GL_LINEAR_MIPMAP_LINEAR GL_LINEAR
|
||||
|
||||
vaddTextureNoFilter :: String -> FullShader' -> IO FullShader'
|
||||
vaddTextureNoFilter :: String -> FullShader -> IO FullShader
|
||||
vaddTextureNoFilter = addTexture2D 1 GL_NEAREST GL_NEAREST
|
||||
|
||||
addTexture2D
|
||||
@@ -32,7 +32,7 @@ addTexture2D
|
||||
-> GLenum -- minfilter
|
||||
-> GLenum -- magfilter
|
||||
-> String -- path to image
|
||||
-> FullShader' -> IO FullShader'
|
||||
-> FullShader -> IO FullShader
|
||||
addTexture2D nlev minfilt magfilt texpath shad = do
|
||||
Right cmap <- readImage texpath
|
||||
let texdata = convertRGBA8 cmap
|
||||
@@ -63,7 +63,7 @@ addTexture2D nlev minfilt magfilt texpath shad = do
|
||||
-- | for transforming a 256x256 image containing 64 tiles of 16x16 pixels into
|
||||
-- an image that was directly readable by glTexSubImage3D, used the
|
||||
-- transformation tilesToLine 8 128 on the underlying pixels.
|
||||
addTextureArray :: String -> FullShader' -> IO FullShader'
|
||||
addTextureArray :: String -> FullShader -> IO FullShader
|
||||
addTextureArray texturePath shad = do
|
||||
err <- glGetError
|
||||
print err
|
||||
@@ -87,10 +87,10 @@ tilesToLine
|
||||
-> [a]
|
||||
tilesToLine n w = concat . concat . transpose . chunksOf n . chunksOf w
|
||||
|
||||
addUniforms :: [String] -> FullShader' -> IO FullShader'
|
||||
addUniforms :: [String] -> FullShader -> IO FullShader
|
||||
addUniforms uniStrings shad = do foldM addUniform shad uniStrings
|
||||
|
||||
addUniform :: FullShader' -> String -> IO FullShader'
|
||||
addUniform :: FullShader -> String -> IO FullShader
|
||||
addUniform shad unistr = BS.useAsCString (pack unistr) $ \cstr -> do
|
||||
loc <- glGetUniformLocation (_shadProg' shad) cstr
|
||||
return $ shad & shadUnis' %~ (V.++ V.fromList [loc])
|
||||
|
||||
+4
-4
@@ -27,7 +27,7 @@ bindArrayBuffers numVs theVBO = do
|
||||
(fromIntegral $ floatSize * numVs * sum (_vboAttribSizes theVBO))
|
||||
(_vboPtr theVBO)
|
||||
|
||||
bindShaderLayers :: MV.MVector (PrimState IO) FullShader' -> UMV.MVector (PrimState IO) Int -> IO ()
|
||||
bindShaderLayers :: MV.MVector (PrimState IO) FullShader -> UMV.MVector (PrimState IO) Int -> IO ()
|
||||
bindShaderLayers shads counts = MV.imapM_ f shads
|
||||
where
|
||||
f i shad = do
|
||||
@@ -47,17 +47,17 @@ bindShaderLayers shads counts = MV.imapM_ f shads
|
||||
(fromIntegral $ floatSize * numVs * stride)
|
||||
(_vboPtr theVBO `plusPtr` (floatSize * stride * numSubElements * lay))
|
||||
|
||||
bindShader :: MV.MVector (PrimState IO) FullShader' -> UMV.MVector (PrimState IO) Int -> IO ()
|
||||
bindShader :: MV.MVector (PrimState IO) FullShader -> UMV.MVector (PrimState IO) Int -> IO ()
|
||||
bindShader shads counts = MV.imapM_ f shads
|
||||
where
|
||||
f i shad = UMV.read counts i >>= flip bindArrayBuffers (_vaoVBO . _shadVAO' $ shad)
|
||||
|
||||
bindShaderBuffers :: [FullShader'] -> [Int] -> IO ()
|
||||
bindShaderBuffers :: [FullShader] -> [Int] -> IO ()
|
||||
bindShaderBuffers = zipWithM_ f
|
||||
where
|
||||
f fs i = bindArrayBuffers i $ _vaoVBO $ _shadVAO' fs
|
||||
|
||||
bindShaderBuffers' :: [FullShader'] -> [Int] -> IO ()
|
||||
bindShaderBuffers' :: [FullShader] -> [Int] -> IO ()
|
||||
bindShaderBuffers' = zipWithM_ f
|
||||
where
|
||||
f fs i = bindArrayBuffers i $ _vaoVBO $ _shadVAO' fs
|
||||
|
||||
@@ -29,12 +29,12 @@ makeShader ::
|
||||
-- | The input vertex sizes
|
||||
[Int] ->
|
||||
EPrimitiveMode ->
|
||||
IO FullShader'
|
||||
IO FullShader
|
||||
makeShader s shaderlist sizes pm = do
|
||||
prog <- makeSourcedShader s shaderlist
|
||||
vaob <- setupVAO sizes
|
||||
return $
|
||||
FullShader'
|
||||
FullShader
|
||||
{ _shadProg' = prog
|
||||
, _shadVAO' = vaob
|
||||
, _shadPrim' = pm
|
||||
@@ -49,11 +49,11 @@ makeByteStringShaderUsingVAO ::
|
||||
[(GLenum, BS.ByteString)] ->
|
||||
EPrimitiveMode ->
|
||||
VAO ->
|
||||
IO FullShader'
|
||||
IO FullShader
|
||||
makeByteStringShaderUsingVAO s shaderlist pm vao = do
|
||||
prog <- makeShaderProgram s shaderlist
|
||||
return $
|
||||
FullShader'
|
||||
FullShader
|
||||
{ _shadProg' = prog
|
||||
, _shadVAO' = vao
|
||||
, _shadPrim' = pm
|
||||
@@ -69,11 +69,11 @@ makeShaderUsingVAO ::
|
||||
[GLenum] ->
|
||||
EPrimitiveMode ->
|
||||
VAO ->
|
||||
IO FullShader'
|
||||
IO FullShader
|
||||
makeShaderUsingVAO s shaderlist pm theVAO = do
|
||||
prog <- makeSourcedShader s shaderlist
|
||||
return $
|
||||
FullShader'
|
||||
FullShader
|
||||
{ _shadProg' = prog
|
||||
, _shadVAO' = theVAO
|
||||
, _shadPrim' = pm
|
||||
@@ -95,12 +95,12 @@ makeShaderSized ::
|
||||
-- | Number of vertexes that can be poked
|
||||
Int ->
|
||||
EPrimitiveMode ->
|
||||
IO FullShader'
|
||||
IO FullShader
|
||||
makeShaderSized s shaderlist sizes ndraw pm = do
|
||||
prog <- makeSourcedShader s shaderlist
|
||||
vaob <- setupVAOSized ndraw sizes
|
||||
return $
|
||||
FullShader'
|
||||
FullShader
|
||||
{ _shadProg' = prog
|
||||
, _shadVAO' = vaob
|
||||
, _shadPrim' = pm
|
||||
|
||||
+3
-3
@@ -6,7 +6,7 @@ module Shader.Data
|
||||
, VBO (..)
|
||||
, EBO (..)
|
||||
-- , FullShader (..)
|
||||
, FullShader' (..)
|
||||
, FullShader (..)
|
||||
, ShaderTexture (..)
|
||||
, EPrimitiveMode (..)
|
||||
-- | Lens functions
|
||||
@@ -35,7 +35,7 @@ import Graphics.GL.Core43
|
||||
import Foreign
|
||||
import Control.Lens
|
||||
{- | Datatype containing the necessary information for a single shader. -}
|
||||
data FullShader' = FullShader'
|
||||
data FullShader = FullShader
|
||||
{ _shadProg' :: GLuint -- should be shaderID
|
||||
, _shadVAO' :: VAO
|
||||
, _shadPrim' :: EPrimitiveMode
|
||||
@@ -87,5 +87,5 @@ geom' = GL_GEOMETRY_SHADER
|
||||
frag' = GL_FRAGMENT_SHADER
|
||||
makeLenses ''VAO
|
||||
makeLenses ''VBO
|
||||
makeLenses ''FullShader'
|
||||
makeLenses ''FullShader
|
||||
makeLenses ''EBO
|
||||
|
||||
+4
-4
@@ -25,14 +25,14 @@ import Control.Monad.Primitive
|
||||
--import qualified Control.Monad.Parallel as MP
|
||||
|
||||
pokeVerxs
|
||||
:: MV.MVector (PrimState IO) FullShader'
|
||||
:: MV.MVector (PrimState IO) FullShader
|
||||
-> UMV.MVector (PrimState IO) Int
|
||||
-> Picture
|
||||
-> IO ()
|
||||
--pokeVerxs vbos count = S.mapM_ (pokeVerx vbos count) . S.each
|
||||
pokeVerxs vbos count = VFSM.mapM_ (pokeVerx vbos count) . VFSM.fromList
|
||||
|
||||
pokeVerx :: MV.MVector (PrimState IO) FullShader' -> UMV.MVector (PrimState IO) Int -> Verx -> IO ()
|
||||
pokeVerx :: MV.MVector (PrimState IO) FullShader -> UMV.MVector (PrimState IO) Int -> Verx -> IO ()
|
||||
pokeVerx vbos offsets Verx{_vxPos=thePos,_vxCol=theCol,_vxExt=ext,_vxShadNum=theShadNum} = do
|
||||
typeOff <- UMV.unsafeRead offsets sn
|
||||
basePtr <- _vboPtr . _vaoVBO . _shadVAO' <$> MV.unsafeRead vbos sn
|
||||
@@ -183,14 +183,14 @@ pokeJustV ptr nv sh = do
|
||||
V4 d e f g = _svCol sh
|
||||
|
||||
pokeLayVerxs
|
||||
:: MV.MVector (PrimState IO) FullShader'
|
||||
:: MV.MVector (PrimState IO) FullShader
|
||||
-> UMV.MVector (PrimState IO) Int
|
||||
-> Picture
|
||||
-> IO ()
|
||||
--pokeLayVerxs vbos counts = S.mapM_ (pokeLayVerx vbos counts) . S.each
|
||||
pokeLayVerxs vbos counts = VFSM.mapM_ (pokeLayVerx vbos counts) . VFSM.fromList
|
||||
|
||||
pokeLayVerx :: MV.MVector (PrimState IO) FullShader' -> UMV.MVector (PrimState IO) Int -> Verx -> IO ()
|
||||
pokeLayVerx :: MV.MVector (PrimState IO) FullShader -> UMV.MVector (PrimState IO) Int -> Verx -> IO ()
|
||||
--{-# INLINE pokeLayVerx #-}
|
||||
pokeLayVerx vbos counts vx = do
|
||||
theOff <- UMV.unsafeRead counts vecPos
|
||||
|
||||
Reference in New Issue
Block a user