From c2360a5f0feeb82827ce83a216adc705d1d07cf6 Mon Sep 17 00:00:00 2001 From: jgk Date: Fri, 11 Jun 2021 21:04:42 +0200 Subject: [PATCH] Tweak vbo --- src/Picture/Preload.hs | 30 +++++++++++++++--------------- src/Shader.hs | 17 +++++++++-------- 2 files changed, 24 insertions(+), 23 deletions(-) diff --git a/src/Picture/Preload.hs b/src/Picture/Preload.hs index 32597021a..dcc0a5262 100644 --- a/src/Picture/Preload.hs +++ b/src/Picture/Preload.hs @@ -38,39 +38,39 @@ makeLenses ''RenderData preloadRender :: IO RenderData preloadRender = do -- lighting shaders - lightningFloorShad <- makeShader "lighting/floor" [vert,geom,frag] [(0,4)] Points + lightningFloorShad <- makeShader "lighting/floor" [vert,geom,frag] [4] Points (return . return . flat4 . _unRender1111) - wsShad <- makeShader "lighting/occlude" [vert,geom,frag] [(0,4)] Points pokeWPStrat + wsShad <- makeShader "lighting/occlude" [vert,geom,frag] [4] Points pokeWPStrat >>= addUniforms ["lightPos"] wlLightShad - <- makeShader "lighting/wall" [vert,geom,frag] [(0,4)] Points pokeWPStrat + <- makeShader "lighting/wall" [vert,geom,frag] [4] Points pokeWPStrat >>= addUniforms ["lightPos","radLum"] -- 2D draw shaders - bslist <- makeShader "twoD/basic" [vert,frag] [(0,3),(1,4)] Triangles pokeTriStrat - lslist <- makeShader "twoD/basic" [vert,frag] [(0,3),(1,4)] Lines pokeLineStrat - aslist <- makeShader "twoD/arc" [vert,geom,frag] [(0,3),(1,4),(2,4)] Points pokeArcStrat - eslist <- makeShader "twoD/ellipse" [vert,geom,frag] [(0,3),(1,4)] Triangles pokeEllStrat + bslist <- makeShader "twoD/basic" [vert,frag] [3,4] Triangles pokeTriStrat + lslist <- makeShader "twoD/basic" [vert,frag] [3,4] Lines pokeLineStrat + aslist <- makeShader "twoD/arc" [vert,geom,frag] [3,4,4] Points pokeArcStrat + eslist <- makeShader "twoD/ellipse" [vert,geom,frag] [3,4] Triangles pokeEllStrat bezierQuadShader <- makeShader - "twoD/bezierQuad" [vert,frag] [(0,3),(1,4),(2,4)] TriangleStrip pokeBezQStrat + "twoD/bezierQuad" [vert,frag] [3,4,4] TriangleStrip pokeBezQStrat cslist <- makeShader "twoD/character" [vert,geom,frag] - [(0,3),(1,4),(2,3)] Points pokeCharStrat + [3,4,3] Points pokeCharStrat >>= addTexture "data/texture/charMap.png" -- texture shaders, no textures attached - fsShad <- makeShader "texture/simple" [vert,frag] [(0,2),(1,2)] TriangleStrip $ const + fsShad <- makeShader "texture/simple" [vert,frag] [2,2] TriangleStrip $ const [[[-1, 1],[0,1]] ,[[ 1, 1],[1,1]] ,[[-1,-1],[0,0]] ,[[ 1,-1],[1,0]] ] _ <- F.foldM (pokeShader fsShad) [RenderConst] -- fix fullscreen vertex positions now - boxBlurShad <- makeShader "texture/boxBlur" [vert,frag] [(0,2),(1,2)] TriangleStrip $ const + boxBlurShad <- makeShader "texture/boxBlur" [vert,frag] [2,2] TriangleStrip $ const [[[-1, 1],[0,1]] ,[[ 1, 1],[1,1]] ,[[-1,-1],[0,0]] ,[[ 1,-1],[1,0]] ] _ <- F.foldM (pokeShader boxBlurShad) [RenderConst] -- fix fullscreen vertex positions now - grayscaleShad <- makeShader "texture/grayscale" [vert,frag] [(0,2),(1,2)] TriangleStrip $ const + grayscaleShad <- makeShader "texture/grayscale" [vert,frag] [2,2] TriangleStrip $ const [[[-1, 1],[0,1]] ,[[ 1, 1],[1,1]] ,[[-1,-1],[0,0]] @@ -78,13 +78,13 @@ preloadRender = do ] _ <- F.foldM (pokeShader grayscaleShad) [RenderConst] -- fix fullscreen vertex positions now -- background shader - bgShad <- makeShader "background" [vert,geom,frag] [(0,4),(1,2)] Points pokeBGStrat + bgShad <- makeShader "background" [vert,geom,frag] [4,2] Points pokeBGStrat >>= addTexture "data/texture/marbleSlabs.png" -- >>= addTexture "data/texture/smudgedDirt.png" -- blank wallShader - wlBlank <- makeShader "wall/blank" [vert,geom,frag] [(0,4),(1,4)] Points pokeWPColStrat + wlBlank <- makeShader "wall/blank" [vert,geom,frag] [4,4] Points pokeWPColStrat -- textured wallShader - wlTexture <- makeShader "wall/texture" [vert,geom,frag] [(0,4),(1,4)] Points pokeWPColStrat + wlTexture <- makeShader "wall/texture" [vert,geom,frag] [4,4] Points pokeWPColStrat >>= addTexture "data/texture/grayscaleDirt.png" ---- texture shader diff --git a/src/Shader.hs b/src/Shader.hs index 6da190d70..e1f52ba92 100644 --- a/src/Shader.hs +++ b/src/Shader.hs @@ -117,13 +117,13 @@ The shader is made up of files begining with the inputted string with extensions makeShader :: String -- ^ First part of the name of the shader -> [ShaderType] -- ^ Filetype extensions - -> [(GLuint,Int)] -- ^ The shaders input vertices (location, size) + -> [Int] -- ^ The input vertex sizes -> PrimitiveMode -> (RenderType -> [[[Float]]]) -- ^ Poke strategy: method for creating a list of vertex data to be bound -> IO (FullShader) -makeShader s shaderlist alocs pm renStrat = do +makeShader s shaderlist sizes pm renStrat = do (prog,unis) <- makeSourcedShader s shaderlist - vaob <- setupVAO alocs + vaob <- setupVAO sizes return $ FullShader { _shaderProgram = prog , _shaderMatrixUniform = unis , _shaderVAO = vaob @@ -143,13 +143,13 @@ numDrawableElements :: Int {-# INLINE numDrawableElements #-} numDrawableElements = 50000 -setupVAO :: [(GLuint,Int)] -> IO VAO -setupVAO ps = do +setupVAO :: [Int] -> IO VAO +setupVAO sizes = do theVAO <- genObjectName bindVertexArrayObject $= Just theVAO - theVBO <- setupVBO $ map snd ps - vbos <- forM ps setupArrayBuffer - ptrs <- forM (zip vbos $ map snd ps) setupVBOPointers + theVBO <- setupVBO $ sizes + vbos <- forM (zip (map fromIntegral [(0::Int)..]) sizes) setupArrayBuffer + ptrs <- forM (zip vbos sizes) setupVBOPointers return $ VAO { _vao = theVAO , _vaoBufferTargets = ptrs @@ -182,6 +182,7 @@ setupVertexAttribPointer setupVertexAttribPointer loc siz strd off = do vertexAttribPointer (AttribLocation (fi loc)) $= (ToFloat, VertexArrayDescriptor (fi' siz) Float (fi'' $ floatSize * strd) (bufferOffset off)) + vertexAttribArray (AttribLocation (fi loc)) $= Enabled where fi = fromIntegral fi' = fromIntegral