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