Refactor shader code

This commit is contained in:
2023-03-20 11:18:53 +00:00
parent 32ecf46343
commit f4038fde46
4 changed files with 48 additions and 4 deletions
+1
View File
@@ -10,4 +10,5 @@ void main() {
if ( d > 1) { discard; } if ( d > 1) { discard; }
fCol = mix (gColE , gColC, d); fCol = mix (gColE , gColC, d);
fPos = vec4(gPos,1); fPos = vec4(gPos,1);
} }
+4
View File
@@ -169,6 +169,10 @@ preloadRender = do
floorshader <- makeShader4 "floor/arrayPos" [vert, frag] [4,4] floorverxstrd ETriangles floorvbo floorshader <- makeShader4 "floor/arrayPos" [vert, frag] [4,4] floorverxstrd ETriangles floorvbo
tonormalmap <- initTexture2DArray 3 GL_LINEAR_MIPMAP_LINEAR GL_LINEAR "data/normalMaps/normalArray.png" tonormalmap <- initTexture2DArray 3 GL_LINEAR_MIPMAP_LINEAR GL_LINEAR "data/normalMaps/normalArray.png"
todiffusemap <- initTexture2DArray 3 GL_LINEAR_MIPMAP_LINEAR GL_LINEAR "data/normalMaps/diffuseArray.png" todiffusemap <- initTexture2DArray 3 GL_LINEAR_MIPMAP_LINEAR GL_LINEAR "data/normalMaps/diffuseArray.png"
-- let cloudverxstrd = 16
-- cloudvbo <- setupVBO' cloudverxstrd
-- cloudshader <- makeShader4 "floor/arrayPos" [vert, frag] [4,4,4,4] cloudverxstrd ETriangles floorvbo
-- bind fixed vertex data -- bind fixed vertex data
bufferPokedVBO (snd fsShad) 4 bufferPokedVBO (snd fsShad) 4
framebuf2 <- setupTextureFramebuffer 800 600 framebuf2 <- setupTextureFramebuffer 800 600
+35
View File
@@ -1,6 +1,7 @@
module Shader.Compile ( module Shader.Compile (
setupVBO, setupVBO,
setupVBO', setupVBO',
makeShaderVAOEBO,
makeShader, makeShader,
makeShader4, makeShader4,
makeByteStringShaderUsingVAO, makeByteStringShaderUsingVAO,
@@ -46,6 +47,28 @@ makeShader s shaderlist sizes pm = do
} }
, vbo) , vbo)
makeShaderVAOEBO ::
-- | First part of the name of the shader
String ->
-- | shader types
[GLenum] ->
-- | The input vertex sizes
[Int] ->
-- | The stride
Int ->
GLenum ->
VBO ->
IO (Shader, VAO, EBO)
makeShaderVAOEBO s shaderlist sizes strd pm vbo = do
prog <- makeSourcedShader s shaderlist
vao <- setupVAOvbo sizes strd vbo
ebo <- setupEBO vao
return
( Shader prog pm
, vao
, ebo
)
makeShader4 :: makeShader4 ::
-- | First part of the name of the shader -- | First part of the name of the shader
String -> String ->
@@ -181,6 +204,18 @@ setupVAOvbo sizes strd vbo = do
{ _vaoName = vaoname { _vaoName = vaoname
} }
setupEBO :: VAO -> IO EBO
setupEBO vao = do
eboptr <- mallocArray numDrawableElements
eboname <- mglCreate glCreateBuffers
glNamedBufferData
eboname
( fromIntegral $ glushortSize * numDrawableElements)
nullPtr
GL_STREAM_DRAW
glVertexArrayElementBuffer (vao ^. vaoName) eboname
return $ EBO eboname eboptr
setupVAOSized :: Int -> [Int] -> IO (VAO,VBO) setupVAOSized :: Int -> [Int] -> IO (VAO,VBO)
setupVAOSized ndraw sizes = do setupVAOSized ndraw sizes = do
vaoname <- mglCreate glCreateVertexArrays vaoname <- mglCreate glCreateVertexArrays
+8 -4
View File
@@ -5,15 +5,14 @@ module Shader.Data
( VAO (..) ( VAO (..)
, VBO (..) , VBO (..)
, EBO (..) , EBO (..)
-- , FullShader (..) , Shader (..)
, FullShader (..) , FullShader (..)
, ShaderTexture (..) , ShaderTexture (..)
, EPrimitiveMode (..) , EPrimitiveMode (..)
-- | Lens functions -- | Lens functions
, vaoName , vaoName
-- , vaoVBO , shaderUINT
-- , vaoAttribSizes , shaderPrimitive
-- , vaoStride
, textureObject , textureObject
@@ -43,6 +42,10 @@ data FullShader = FullShader
, _shadPrim' :: EPrimitiveMode , _shadPrim' :: EPrimitiveMode
, _shadTex' :: Maybe ShaderTexture , _shadTex' :: Maybe ShaderTexture
} }
data Shader = Shader
{ _shaderUINT :: GLuint -- should be shaderID
, _shaderPrimitive :: GLenum
}
{- | Vertex array object: contains the reference to the object, {- | Vertex array object: contains the reference to the object,
and its buffer targets. -} and its buffer targets. -}
newtype VAO = VAO newtype VAO = VAO
@@ -90,3 +93,4 @@ makeLenses ''VBO
makeLenses ''FullShader makeLenses ''FullShader
makeLenses ''EBO makeLenses ''EBO
makeLenses ''ShaderTexture makeLenses ''ShaderTexture
makeLenses ''Shader