diff --git a/src/Dodge/Config/Update.hs b/src/Dodge/Config/Update.hs index f202a3b9c..9b724af48 100644 --- a/src/Dodge/Config/Update.hs +++ b/src/Dodge/Config/Update.hs @@ -7,7 +7,7 @@ import Dodge.Data.SoundOrigin import Dodge.Config.Data import Sound import Data.Preload -import Preload.Update +import Framebuffer.Update import Data.Aeson (encodeFile) --import Control.Monad (when) diff --git a/src/Dodge/Event.hs b/src/Dodge/Event.hs index badd6c0eb..b66082796 100644 --- a/src/Dodge/Event.hs +++ b/src/Dodge/Event.hs @@ -23,7 +23,7 @@ import Dodge.SoundLogic import Dodge.Inventory import Dodge.Config.Data --import Geometry -import Preload.Update +import Framebuffer.Update import qualified IntMapHelp as IM import Control.Lens diff --git a/src/Dodge/Event/Menu.hs b/src/Dodge/Event/Menu.hs index 71447f30f..1709b1d03 100644 --- a/src/Dodge/Event/Menu.hs +++ b/src/Dodge/Event/Menu.hs @@ -10,7 +10,7 @@ import Dodge.SoundLogic import Dodge.Config.Data import Dodge.Config.Update import Dodge.Layout -import Preload.Update +import Framebuffer.Update import Dodge.Debug.Terminal import Data.Maybe diff --git a/src/Dodge/Render.hs b/src/Dodge/Render.hs index 3b5dac694..5f3ed5d41 100644 --- a/src/Dodge/Render.hs +++ b/src/Dodge/Render.hs @@ -115,7 +115,7 @@ doDrawing pdata w = do colorMask $= Color4 Enabled Enabled Enabled Enabled clearColor $= Color4 0 0 0 0 - blend $= Disabled + --blend $= Disabled depthMask $= Disabled depthFunc $= Just Always diff --git a/src/Preload/Render.hs b/src/Preload/Render.hs index 5bd457212..b475ddd4f 100644 --- a/src/Preload/Render.hs +++ b/src/Preload/Render.hs @@ -11,10 +11,11 @@ import Shader.Compile import Shader.AuxAddition import Shader.Parameters import Shader.Bind +import Framebuffer.Setup import Data.Preload.Render import Graphics.Rendering.OpenGL hiding (Point,translate,scale,imageHeight) -import Graphics.GL.Core43 +--import Graphics.GL.Core43 --import Control.Lens import Control.Monad import Foreign @@ -100,7 +101,7 @@ preloadRender = do rboLightingName <- genObjectName bindRenderbuffer Renderbuffer $= rboLightingName renderbufferStorage Renderbuffer Depth24Stencil8 (RenderbufferSize 800 600) - fboLightingName <- newFramebufferGivenStencilAlpha rboLightingName + fboLightingName <- newFramebufferGivenStencil rboLightingName rboBaseBloomName <- genObjectName bindRenderbuffer Renderbuffer $= rboBaseBloomName @@ -156,6 +157,7 @@ preloadRender = do , _rboBaseBloom = rboBaseBloomName , _matUBO = theUBO } +--------------------end preloadRender cornerList :: [[Float]] cornerList = [[-1, 1,0,1] @@ -170,51 +172,7 @@ cornerListNoCoord = ,[-1,-1] ,[ 1,-1] ] ---------------------end preloadRender - -newFramebufferGivenStencil - :: RenderbufferObject - -> IO (FramebufferObject, TextureObject) -newFramebufferGivenStencil rboName = do - fboName <- genObjectName - bindFramebuffer Framebuffer $= fboName - toName <- genObjectName - framebufferRenderbuffer Framebuffer DepthStencilAttachment Renderbuffer rboName - fboStatus <- framebufferStatus Framebuffer - print fboStatus - return (fboName,toName) - -newFramebufferGivenStencilAlpha - :: RenderbufferObject - -> IO (FramebufferObject, TextureObject) -newFramebufferGivenStencilAlpha rboName = do - fboName <- genObjectName - bindFramebuffer Framebuffer $= fboName - toName <- genObjectName - framebufferRenderbuffer Framebuffer DepthStencilAttachment Renderbuffer rboName - fboStatus <- framebufferStatus Framebuffer - print fboStatus - return (fboName,toName) -setupTextureFramebuffer - :: GLsizei - -> GLsizei - -> IO (FramebufferObject, TextureObject) -setupTextureFramebuffer x y = do - fboName <- genObjectName - bindFramebuffer Framebuffer $= fboName - - fboTO <- genObjectName - textureBinding Texture2D $= Just fboTO - glTexStorage2D GL_TEXTURE_2D 1 GL_RGBA8 x y - textureFilter Texture2D $= minMagFilter - framebufferTexture2D Framebuffer (ColorAttachment 0) Texture2D fboTO 0 - fboStatus <- framebufferStatus Framebuffer - print fboStatus - return (fboName, fboTO) - -minMagFilter :: ((TextureFilter, Maybe TextureFilter),TextureFilter) -minMagFilter = ((Nearest,Nothing),Nearest) cleanUpRenderPreload :: RenderData -> IO () cleanUpRenderPreload pd = do diff --git a/src/Preload/Update.hs b/src/Preload/Update.hs deleted file mode 100644 index 814933cac..000000000 --- a/src/Preload/Update.hs +++ /dev/null @@ -1,71 +0,0 @@ -{-# LANGUAGE NoMonomorphismRestriction #-} -module Preload.Update - ( sizeFBOs - ) -where -import Data.Preload -import Data.Preload.Render - -import Graphics.Rendering.OpenGL -import Graphics.GL.Core43 ---import Foreign -import Control.Lens -import Control.Monad - -sizeFBOs - :: Int -- ^ Lightmap width - -> Int -- ^ Lightmap height - -> Int -- ^ Full width - -> Int -- ^ Full height - -> PreloadData a - -> IO (PreloadData a) -sizeFBOs xsize ysize xfull yfull pdata = do - let rdata = _renderData pdata - resizeRBO (_rboBaseBloom rdata) xfull yfull - resizeRBO (_rboLighting rdata) xsize ysize - pdata' <- foldM (updateFBOTO xfull yfull) pdata [fbo2, fbo3, fboBase, fboBloom, fboColor] - updateFBOTO xsize ysize pdata' fboLighting - -resizeRBO - :: RenderbufferObject - -> Int - -> Int - -> IO () -resizeRBO rboName xsize ysize = do - let xsize' = fromIntegral xsize - ysize' = fromIntegral ysize - bindRenderbuffer Renderbuffer $= rboName - renderbufferStorage Renderbuffer Depth24Stencil8 (RenderbufferSize xsize' ysize') - -updateFBOTO - :: Int - -> Int - -> PreloadData a - -> ALens' RenderData (FramebufferObject, TextureObject) - -> IO (PreloadData a) -updateFBOTO xsize ysize pdata target = do - newfbo2 <- resizeFBOTO (pdata ^# renderData . target) xsize ysize - return $ storing (renderData . target) newfbo2 pdata - -resizeFBOTO - :: (FramebufferObject , TextureObject) - -> Int - -> Int - -> IO (FramebufferObject, TextureObject) -resizeFBOTO (fboName,toOld) xsize ysize = do - bindFramebuffer Framebuffer $= fboName - let xsize' = fromIntegral xsize - ysize' = fromIntegral ysize - deleteObjectName toOld - toName <- genObjectName - textureBinding Texture2D $= Just toName - glTexStorage2D GL_TEXTURE_2D 1 GL_RGBA8 xsize' ysize' - textureFilter Texture2D $= minMagFilter - framebufferTexture2D Framebuffer (ColorAttachment 0) Texture2D toName 0 - fboStatus <- framebufferStatus Framebuffer - putStrLn $ "after resize, framebuffer status:" ++ show fboStatus - return (fboName, toName) - -minMagFilter :: ((TextureFilter, Maybe TextureFilter),TextureFilter) -minMagFilter = ((Nearest,Nothing),Nearest) - diff --git a/src/Render.hs b/src/Render.hs index f59b75bde..01c80be2f 100644 --- a/src/Render.hs +++ b/src/Render.hs @@ -38,12 +38,16 @@ createLightMap pdata lightPoints nWalls nSils nsurfVs = do clear [ColorBuffer,DepthBuffer] --colorMask $= Color4 Disabled Disabled Disabled Disabled cullFace $= Just Back - -- draw walls from your point of view in order to set z buffer + -- draw wall surfaces from your point of view in order to set z buffer drawShader (_lightingWallShader pdata) nWalls - -- draw foreground elements to set z buffer + -- draw foreground elements from your point of view to set z buffer drawShader (_lightingSurfaceShader pdata) nsurfVs - + -- draw wall occlusions from your point of view drawShader (_lightingOccludeShader pdata) nWalls + --hypothesis: the above three draw calls only work because the + --uniform was set to your position, that being the last light source in the list + --if this hypothesis is correct, then the code is brittle and should be changed + -- for each of the lights: -- stencil out the walls from this light's point of view -- draw fading lightmap circles on the floor