Cleanup shader code
This commit is contained in:
+2
-2
@@ -91,10 +91,10 @@ doDrawing' win pdata u = do
|
|||||||
uncurry (zipWithM_ bufferPokedVBO) $
|
uncurry (zipWithM_ bufferPokedVBO) $
|
||||||
unzip
|
unzip
|
||||||
[ (pdata ^. vboWalls, nWalls)
|
[ (pdata ^. vboWalls, nWalls)
|
||||||
, (_vboShapes pdata, nShapeVs)
|
|
||||||
, (pdata ^. vboWindows, nWins)
|
, (pdata ^. vboWindows, nWins)
|
||||||
, (snd $ _textureArrayShader pdata, nFls)
|
, (snd $ _textureArrayShader pdata, nFls)
|
||||||
]
|
]
|
||||||
|
bufferPokedVBO (_vboShapes pdata) nShapeVs
|
||||||
glNamedBufferSubData
|
glNamedBufferSubData
|
||||||
(_eboName $ _shapeEBO pdata)
|
(_eboName $ _shapeEBO pdata)
|
||||||
0
|
0
|
||||||
@@ -136,7 +136,7 @@ doDrawing' win pdata u = do
|
|||||||
renderLayer BottomLayer shadV layerCounts
|
renderLayer BottomLayer shadV layerCounts
|
||||||
--draw object shapes onto base buffer
|
--draw object shapes onto base buffer
|
||||||
let fs = _shapeShader pdata
|
let fs = _shapeShader pdata
|
||||||
glUseProgram (_shadName $ fs)
|
glUseProgram (_shadName fs)
|
||||||
glBindVertexArray $ fs ^. shadVAO . vaoName
|
glBindVertexArray $ fs ^. shadVAO . vaoName
|
||||||
glDrawElements
|
glDrawElements
|
||||||
(marshalEPrimitiveMode $ _shadPrim' $ fs)
|
(marshalEPrimitiveMode $ _shadPrim' $ fs)
|
||||||
|
|||||||
+14
-9
@@ -52,13 +52,15 @@ preloadRender = do
|
|||||||
-- bindVertexArrayObject $= Just wpVAOname
|
-- bindVertexArrayObject $= Just wpVAOname
|
||||||
wpVAOname <- mglCreate glCreateVertexArrays
|
wpVAOname <- mglCreate glCreateVertexArrays
|
||||||
glBindVertexArray wpVAOname
|
glBindVertexArray wpVAOname
|
||||||
setupVertexAttribPointer wpVAOname wpVBOname 0 4 8 0
|
glVertexArrayVertexBuffer wpVAOname 0 wpVBOname 0 (fromIntegral $ floatSize * 8)
|
||||||
|
setupVertexAttribPointer wpVAOname 0 4 0
|
||||||
--wpColVAOname <- genObjectName
|
--wpColVAOname <- genObjectName
|
||||||
--bindVertexArrayObject $= Just wpColVAOname
|
--bindVertexArrayObject $= Just wpColVAOname
|
||||||
wpColVAOname <- mglCreate glCreateVertexArrays
|
wpColVAOname <- mglCreate glCreateVertexArrays
|
||||||
glBindVertexArray wpColVAOname
|
glBindVertexArray wpColVAOname
|
||||||
setupVertexAttribPointer wpColVAOname wpVBOname 0 4 8 0
|
glVertexArrayVertexBuffer wpColVAOname 0 wpVBOname 0 (fromIntegral $ floatSize * 8)
|
||||||
setupVertexAttribPointer wpColVAOname wpVBOname 1 4 8 4
|
setupVertexAttribPointer wpColVAOname 0 4 0
|
||||||
|
setupVertexAttribPointer wpColVAOname 1 4 4
|
||||||
let wpVAO = VAO{_vaoName = wpVAOname, _vaoAttribSizes = [4], _vaoStride = 8}
|
let wpVAO = VAO{_vaoName = wpVAOname, _vaoAttribSizes = [4], _vaoStride = 8}
|
||||||
wpColVAO = VAO{_vaoName = wpColVAOname, _vaoAttribSizes = [4,4], _vaoStride = 8}
|
wpColVAO = VAO{_vaoName = wpColVAOname, _vaoAttribSizes = [4,4], _vaoStride = 8}
|
||||||
-- setup window points VBO, VAOs and shaders
|
-- setup window points VBO, VAOs and shaders
|
||||||
@@ -73,8 +75,9 @@ preloadRender = do
|
|||||||
--bindVertexArrayObject $= Just winColVAOname
|
--bindVertexArrayObject $= Just winColVAOname
|
||||||
winColVAOname <- mglCreate glCreateVertexArrays
|
winColVAOname <- mglCreate glCreateVertexArrays
|
||||||
glBindVertexArray winColVAOname
|
glBindVertexArray winColVAOname
|
||||||
setupVertexAttribPointer winColVAOname winVBOname 0 4 8 0
|
glVertexArrayVertexBuffer winColVAOname 0 winVBOname 0 (fromIntegral $ floatSize * 8)
|
||||||
setupVertexAttribPointer winColVAOname winVBOname 1 4 8 4
|
setupVertexAttribPointer winColVAOname 0 4 0
|
||||||
|
setupVertexAttribPointer winColVAOname 1 4 4
|
||||||
let winColVAO = VAO
|
let winColVAO = VAO
|
||||||
{_vaoName = winColVAOname, _vaoAttribSizes = [4,4], _vaoStride = 8}
|
{_vaoName = winColVAOname, _vaoAttribSizes = [4,4], _vaoStride = 8}
|
||||||
-- setup shape geometry/cap VBO and two VAOs
|
-- setup shape geometry/cap VBO and two VAOs
|
||||||
@@ -86,7 +89,7 @@ preloadRender = do
|
|||||||
nullPtr
|
nullPtr
|
||||||
GL_STREAM_DRAW
|
GL_STREAM_DRAW
|
||||||
let shEBO = EBO{_eboName = shEBOname, _eboPtr = shEBOptr}
|
let shEBO = EBO{_eboName = shEBOname, _eboPtr = shEBOptr}
|
||||||
shVBO <- trueSetupVBO 8
|
shVBO <- setupVBO4 8
|
||||||
-- shPosColVAOname <- mglCreate glCreateVertexArrays
|
-- shPosColVAOname <- mglCreate glCreateVertexArrays
|
||||||
-- glBindVertexArray shPosColVAOname
|
-- glBindVertexArray shPosColVAOname
|
||||||
-- setupVertexAttribPointer shPosColVAOname (shVBO ^. vboName) 0 3 7 0
|
-- setupVertexAttribPointer shPosColVAOname (shVBO ^. vboName) 0 3 7 0
|
||||||
@@ -97,7 +100,8 @@ preloadRender = do
|
|||||||
--bindVertexArrayObject $= Just shPosVAOname
|
--bindVertexArrayObject $= Just shPosVAOname
|
||||||
shPosVAOname <- mglCreate glCreateVertexArrays
|
shPosVAOname <- mglCreate glCreateVertexArrays
|
||||||
glBindVertexArray shPosVAOname
|
glBindVertexArray shPosVAOname
|
||||||
setupVertexAttribPointer shPosVAOname (shVBO ^. vboName) 0 4 8 0
|
glVertexArrayVertexBuffer shPosVAOname 0 (shVBO ^. vboName) 0 (fromIntegral $ floatSize * 8)
|
||||||
|
setupVertexAttribPointer shPosVAOname 0 4 0
|
||||||
--bindBuffer ElementArrayBuffer $= Just shEBOname
|
--bindBuffer ElementArrayBuffer $= Just shEBOname
|
||||||
glVertexArrayElementBuffer shPosVAOname shEBOname
|
glVertexArrayElementBuffer shPosVAOname shEBOname
|
||||||
let --shPosColVAO = VAO
|
let --shPosColVAO = VAO
|
||||||
@@ -108,7 +112,8 @@ preloadRender = do
|
|||||||
--bindVertexArrayObject $= Just shEdgeVAOname
|
--bindVertexArrayObject $= Just shEdgeVAOname
|
||||||
shEdgeVAOname <- mglCreate glCreateVertexArrays
|
shEdgeVAOname <- mglCreate glCreateVertexArrays
|
||||||
glBindVertexArray shEdgeVAOname
|
glBindVertexArray shEdgeVAOname
|
||||||
setupVertexAttribPointer shEdgeVAOname (shVBO ^. vboName) 0 4 8 0
|
glVertexArrayVertexBuffer shEdgeVAOname 0 (shVBO ^. vboName) 0 (fromIntegral $ floatSize * 8)
|
||||||
|
setupVertexAttribPointer shEdgeVAOname 0 4 0
|
||||||
--setup ebo for silhouette edges
|
--setup ebo for silhouette edges
|
||||||
silEBOname <- mglCreate glCreateBuffers
|
silEBOname <- mglCreate glCreateBuffers
|
||||||
silEBOptr <- mallocArray numDrawableElements
|
silEBOptr <- mallocArray numDrawableElements
|
||||||
@@ -150,7 +155,7 @@ preloadRender = do
|
|||||||
positionalBlankShad <- makeShader "positional/blank" [vert, frag] [3] ETriangles
|
positionalBlankShad <- makeShader "positional/blank" [vert, frag] [3] ETriangles
|
||||||
-- 2D draw shaders
|
-- 2D draw shaders
|
||||||
bslist <- makeShader "dualTwoD/basic" [vert, frag] [3, 4] ETriangles
|
bslist <- makeShader "dualTwoD/basic" [vert, frag] [3, 4] ETriangles
|
||||||
bslista <- makeShader' "shape/basic" [vert, frag] [4, 4] ETriangles shVBO
|
bslista <- makeShader4 "shape/basic" [vert, frag] [4, 4] ETriangles shVBO
|
||||||
glVertexArrayElementBuffer (bslista ^. shadVAO . vaoName) shEBOname
|
glVertexArrayElementBuffer (bslista ^. shadVAO . vaoName) shEBOname
|
||||||
aslist <- makeShader "dualTwoD/arc" [vert, frag] [3, 4, 3] ETriangles
|
aslist <- makeShader "dualTwoD/arc" [vert, frag] [3, 4, 3] ETriangles
|
||||||
eslist <- makeShader "dualTwoD/ellipse" [vert, geom, frag] [3, 4] ETriangles
|
eslist <- makeShader "dualTwoD/ellipse" [vert, geom, frag] [3, 4] ETriangles
|
||||||
|
|||||||
+12
-16
@@ -1,7 +1,7 @@
|
|||||||
module Shader.Compile (
|
module Shader.Compile (
|
||||||
trueSetupVBO,
|
setupVBO4,
|
||||||
makeShader,
|
makeShader,
|
||||||
makeShader',
|
makeShader4,
|
||||||
makeByteStringShaderUsingVAO,
|
makeByteStringShaderUsingVAO,
|
||||||
makeShaderSized,
|
makeShaderSized,
|
||||||
makeShaderUsingVAO,
|
makeShaderUsingVAO,
|
||||||
@@ -9,6 +9,7 @@ module Shader.Compile (
|
|||||||
setupVertexAttribPointer,
|
setupVertexAttribPointer,
|
||||||
) where
|
) where
|
||||||
|
|
||||||
|
import Control.Lens
|
||||||
import Control.Monad
|
import Control.Monad
|
||||||
import qualified Data.ByteString as BS
|
import qualified Data.ByteString as BS
|
||||||
import qualified Data.ByteString.Unsafe as BU
|
import qualified Data.ByteString.Unsafe as BU
|
||||||
@@ -45,7 +46,7 @@ makeShader s shaderlist sizes pm = do
|
|||||||
}
|
}
|
||||||
, vbo)
|
, vbo)
|
||||||
|
|
||||||
makeShader' ::
|
makeShader4 ::
|
||||||
-- | First part of the name of the shader
|
-- | First part of the name of the shader
|
||||||
String ->
|
String ->
|
||||||
-- | shader types
|
-- | shader types
|
||||||
@@ -55,7 +56,7 @@ makeShader' ::
|
|||||||
EPrimitiveMode ->
|
EPrimitiveMode ->
|
||||||
VBO ->
|
VBO ->
|
||||||
IO FullShader
|
IO FullShader
|
||||||
makeShader' s shaderlist sizes pm vbo = do
|
makeShader4 s shaderlist sizes pm vbo = do
|
||||||
prog <- makeSourcedShader s shaderlist
|
prog <- makeSourcedShader s shaderlist
|
||||||
vao <- setupVAOvbo sizes vbo
|
vao <- setupVAOvbo sizes vbo
|
||||||
return $ FullShader
|
return $ FullShader
|
||||||
@@ -66,8 +67,8 @@ makeShader' s shaderlist sizes pm vbo = do
|
|||||||
, _shadUnis' = mempty
|
, _shadUnis' = mempty
|
||||||
}
|
}
|
||||||
|
|
||||||
trueSetupVBO :: Int -> IO VBO
|
setupVBO4 :: Int -> IO VBO
|
||||||
trueSetupVBO vertexsize = do
|
setupVBO4 vertexsize = do
|
||||||
vboname <- mglCreate glCreateBuffers
|
vboname <- mglCreate glCreateBuffers
|
||||||
thePtr <- mallocArray (vertexsize * numDrawableElements)
|
thePtr <- mallocArray (vertexsize * numDrawableElements)
|
||||||
-- Allocate space
|
-- Allocate space
|
||||||
@@ -190,8 +191,9 @@ setupVBOSized ndraw vao sizes = do
|
|||||||
--vboName <- genObjectName
|
--vboName <- genObjectName
|
||||||
--bindBuffer ArrayBuffer $= Just vboName
|
--bindBuffer ArrayBuffer $= Just vboName
|
||||||
vboname <- mglCreate glCreateBuffers
|
vboname <- mglCreate glCreateBuffers
|
||||||
|
glVertexArrayVertexBuffer vao 0 vboname 0 (fromIntegral $ floatSize * strd)
|
||||||
forM_ (zip3 [0 ..] sizes offs) $ \(loc, siz, off) -> do
|
forM_ (zip3 [0 ..] sizes offs) $ \(loc, siz, off) -> do
|
||||||
setupVertexAttribPointer vao vboname loc siz strd off
|
setupVertexAttribPointer vao loc siz off
|
||||||
thePtr <- mallocArray (strd * ndraw)
|
thePtr <- mallocArray (strd * ndraw)
|
||||||
-- Allocate space
|
-- Allocate space
|
||||||
glNamedBufferData vboname
|
glNamedBufferData vboname
|
||||||
@@ -210,9 +212,9 @@ setupVBOSized ndraw vao sizes = do
|
|||||||
|
|
||||||
setupVertexAttribs :: VBO -> GLuint -> [Int] -> IO ()
|
setupVertexAttribs :: VBO -> GLuint -> [Int] -> IO ()
|
||||||
setupVertexAttribs vbo vao sizes = do
|
setupVertexAttribs vbo vao sizes = do
|
||||||
let vboname = _vboName vbo
|
glVertexArrayVertexBuffer vao 0 (vbo ^. vboName) 0 (fromIntegral $ floatSize * strd)
|
||||||
forM_ (zip3 [0 ..] sizes offs) $ \(loc, siz, off) -> do
|
forM_ (zip3 [0 ..] sizes offs) $ \(loc, siz, off) -> do
|
||||||
setupVertexAttribPointer vao vboname loc siz strd off
|
setupVertexAttribPointer vao loc siz off
|
||||||
where
|
where
|
||||||
strd = sum sizes
|
strd = sum sizes
|
||||||
offs = scanl (+) 0 sizes
|
offs = scanl (+) 0 sizes
|
||||||
@@ -221,19 +223,13 @@ setupVertexAttribs vbo vao sizes = do
|
|||||||
setupVertexAttribPointer ::
|
setupVertexAttribPointer ::
|
||||||
GLuint ->
|
GLuint ->
|
||||||
-- | vao name
|
-- | vao name
|
||||||
GLuint ->
|
|
||||||
-- | vbo name
|
|
||||||
Int ->
|
Int ->
|
||||||
-- | Size
|
-- | Size
|
||||||
Int ->
|
Int ->
|
||||||
-- | Stride
|
|
||||||
Int ->
|
|
||||||
-- | Offset
|
-- | Offset
|
||||||
Int ->
|
Int ->
|
||||||
IO ()
|
IO ()
|
||||||
setupVertexAttribPointer vao vbo loc siz strd off = do
|
setupVertexAttribPointer vao loc siz off = do
|
||||||
glVertexArrayVertexBuffer vao 0 vbo 0 (fromIntegral $ floatSize * strd)
|
|
||||||
-- the above is probably duplicated: needs moving out of this function
|
|
||||||
glEnableVertexArrayAttrib vao loc'
|
glEnableVertexArrayAttrib vao loc'
|
||||||
glVertexArrayAttribFormat vao loc' siz' GL_FLOAT GL_FALSE (fromIntegral $ floatSize * off)
|
glVertexArrayAttribFormat vao loc' siz' GL_FLOAT GL_FALSE (fromIntegral $ floatSize * off)
|
||||||
glVertexArrayAttribBinding vao loc' 0
|
glVertexArrayAttribBinding vao loc' 0
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ module Shader.Data
|
|||||||
, vboName
|
, vboName
|
||||||
, vboPtr
|
, vboPtr
|
||||||
, vboVertexSize
|
, vboVertexSize
|
||||||
|
|
||||||
, eboName
|
, eboName
|
||||||
, eboPtr
|
, eboPtr
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user