diff --git a/src/Data/Preload/Render.hs b/src/Data/Preload/Render.hs index 2a2aa24b0..f6da9b3f3 100644 --- a/src/Data/Preload/Render.hs +++ b/src/Data/Preload/Render.hs @@ -49,7 +49,7 @@ data RenderData = RenderData , _wallVBO :: VBO , _cloudVBO :: VBO , _cloudShader :: GLuint - , _dummyVAO :: VAO + , _dummyVAO :: GLuint } makeLenses ''RenderData diff --git a/src/Dodge/Menu/OptionType.hs b/src/Dodge/Menu/OptionType.hs index a02e5ef81..5842c1fab 100644 --- a/src/Dodge/Menu/OptionType.hs +++ b/src/Dodge/Menu/OptionType.hs @@ -1,5 +1,9 @@ {-# OPTIONS -fno-warn-missing-signatures #-} -module Dodge.Menu.OptionType where +module Dodge.Menu.OptionType ( + boolOption, + enumOption, + makeSubmenuOption, +) where import Control.Lens import Dodge.Data.Universe diff --git a/src/Dodge/Render.hs b/src/Dodge/Render.hs index 7a48c0b9b..d76a9ab63 100644 --- a/src/Dodge/Render.hs +++ b/src/Dodge/Render.hs @@ -121,7 +121,7 @@ doDrawing' win pdata u = do glEnable GL_CULL_FACE unless (debugOn Remove_LOS cfig) $ do glUseProgram (pdata ^. ceilingStencilShader) - glBindVertexArray $ pdata ^. dummyVAO . vaoName + glBindVertexArray $ pdata ^. dummyVAO glEnable GL_DEPTH_CLAMP glDrawArrays GL_TRIANGLES 0 (fromIntegral (trueNWalls * 6)) glDisable GL_DEPTH_CLAMP @@ -311,7 +311,7 @@ doDrawing' win pdata u = do glEnable GL_BLEND glBlendFunc GL_SRC_ALPHA GL_ONE glUseProgram $ pdata ^. windowPullShader - glBindVertexArray $ pdata ^. dummyVAO . vaoName + glBindVertexArray $ pdata ^. dummyVAO glDrawArrays GL_TRIANGLES 0 (fromIntegral nWins * 6) glDisable GL_DEPTH_CLAMP glDisable GL_CULL_FACE diff --git a/src/Preload/Render.hs b/src/Preload/Render.hs index 1b03b9dc6..2fc5191fe 100644 --- a/src/Preload/Render.hs +++ b/src/Preload/Render.hs @@ -206,7 +206,7 @@ preloadRender = do , _cloudVBO = cloudvbo , _cloudShader = cloudshader -- , _screenTextureVAO = screentexturevao - , _dummyVAO = VAO dummyvao + , _dummyVAO = dummyvao } --------------------end preloadRender diff --git a/src/Render.hs b/src/Render.hs index 4f1e4b634..26e727abc 100644 --- a/src/Render.hs +++ b/src/Render.hs @@ -174,7 +174,7 @@ renderShadows cam cfig shadrendertype nWalls nSils nCaps positiontexture normalt glDisable GL_CULL_FACE -- the first bit has been used to stencil out "ceilings" under which we never draw glStencilFunc GL_NOTEQUAL 128 255 - glBindVertexArray $ pdata ^. dummyVAO . vaoName + glBindVertexArray $ pdata ^. dummyVAO --draw wall shadows glUseProgram shadwall glDrawArrays GL_TRIANGLES 0 (nWalls * 18) diff --git a/src/Shader.hs b/src/Shader.hs index df77361ee..6d23517ae 100644 --- a/src/Shader.hs +++ b/src/Shader.hs @@ -1,5 +1,4 @@ module Shader ( - freeShaderPointers', drawShaderLay, shadVBOptr, drawShader, @@ -18,7 +17,7 @@ drawShaderLay :: Int -> UMV.MVector (PrimState IO) Int -> Int -> (Shader, VBO) - drawShaderLay l countsVector shadIn fs = do i <- UMV.read countsVector shadIn glUseProgram (_shaderUINT $ fst fs) - glBindVertexArray $ fs ^. _1 . shaderVAO . vaoName + glBindVertexArray $ fs ^. _1 . shaderVAO . unVAO glDrawArrays (_unPrimitiveMode $ _shaderPrimitive $ fst fs) (fromIntegral $ l * numSubElements) @@ -28,15 +27,12 @@ drawShader :: Shader -> Int -> IO () {-# INLINE drawShader #-} drawShader fs i = do glUseProgram (_shaderUINT fs) - glBindVertexArray $ fs ^. shaderVAO . vaoName + glBindVertexArray $ fs ^. shaderVAO . unVAO glDrawArrays (_unPrimitiveMode $ _shaderPrimitive fs) 0 (fromIntegral i) -freeShaderPointers' :: (Shader, VBO) -> IO () -freeShaderPointers' = free . _vboPtr . snd - shadVBOptr :: (Shader, VBO) -> Ptr Float {-# INLINE shadVBOptr #-} shadVBOptr = _vboPtr . snd diff --git a/src/Shader/Compile.hs b/src/Shader/Compile.hs index c546419e1..215f6f402 100644 --- a/src/Shader/Compile.hs +++ b/src/Shader/Compile.hs @@ -1,16 +1,13 @@ module Shader.Compile ( - setupVBO, - setupVBOStatic, - makeShaderEBO, +-- makeShaderEBO, makeShaderVBO, - makeShaderUsingVBO, +-- makeShaderUsingVBO, makeShaderProgram, --- makeByteStringShaderUsingVAO, - makeShaderUsingVAO, - setupVAOUsingVBO, - setupEBO, +-- makeShaderUsingVAO, +-- setupVAOUsingVBO, +-- setupEBO, toFloatVAs, - setupStaticVBOVAO, +-- setupStaticVBOVAO, makeSourcedShader, ) where @@ -20,7 +17,6 @@ import qualified Data.ByteString as BS import qualified Data.ByteString.Unsafe as BU import Foreign import Foreign.C.String -import Foreign.C.Types import GLHelp import Graphics.GL.Core45 import Graphics.GL.Types @@ -52,36 +48,6 @@ makeShaderVBO s shaderlist sizes pm = do , vbo ) -makeShaderEBO :: - -- | First part of the name of the shader - String -> - -- | shader types - [GLenum] -> - -- | The input vertex sizes - [VertexAttribute] -> - PrimitiveMode -> - VBO -> - IO (Shader, UintBO) -makeShaderEBO s shaderlist sizes pm vbo = do - shad <- makeShaderUsingVBO s shaderlist sizes pm vbo - ebo <- setupEBO (shad ^. shaderVAO) - glVertexArrayElementBuffer (shad ^. shaderVAO . vaoName) (ebo ^. uiboName) - return (shad, ebo) - -makeShaderUsingVBO :: - -- | First part of the name of the shader - String -> - -- | shader types - [GLenum] -> - -- | The input vertex sizes - [VertexAttribute] -> - PrimitiveMode -> - VBO -> - IO Shader -makeShaderUsingVBO s shaderlist sizes pm vbo = do - vao <- setupVAOUsingVBO sizes vbo - makeShaderUsingVAO s shaderlist pm vao - setupVBO :: Int -> IO VBO setupVBO vertexsize = do vboname <- mglCreate glCreateBuffers @@ -98,58 +64,6 @@ setupVBO vertexsize = do GL_DYNAMIC_STORAGE_BIT return VBO{_vboName = vboname, _vboPtr = thePtr, _vboVertexBytes = vertexsize} --- the input ptr is assumed to contain the correct amount of data according to --- the specified number and type of vertices --- note the VBO here does not have a sensible ptr value -setupStaticVBOVAO :: Storable a => [VertexAttribute] -> [a] -> IO (VBO, VAO) -setupStaticVBOVAO vas vdata = withArrayLen vdata $ \i ptr -> do - vboname <- mglCreate glCreateBuffers - glNamedBufferStorage - vboname - (CPtrdiff (fromIntegral (i * sizeOf (head vdata)))) - ptr - 0 - let vbo = - VBO - { _vboName = vboname - , _vboPtr = nullPtr - , _vboVertexBytes = vasTightStride vas - } - vao <- setupVAOUsingVBO vas vbo - return (vbo, vao) - -setupVBOStatic :: Int -> IO VBO -setupVBOStatic vertexsize = do - vboname <- mglCreate glCreateBuffers - thePtr <- mallocBytes (vertexsize * numDrawableVertices) - -- Allocate space - --glNamedBufferData - glNamedBufferStorage - vboname - (fromIntegral $ numDrawableVertices * vertexsize) - nullPtr - GL_DYNAMIC_STORAGE_BIT - --GL_STATIC_DRAW - return VBO{_vboName = vboname, _vboPtr = thePtr, _vboVertexBytes = vertexsize} - --- | Takes the VAO from elsewhere -makeShaderUsingVAO :: - -- | First part of the name of the shader - String -> - -- | shader types - [GLenum] -> - PrimitiveMode -> - VAO -> - IO Shader -makeShaderUsingVAO s shaderlist pm theVAO = do - prog <- makeSourcedShader s shaderlist - return - Shader - { _shaderUINT = prog - , _shaderVAO = theVAO - , _shaderPrimitive = pm - } - {- | Compile shader and get its uniform locations. supposes the shader code is in the shader folder, with the string names followed by .vert/.geom/.frag. @@ -176,26 +90,13 @@ setupVAOUsingVBO vas vbo = do vaoname vas (fromIntegral strd) - return VAO{_vaoName = vaoname} - -setupEBO :: VAO -> IO UintBO -setupEBO vao = do - eboptr <- mallocArray 65536 -- so we can go back to glushort... - eboname <- mglCreate glCreateBuffers - glNamedBufferStorage - eboname - (fromIntegral $ gluintSize * 65536) - nullPtr - GL_DYNAMIC_STORAGE_BIT - glVertexArrayElementBuffer (vao ^. vaoName) eboname - return $ UintBO eboname eboptr + return $ VAO vaoname setupVBOVAO :: [VertexAttribute] -> IO (VAO, VBO) setupVBOVAO vas = do vaoname <- mglCreate glCreateVertexArrays glBindVertexArray vaoname vbo <- setupVBO strd - --vao <- setupVAOvbo (toFloatVAs sizes) (sum sizes) (vbo ^. vboName) vao <- setupVAOUsingVBO vas vbo return (vao, vbo) where diff --git a/src/Shader/Data.hs b/src/Shader/Data.hs index b74d19e07..e145db6ff 100644 --- a/src/Shader/Data.hs +++ b/src/Shader/Data.hs @@ -61,7 +61,7 @@ newtype TO = TO {_unTO :: GLuint} {- | Vertex array object: contains the reference to the object, and its buffer targets. -} -newtype VAO = VAO { _vaoName :: GLuint } +newtype VAO = VAO { _unVAO :: GLuint } data VertexAttribute = VertexAttribute { _vaCount :: GLint diff --git a/src/Shader/Poke/Cloud.hs b/src/Shader/Poke/Cloud.hs index 6a4acede2..da5db1243 100644 --- a/src/Shader/Poke/Cloud.hs +++ b/src/Shader/Poke/Cloud.hs @@ -5,7 +5,6 @@ module Shader.Poke.Cloud (pokeCloud, pokeDust) where import Shader.Parameters import Color import Control.Lens ---import qualified Data.Vector.Unboxed as UV import Dodge.Data.Cloud import Dodge.Material.Color import Foreign