From f4038fde46d6983e0e562073dca0dafca2c10949 Mon Sep 17 00:00:00 2001 From: justin Date: Mon, 20 Mar 2023 11:18:53 +0000 Subject: [PATCH] Refactor shader code --- shader/dualTwoD/ellipse.frag | 1 + src/Preload/Render.hs | 4 ++++ src/Shader/Compile.hs | 35 +++++++++++++++++++++++++++++++++++ src/Shader/Data.hs | 12 ++++++++---- 4 files changed, 48 insertions(+), 4 deletions(-) diff --git a/shader/dualTwoD/ellipse.frag b/shader/dualTwoD/ellipse.frag index 75d8ca49f..576a4c13c 100644 --- a/shader/dualTwoD/ellipse.frag +++ b/shader/dualTwoD/ellipse.frag @@ -10,4 +10,5 @@ void main() { if ( d > 1) { discard; } fCol = mix (gColE , gColC, d); fPos = vec4(gPos,1); + } diff --git a/src/Preload/Render.hs b/src/Preload/Render.hs index 27fc7e979..d4a10e4a9 100644 --- a/src/Preload/Render.hs +++ b/src/Preload/Render.hs @@ -169,6 +169,10 @@ preloadRender = do floorshader <- makeShader4 "floor/arrayPos" [vert, frag] [4,4] floorverxstrd ETriangles floorvbo 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" + +-- let cloudverxstrd = 16 +-- cloudvbo <- setupVBO' cloudverxstrd +-- cloudshader <- makeShader4 "floor/arrayPos" [vert, frag] [4,4,4,4] cloudverxstrd ETriangles floorvbo -- bind fixed vertex data bufferPokedVBO (snd fsShad) 4 framebuf2 <- setupTextureFramebuffer 800 600 diff --git a/src/Shader/Compile.hs b/src/Shader/Compile.hs index 99b458d87..af4d0911f 100644 --- a/src/Shader/Compile.hs +++ b/src/Shader/Compile.hs @@ -1,6 +1,7 @@ module Shader.Compile ( setupVBO, setupVBO', + makeShaderVAOEBO, makeShader, makeShader4, makeByteStringShaderUsingVAO, @@ -46,6 +47,28 @@ makeShader s shaderlist sizes pm = do } , 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 :: -- | First part of the name of the shader String -> @@ -181,6 +204,18 @@ setupVAOvbo sizes strd vbo = do { _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 ndraw sizes = do vaoname <- mglCreate glCreateVertexArrays diff --git a/src/Shader/Data.hs b/src/Shader/Data.hs index 31e4a9b46..5bedd2d37 100644 --- a/src/Shader/Data.hs +++ b/src/Shader/Data.hs @@ -5,15 +5,14 @@ module Shader.Data ( VAO (..) , VBO (..) , EBO (..) --- , FullShader (..) + , Shader (..) , FullShader (..) , ShaderTexture (..) , EPrimitiveMode (..) -- | Lens functions , vaoName --- , vaoVBO --- , vaoAttribSizes --- , vaoStride + , shaderUINT + , shaderPrimitive , textureObject @@ -43,6 +42,10 @@ data FullShader = FullShader , _shadPrim' :: EPrimitiveMode , _shadTex' :: Maybe ShaderTexture } +data Shader = Shader + { _shaderUINT :: GLuint -- should be shaderID + , _shaderPrimitive :: GLenum + } {- | Vertex array object: contains the reference to the object, and its buffer targets. -} newtype VAO = VAO @@ -90,3 +93,4 @@ makeLenses ''VBO makeLenses ''FullShader makeLenses ''EBO makeLenses ''ShaderTexture +makeLenses ''Shader