diff --git a/shader/cloud/basic.frag b/shader/cloud/basic.frag index d2987e038..93cf917bc 100644 --- a/shader/cloud/basic.frag +++ b/shader/cloud/basic.frag @@ -11,6 +11,8 @@ void main() if (d > 1) {discard;} fCol = vec4(vCol.xyz,vCol.w*(1-d)); fPos = vec4(vPosID.xyz, vCol.w*(1-d)); + //fPos = vec4(vPosID.xy,vPosID.z*0.5, vCol.w*(1-d)); fNorm = vec4(-vControls.xy, -0.1 + 0.2 * d ,fPos.w); + //fNorm = vec4(-vControls.xy, -0.1 + 2 * d ,vCol.w * (1.01-(d*d*d))); //fNorm = vec4(-vControls.xy, -0.1 + d , fPos.w); } diff --git a/shader/fullscreen/transparencyComp.frag b/shader/fullscreen/transparencyComp.frag new file mode 100644 index 000000000..1b1de4b16 --- /dev/null +++ b/shader/fullscreen/transparencyComp.frag @@ -0,0 +1,18 @@ +#version 450 core +in vec2 vTexPos; +out vec4 fColor; +layout(binding = 0) uniform sampler2D t0; +layout(binding = 1) uniform sampler2D t1; +layout(binding = 2) uniform sampler2D t2; +layout(binding = 3) uniform sampler2D t3; +vec4 blend (vec4 src, vec4 dst) { + return src + (1-src.a) * dst; +} +void main() { + //fColor = texture(t0, vTexPos) + texture(t2, vTexPos); + vec4 x = texture(t0, vTexPos); + float xz = texture(t1, vTexPos).z; + vec4 y = texture(t2, vTexPos); + float yz = texture(t3, vTexPos).z; + fColor = ( xz > yz ? blend(x,y) : blend(y,x)) ; +} diff --git a/shader/fullscreen/transparencyComp.vert b/shader/fullscreen/transparencyComp.vert new file mode 100644 index 000000000..fa5cbb7f5 --- /dev/null +++ b/shader/fullscreen/transparencyComp.vert @@ -0,0 +1,8 @@ +#version 450 core +layout(location = 0) in vec2 pos; +layout(location = 1) in vec2 texPos; +out vec2 vTexPos; +void main() { + gl_Position = vec4(pos, 0.0, 1.0); + vTexPos = texPos; +} diff --git a/shader/wall/window.frag b/shader/wall/window.frag index 6bd962e34..bec206691 100644 --- a/shader/wall/window.frag +++ b/shader/wall/window.frag @@ -9,6 +9,7 @@ void main() fCol = gColor; //fPos = gPos;// + vec4(0,0,50,0); //fNorm = vec4 (0,0,10,10); - fPos = vec4(0,0,50,1); + //fPos = vec4(0,0,50,1); + fPos = gPos; fNorm = vec4 (0,0,10,10); } diff --git a/src/Data/Preload/Render.hs b/src/Data/Preload/Render.hs index d2dcb4088..d52cee429 100644 --- a/src/Data/Preload/Render.hs +++ b/src/Data/Preload/Render.hs @@ -19,6 +19,7 @@ data RenderData = RenderData , _alphaDivideShader :: Shader , _windowShader :: Shader , _fullscreenShader :: Shader + , _transparencyCompShader :: Shader , _bloomBlurShader :: Shader , _colorBlurShader :: Shader , _barrelShader :: (Shader,VBO) @@ -33,7 +34,7 @@ data RenderData = RenderData , _fboHalf2 :: (FBO, TO) , _fboBase :: (FBO, (TO, TO, TO)) , _fboCloud :: (FBO, (TO, TO, TO)) --- , _fboWindow :: (FBO, (TO, TO, TO)) + , _fboWindow :: (FBO, (TO, TO)) , _fboBloom :: (FBO, TO) , _fboPos :: (FBO, TO) , _fboLighting :: (FBO, TO) diff --git a/src/Dodge/Data/Config.hs b/src/Dodge/Data/Config.hs index 477f8c159..026617653 100644 --- a/src/Dodge/Data/Config.hs +++ b/src/Dodge/Data/Config.hs @@ -39,15 +39,15 @@ data Config = Config { _volume_master :: Float , _volume_sound :: Float , _volume_music :: Float - , _graphics_cloud_shadows :: Bool - , _graphics_distortions :: Bool - , _graphics_bloom :: Bool - , _graphics_shadow_rendering :: ShadowRendering - , _graphics_shadow_size :: Importance - , _graphics_downsize_resolution :: ResFactor - , _graphics_world_resolution :: ResFactor - , _graphics_distortion_resolution :: ResFactor - , _graphics_num_shadow_casters :: NumShadowCasters + , _gr_cloud_shadows :: Bool + , _gr_distortions :: Bool + , _gr_bloom :: Bool + , _gr_shadow_rendering :: ShadowRendering + , _gr_shadow_size :: Importance + , _gr_downsize_res :: ResFactor + , _gr_world_res :: ResFactor + , _gr_distortion_res :: ResFactor + , _gr_num_shadow_casters :: NumShadowCasters , _windowX :: Int --size , _windowY :: Int , _windowPosX :: Int --position in os @@ -133,15 +133,15 @@ defaultConfig = { _volume_master = 1 , _volume_sound = 1 , _volume_music = 0 - , _graphics_cloud_shadows = True - , _graphics_bloom = True - , _graphics_shadow_rendering = GeoObjShads - , _graphics_shadow_size = Typical - , _graphics_distortions = True - , _graphics_downsize_resolution = EighthRes - , _graphics_world_resolution = QuarterRes - , _graphics_distortion_resolution = FullRes - , _graphics_num_shadow_casters = toEnum 10 + , _gr_cloud_shadows = True + , _gr_bloom = True + , _gr_shadow_rendering = GeoObjShads + , _gr_shadow_size = Typical + , _gr_distortions = True + , _gr_downsize_res = EighthRes + , _gr_world_res = QuarterRes + , _gr_distortion_res = FullRes + , _gr_num_shadow_casters = toEnum 10 , _windowX = 800 , _windowY = 600 , _windowPosX = 0 diff --git a/src/Dodge/Menu.hs b/src/Dodge/Menu.hs index d737b47e0..a156a2b55 100644 --- a/src/Dodge/Menu.hs +++ b/src/Dodge/Menu.hs @@ -187,21 +187,15 @@ graphicsMenu = titleOptionsMenu "OPTIONS:GRAPHICS" graphicsMenuOptions graphicsMenuOptions :: [MenuOption] graphicsMenuOptions = - [ makeEnumOption graphics_world_resolution "World resolution" (uvIOEffects .~ updatePreload) - , makeEnumOption - graphics_downsize_resolution - "Downsize resolution" - (uvIOEffects .~ updatePreload) - , makeEnumOption - graphics_distortion_resolution - "Distortion resolution" - (uvIOEffects .~ updatePreload) - , makeEnumOption graphics_shadow_rendering "SHADOW RENDERING" id - , makeEnumOption graphics_shadow_size "SHADOW DETAIL" id - , makeEnumOption graphics_distortions "ENABLE DISTORTIONS" id - , makeEnumOption graphics_bloom "ENABLE BLOOM" id - , makeBoolOption graphics_cloud_shadows "CLOUD SHADOWS" - , makeEnumOption graphics_num_shadow_casters "NUM SHADOW CASTERS" id + [ makeEnumOption gr_world_res "World resolution" (uvIOEffects .~ updatePreload) + , makeEnumOption gr_downsize_res "Downsize resolution" (uvIOEffects .~ updatePreload) + , makeEnumOption gr_distortion_res "Distortion resolution" (uvIOEffects .~ updatePreload) + , makeEnumOption gr_shadow_rendering "SHADOW RENDERING" id + , makeEnumOption gr_shadow_size "SHADOW DETAIL" id + , makeEnumOption gr_distortions "ENABLE DISTORTIONS" id + , makeEnumOption gr_bloom "ENABLE BLOOM" id + , makeBoolOption gr_cloud_shadows "CLOUD SHADOWS" + , makeEnumOption gr_num_shadow_casters "NUM SHADOW CASTERS" id ] gameOverMenu :: Universe -> ScreenLayer diff --git a/src/Dodge/Render.hs b/src/Dodge/Render.hs index 64b898761..062f00f93 100644 --- a/src/Dodge/Render.hs +++ b/src/Dodge/Render.hs @@ -76,7 +76,7 @@ doDrawing' win pdata u = do wallsToPoke ) ( pokeShape - (drawShadowsByImportance $ cfig ^. graphics_shadow_size) + (drawShadowsByImportance $ cfig ^. gr_shadow_size) (_vboPtr $ _vboShapes pdata) (_eboPtr $ _shapeEBO pdata) (_eboPtr $ _silhouetteEBO pdata) @@ -111,7 +111,7 @@ doDrawing' win pdata u = do ] -- set the coordinate uniform ready for drawing elements using world coordinates bufferPerspectiveMatrixUBO cfig (w ^. wCam) (pdata ^. matUBO) - setViewport _graphics_world_resolution cfig + setViewport _gr_world_res cfig glBindFramebuffer GL_FRAMEBUFFER (pdata ^. fboBase . _1 . unFBO) glDepthMask GL_TRUE glDisable GL_BLEND @@ -257,7 +257,7 @@ doDrawing' win pdata u = do --setup downscale viewport for blurring bloom --setViewportSize (round winx `div` (2 * resFact)) (round winy `div` (2 * resFact)) - setViewport _graphics_downsize_resolution cfig + setViewport _gr_downsize_res cfig glBindFramebuffer GL_FRAMEBUFFER (_unFBO (fst (_fboHalf1 pdata))) glDepthFunc GL_ALWAYS glBindTextureUnit 0 (pdata ^. fboBloom . _2 . unTO) @@ -271,11 +271,11 @@ doDrawing' win pdata u = do -- glClearNamedFramebufferfv (pdata ^. fboHalf2 . _1 . unFBO) GL_COLOR 0 -- glBlendFunc GL_ONE GL_ONE_MINUS_SRC_ALPHA drawShader (_bloomBlurShader pdata) 4 - when (cfig ^. graphics_bloom) $ do + when (cfig ^. gr_bloom) $ do replicateM_ 2 $ pingPongBetween (_fboHalf1 pdata) (_fboHalf2 pdata) (_bloomBlurShader pdata) glEnable GL_BLEND - setViewport _graphics_world_resolution cfig + setViewport _gr_world_res cfig --draw clouds onto cloud buffer glBindFramebuffer GL_FRAMEBUFFER (pdata ^. fboCloud . _1 . unFBO) glDepthFunc GL_LEQUAL @@ -297,15 +297,15 @@ doDrawing' win pdata u = do (fromIntegral nCloudIs) GL_UNSIGNED_SHORT nullPtr - glEnable GL_CULL_FACE - glEnable GL_DEPTH_CLAMP - glCullFace GL_BACK - drawShader (_windowShader pdata) nWins - glDisable GL_DEPTH_CLAMP - glDisable GL_CULL_FACE - when (_graphics_cloud_shadows cfig) $ do +-- glEnable GL_CULL_FACE +-- glEnable GL_DEPTH_CLAMP +-- glCullFace GL_BACK +---- drawShader (_windowShader pdata) nWins +-- glDisable GL_DEPTH_CLAMP +-- glDisable GL_CULL_FACE + when (_gr_cloud_shadows cfig) $ do ----render transparency depths - glDepthMask GL_TRUE +-- glDepthMask GL_TRUE glDepthFunc GL_ALWAYS glDisable GL_BLEND withArray [GL_NONE, GL_COLOR_ATTACHMENT1, GL_COLOR_ATTACHMENT2] $ @@ -317,24 +317,25 @@ doDrawing' win pdata u = do glEnable GL_BLEND -- we sum the positions weighted by alpha, and sum the alpha glBlendFuncSeparatei 1 GL_SRC_ALPHA GL_ONE GL_ONE GL_ONE + --glBlendFuncSeparatei 1 GL_ONE GL_ZERO GL_ONE GL_ZERO -- and sum the normals weighted by alpha --glBlendFunci 2 GL_SRC_ALPHA GL_ONE glBlendFunci 2 GL_SRC_ALPHA GL_ONE glUseProgram (pdata ^. cloudShader . shaderUINT) glBindVertexArray $ pdata ^. cloudShader . shaderVAO . vaoName - glDepthMask GL_TRUE +-- glDepthMask GL_TRUE glDrawElements (pdata ^. cloudShader . shaderPrimitive . unPrimitiveMode) (fromIntegral nCloudIs) GL_UNSIGNED_SHORT nullPtr --- - glEnable GL_CULL_FACE - glEnable GL_DEPTH_CLAMP - glCullFace GL_BACK - drawShader (_windowShader pdata) nWins - glDisable GL_DEPTH_CLAMP - glDisable GL_CULL_FACE +-- glEnable GL_CULL_FACE +-- glEnable GL_DEPTH_CLAMP +-- glCullFace GL_BACK +---- drawShader (_windowShader pdata) nWins +-- glDisable GL_DEPTH_CLAMP +-- glDisable GL_CULL_FACE -- drawShader (_windowShader pdata) nWins glBindFramebuffer GL_FRAMEBUFFER (pdata ^. fboPos . _1 . unFBO) withArray [0, 0, 0, 0] $ \ptr -> @@ -360,6 +361,22 @@ doDrawing' win pdata u = do (pdata ^. fboCloud . _2 . _3) lightPoints pdata + --draw windows onto window buffer + glBindFramebuffer GL_FRAMEBUFFER (pdata ^. fboWindow . _1 . unFBO) + withArray [GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1] $ + glNamedFramebufferDrawBuffers (pdata ^. fboWindow . _1 . unFBO) 2 + withArray [0, 0, 0, 0] $ + glClearNamedFramebufferfv (pdata ^. fboWindow . _1 . unFBO) GL_COLOR 0 + withArray [0, 0, 0, 0] $ + glClearNamedFramebufferfv (pdata ^. fboWindow . _1 . unFBO) GL_COLOR 1 + glEnable GL_CULL_FACE + glEnable GL_DEPTH_CLAMP + glDepthFunc GL_LEQUAL + glCullFace GL_BACK + glDisable GL_BLEND + drawShader (_windowShader pdata) nWins + glDisable GL_DEPTH_CLAMP + glDisable GL_CULL_FACE glInvalidateBufferData (pdata ^. vboShapes . vboName) --apply lightmap to cloud buffer glBindFramebuffer GL_FRAMEBUFFER (_unFBO (fst (_fboCloud pdata))) @@ -374,13 +391,24 @@ doDrawing' win pdata u = do drawShader (_fullscreenShader pdata) 4 glBlendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA + -- bind base buffer for drawing clouds and bloom --glBindFramebuffer GL_FRAMEBUFFER (_unFBO (fst (_fboBase pdata))) glBindFramebuffer GL_FRAMEBUFFER (pdata ^. fboBase . _1 . unFBO) - --draw shadowed clouds onto base buffer - glBindTextureUnit 0 (pdata ^. fboCloud . _2 . _1 . unTO) - drawShader (_fullscreenShader pdata) 4 +-- --draw shadowed clouds onto base buffer +-- glBindTextureUnit 0 (pdata ^. fboCloud . _2 . _1 . unTO) +-- drawShader (_fullscreenShader pdata) 4 + + glBlendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA +-- --draw windows onto base buffer + glBlendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA + glBindTextureUnit 0 (pdata ^. fboWindow . _2 . _1 . unTO) + glBindTextureUnit 1 (pdata ^. fboWindow . _2 . _2 . unTO) + glBindTextureUnit 2 (pdata ^. fboCloud . _2 . _1 . unTO) + --glBindTextureUnit 3 (pdata ^. fboCloud . _2 . _2 . unTO) + glBindTextureUnit 3 (pdata ^. fboPos . _2 . unTO) + drawShader (_transparencyCompShader pdata) 4 --Draw blurred bloom onto base buffer glEnable GL_BLEND @@ -388,7 +416,8 @@ doDrawing' win pdata u = do --glBlendFunc GL_ONE GL_ONE glBindTextureUnit 0 (_unTO . snd $ _fboHalf1 pdata) drawShader (_fullscreenShader pdata) 4 - glBlendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA +-- glBlendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA + --set viewport for radial distortion --setViewportSize (round winx) (round winy) @@ -397,7 +426,7 @@ doDrawing' win pdata u = do glBlendFunc GL_ONE GL_ZERO -- perform any radial distortion -- this is hideous - case (getDistortions cfig w, cfig ^. graphics_distortions) of + case (getDistortions cfig w, cfig ^. gr_distortions) of (rds, x) | null rds || not x -> do glBindTextureUnit 0 $ pdata ^. fboBase . _2 . _1 . unTO glBindFramebuffer GL_FRAMEBUFFER 0 @@ -440,7 +469,7 @@ bufferPerspectiveMatrixUBO cfig cam uboid = withArray getDistortions :: Config -> World -> [Distortion] getDistortions cfig w - | cfig ^. graphics_distortions = w ^. cWorld . lWorld . distortions + | cfig ^. gr_distortions = w ^. cWorld . lWorld . distortions | otherwise = [] setViewport :: (Config -> ResFactor) -> Config -> IO () diff --git a/src/Dodge/Render/Lights.hs b/src/Dodge/Render/Lights.hs index 6b7a0cfb6..b6947e438 100644 --- a/src/Dodge/Render/Lights.hs +++ b/src/Dodge/Render/Lights.hs @@ -13,7 +13,7 @@ import Control.Lens lightsToRender :: Config -> Camera -> LWorld -> [(Point3, Float, Point3)] {-# INLINE lightsToRender #-} -lightsToRender cfig campos w = take (fromEnum $ cfig ^. graphics_num_shadow_casters) $ +lightsToRender cfig campos w = take (fromEnum $ cfig ^. gr_num_shadow_casters) $ sortOn (\(_,x,_) -> negate x) $ mapMaybe getLS (IM.elems $ w ^. lightSources) ++ mapMaybe getlsparam (w ^. lights) diff --git a/src/Dodge/WindowSize.hs b/src/Dodge/WindowSize.hs index 1aadfa096..955467343 100644 --- a/src/Dodge/WindowSize.hs +++ b/src/Dodge/WindowSize.hs @@ -1,4 +1,4 @@ -module Dodge.WindowSize where +module Dodge.WindowSize (getWindowSize) where import Dodge.Data.Config diff --git a/src/Framebuffer/Update.hs b/src/Framebuffer/Update.hs index 12ffba250..63ae6ce4b 100644 --- a/src/Framebuffer/Update.hs +++ b/src/Framebuffer/Update.hs @@ -3,15 +3,13 @@ {- | Concerns resizing framebuffers on the fly. - Seems to need to be called at least once. -} -module Framebuffer.Update ( - sizeFBOs, -) where +module Framebuffer.Update (sizeFBOs) where -import Dodge.WindowSize import Control.Lens import Control.Monad import Data.Preload.Render import Dodge.Data.Config +import Dodge.WindowSize import Foreign.Marshal.Array import Framebuffer.Check import GLHelp @@ -19,16 +17,13 @@ import Graphics.GL.Core45 import Shader.Data import Unsafe.Coerce -sizeFBOs :: - Config -> - RenderData -> - IO RenderData +sizeFBOs :: Config -> RenderData -> IO RenderData sizeFBOs cfig rdata = - uncurry (resizeRBO (_rboBaseBloom rdata)) (getWindowSize _graphics_world_resolution cfig) + uncurry (resizeRBO (_rboBaseBloom rdata)) (getWindowSize _gr_world_res cfig) >> foldM ( uncurry updateFBOTO3 - (getWindowSize _graphics_world_resolution cfig) + (getWindowSize _gr_world_res cfig) GL_NEAREST GL_NEAREST GL_RGBA8 @@ -38,43 +33,40 @@ sizeFBOs cfig rdata = rdata [fboBase, fboCloud] >>= foldUpdateFBOTO - _graphics_world_resolution + _gr_world_res GL_NEAREST GL_NEAREST GL_RGBA8 [fboLighting] >>= foldUpdateFBOTO - _graphics_world_resolution + _gr_world_res GL_LINEAR_MIPMAP_LINEAR GL_LINEAR GL_RGBA16F [fboBloom, fboPos] >>= foldUpdateFBOTO - _graphics_distortion_resolution + _gr_distortion_res GL_LINEAR GL_NEAREST GL_RGBA8 [fbo2, fbo3] >>= foldUpdateFBOTO - _graphics_downsize_resolution + _gr_downsize_res GL_LINEAR_MIPMAP_LINEAR GL_LINEAR GL_RGBA16F [fboHalf1, fboHalf2] + >>= uncurry updateFBOTO2 + (getWindowSize _gr_world_res cfig) + GL_NEAREST + GL_NEAREST + GL_RGBA8 + GL_RGBA16F + fboWindow where - updateFBOTO' f = - uncurry - updateFBOTO - (getWindowSize f cfig) - foldUpdateFBOTO f minfilt magfilt format l = - ffoldM - ( updateFBOTO' - f - minfilt - magfilt - format - ) - l + updateFBOTO' f = uncurry updateFBOTO (getWindowSize f cfig) + foldUpdateFBOTO f minfilt magfilt format = + ffoldM ( updateFBOTO' f minfilt magfilt format) ffoldM :: (Foldable t, Monad m) => (a1 -> a2 -> m a1) -> t a2 -> a1 -> m a1 ffoldM f = flip $ foldM f @@ -98,23 +90,25 @@ updateFBOTO xsize ysize minfilt magfilt inFormat pdata target = do newfbo2 <- resizeFBOTO (pdata ^# target) xsize ysize minfilt magfilt inFormat return $ storing target newfbo2 pdata ---updateFBOTO2 :: --- Int -> --- Int -> --- -- | minification filter --- GLenum -> --- -- | magnification filter --- GLenum -> --- -- | internal color format texture1 --- GLenum -> --- -- | internal color format texture2 --- GLenum -> --- RenderData -> --- ALens' RenderData (FBO, (TO, TO)) -> --- IO RenderData ---updateFBOTO2 xsize ysize minfilt magfilt inFormat1 inFormat2 pdata target = do --- newfbo2 <- resizeFBOTO2 (pdata ^# target) xsize ysize minfilt magfilt inFormat1 inFormat2 --- return $ storing target newfbo2 pdata +-- note that the ordering of arguments is different to the other update +-- functions... this all needs rethinking +updateFBOTO2 :: + Int -> + Int -> + -- | minification filter + GLenum -> + -- | magnification filter + GLenum -> + -- | internal color format texture1 + GLenum -> + -- | internal color format texture2 + GLenum -> + ALens' RenderData (FBO, (TO, TO)) -> + RenderData -> + IO RenderData +updateFBOTO2 xsize ysize minfilt magfilt inFormat1 inFormat2 target pdata = do + newfbo2 <- resizeFBOTO2 (pdata ^# target) xsize ysize minfilt magfilt inFormat1 inFormat2 + return $ storing target newfbo2 pdata updateFBOTO3 :: Int -> @@ -136,29 +130,29 @@ updateFBOTO3 xsize ysize minfilt magfilt inFormat1 inFormat2 inFormat3 pdata tar newfbo2 <- resizeFBOTO3 (pdata ^# target) xsize ysize minfilt magfilt inFormat1 inFormat2 inFormat3 return $ storing target newfbo2 pdata ---resizeFBOTO2 :: --- (FBO, (TO, TO)) -> --- Int -> --- Int -> --- -- | minification filter --- GLenum -> --- -- | magnification filter --- GLenum -> --- -- | internal color format1 --- GLenum -> --- -- | internal color format2 --- GLenum -> --- IO (FBO, (TO, TO)) ---resizeFBOTO2 (fbo, (toOld1, toOld2)) xsize ysize minfilt magfilt inFormat1 inFormat2 = do --- glBindFramebuffer GL_FRAMEBUFFER (_unFBO fbo) --- mglDelete glDeleteTextures $ _unTO toOld1 --- mglDelete glDeleteTextures $ _unTO toOld2 --- to1 <- initializeTexture2D fbo GL_COLOR_ATTACHMENT0 xsize ysize minfilt magfilt inFormat1 --- to2 <- initializeTexture2D fbo GL_COLOR_ATTACHMENT1 xsize ysize minfilt magfilt inFormat2 --- withArray [GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1] $ \ptr -> --- glNamedFramebufferDrawBuffers (_unFBO fbo) 2 ptr --- checkFBO fbo --- return (fbo, (TO to1, TO to2)) +resizeFBOTO2 :: + (FBO, (TO, TO)) -> + Int -> + Int -> + -- | minification filter + GLenum -> + -- | magnification filter + GLenum -> + -- | internal color format1 + GLenum -> + -- | internal color format2 + GLenum -> + IO (FBO, (TO, TO)) +resizeFBOTO2 (fbo, (toOld1, toOld2)) xsize ysize minfilt magfilt inFormat1 inFormat2 = do + glBindFramebuffer GL_FRAMEBUFFER (_unFBO fbo) + mglDelete glDeleteTextures $ _unTO toOld1 + mglDelete glDeleteTextures $ _unTO toOld2 + to1 <- initializeTexture2D fbo GL_COLOR_ATTACHMENT0 xsize ysize minfilt magfilt inFormat1 + to2 <- initializeTexture2D fbo GL_COLOR_ATTACHMENT1 xsize ysize minfilt magfilt inFormat2 + withArray [GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1] $ \ptr -> + glNamedFramebufferDrawBuffers (_unFBO fbo) 2 ptr + checkFBO fbo + return (fbo, (TO to1, TO to2)) resizeFBOTO3 :: (FBO, (TO, TO, TO)) -> @@ -219,5 +213,5 @@ initializeTexture2D fbo attachpoint x y minfilt magfilt informat = do --getWindowSize :: Integral a => (Config -> ResFactor) -> Config -> (a, a) --getWindowSize f cfig = (g _windowX, g _windowY) - -- where - -- g h = fromIntegral $ h cfig `div` resFactorNum (f cfig) +-- where +-- g h = fromIntegral $ h cfig `div` resFactorNum (f cfig) diff --git a/src/GLHelp.hs b/src/GLHelp.hs index f7ca748a7..3489fd318 100644 --- a/src/GLHelp.hs +++ b/src/GLHelp.hs @@ -6,7 +6,7 @@ import Foreign.Storable import Graphics.GL.Core45 mglCreate :: (GLsizei -> Ptr GLuint -> IO ()) -> IO GLuint -mglCreate f = do +mglCreate f = alloca $ \nameptr -> do f 1 nameptr peek nameptr diff --git a/src/Preload/Render.hs b/src/Preload/Render.hs index 6942d5aaf..81704f25a 100644 --- a/src/Preload/Render.hs +++ b/src/Preload/Render.hs @@ -112,6 +112,8 @@ preloadRender = do (_, screentexturevao) <- setupStaticVBOVAO (toFloatVAs [2, 2]) (concat cornerList) alphadivideshader <- makeShaderUsingVAO "texture2D/alphaDivide" [vert, frag] pmTriangleStrip screentexturevao fsShad <- makeShaderUsingVAO "texture/simple" [vert, frag] pmTriangleStrip screentexturevao + transcompshader <- makeShaderUsingVAO + "fullscreen/transparencyComp" [vert, frag] pmTriangleStrip screentexturevao bloomBlurShad <- makeShaderUsingVAO "texture/bloomBlur" [vert, frag] pmTriangleStrip screentexturevao colorBlurShad <- makeShaderUsingVAO "texture/colorBlur" [vert, frag] pmTriangleStrip screentexturevao grayscaleShad <- makeShaderUsingVAO "texture/grayscale" [vert, frag] pmTriangleStrip screentexturevao @@ -152,8 +154,10 @@ preloadRender = do 800 600 + -- if adding to this list, recall you need to sizeFBOs fboBaseName <- setupFramebuffer3GivenStencil rboBaseBloomName fboCloudName <- setupFramebuffer3GivenStencil rboBaseBloomName + fbowindow <- setupFramebuffer2GivenStencil rboBaseBloomName fboBloomName <- setupFramebufferGivenStencil rboBaseBloomName fboPosName <- setupFramebufferGivenStencil rboBaseBloomName fboLightingName <- setupFramebufferGivenStencil rboBaseBloomName @@ -178,6 +182,7 @@ preloadRender = do , _ceilingStencilShader = ceilingstencilshader , _windowShader = windowshader , _fullscreenShader = fsShad + , _transparencyCompShader = transcompshader , _alphaDivideShader = alphadivideshader , _lightingTextureShader = lightingTextureShad , _bloomBlurShader = bloomBlurShad @@ -190,6 +195,7 @@ preloadRender = do , _fboHalf2 = fboHalf2Name , _fboLighting = fboLightingName , _fboBase = fboBaseName + , _fboWindow = fbowindow , _fboCloud = fboCloudName , _fboBloom = fboBloomName , _fboPos = fboPosName diff --git a/src/Preload/Update.hs b/src/Preload/Update.hs index 1f25938c9..f02a9b3fa 100644 --- a/src/Preload/Update.hs +++ b/src/Preload/Update.hs @@ -23,15 +23,12 @@ updatePreload u = (renderDataResizeUpdate (u ^. uvConfig)) u -renderDataResizeUpdate :: - Config -> - RenderData -> - IO RenderData +renderDataResizeUpdate :: Config -> RenderData -> IO RenderData renderDataResizeUpdate cfig rdata = do rdata' <- sizeFBOs cfig rdata bbVert <- BS.readFile "shader/texture/bloomBlur.vert" bbFrag <- BS.readFile "shader/texture/bloomBlur.frag" - let (xsize, ysize) = getWindowSize _graphics_downsize_resolution cfig :: (Int, Int) + let (xsize, ysize) = getWindowSize _gr_downsize_res cfig :: (Int, Int) (bh, bmid) = BS.breakSubstring "(" bbFrag (_, btt) = BS.breakSubstring ")" bmid bbFrag' = BS.append bh $ BS.append (BSC.pack $ '(' : show xsize ++ "," ++ show ysize) btt diff --git a/src/Render.hs b/src/Render.hs index 64d85ad0e..fb7f16a26 100644 --- a/src/Render.hs +++ b/src/Render.hs @@ -43,7 +43,7 @@ createLightMap cfig = case shadrendertype of NoLighting -> const . const . const . const . const . const renderFlatLighting _ -> renderShadows shadrendertype where - shadrendertype = cfig ^. graphics_shadow_rendering + shadrendertype = cfig ^. gr_shadow_rendering renderLightingNoShadows :: TO -> diff --git a/tags b/tags index 130b5f4e3..b1c4a2e76 100644 --- a/tags +++ b/tags @@ -1779,6 +1779,7 @@ _fboHalf1 src/Data/Preload/Render.hs 32;" f _fboHalf2 src/Data/Preload/Render.hs 33;" f _fboLighting src/Data/Preload/Render.hs 39;" f _fboPos src/Data/Preload/Render.hs 38;" f +_fboWindow src/Data/Preload/Render.hs 36;" f _flItPos src/Dodge/Data/FloorItem.hs 11;" f _flItRot src/Dodge/Data/FloorItem.hs 11;" f _flPos src/Dodge/Data/Flame.hs 13;" f @@ -1818,15 +1819,15 @@ _grLinkDirs src/Dodge/GameRoom.hs 18;" f _grName src/Dodge/GameRoom.hs 19;" f _grViewpoints src/Dodge/GameRoom.hs 13;" f _grViewpointsEx src/Dodge/GameRoom.hs 14;" f -_graphics_bloom src/Dodge/Data/Config.hs 44;" f -_graphics_cloud_shadows src/Dodge/Data/Config.hs 42;" f -_graphics_distortion_resolution src/Dodge/Data/Config.hs 49;" f -_graphics_distortions src/Dodge/Data/Config.hs 43;" f -_graphics_downsize_resolution src/Dodge/Data/Config.hs 47;" f -_graphics_num_shadow_casters src/Dodge/Data/Config.hs 50;" f -_graphics_shadow_rendering src/Dodge/Data/Config.hs 45;" f -_graphics_shadow_size src/Dodge/Data/Config.hs 46;" f -_graphics_world_resolution src/Dodge/Data/Config.hs 48;" f +_gr_bloom src/Dodge/Data/Config.hs 44;" f +_gr_cloud_shadows src/Dodge/Data/Config.hs 42;" f +_gr_distortion_res src/Dodge/Data/Config.hs 49;" f +_gr_distortions src/Dodge/Data/Config.hs 43;" f +_gr_downsize_res src/Dodge/Data/Config.hs 47;" f +_gr_num_shadow_casters src/Dodge/Data/Config.hs 50;" f +_gr_shadow_rendering src/Dodge/Data/Config.hs 45;" f +_gr_shadow_size src/Dodge/Data/Config.hs 46;" f +_gr_world_res src/Dodge/Data/Config.hs 48;" f _grayscaleShader src/Data/Preload/Render.hs 25;" f _gsZoning src/Dodge/Data/World.hs 54;" f _guID src/Dodge/Data/Gust.hs 12;" f @@ -2700,7 +2701,7 @@ brightX src/Color.hs 116;" f btSPic src/Dodge/Render/ShapePicture.hs 129;" f btText src/Dodge/Inventory/SelectionList.hs 237;" f bufferEBO src/Shader/Bind.hs 28;" f -bufferPerspectiveMatrixUBO src/Dodge/Render.hs 435;" f +bufferPerspectiveMatrixUBO src/Dodge/Render.hs 456;" f bufferPokedVBO src/Shader/Bind.hs 19;" f bufferShaderLayers src/Shader/Bind.hs 36;" f bulletBeltBracer src/Dodge/Item/Equipment.hs 67;" f @@ -2793,7 +2794,7 @@ clang2S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 676;" f clangS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 542;" f cldtPropagateFold src/Dodge/DoubleTree.hs 358;" f cleanUpPreload src/Preload.hs 10;" f -cleanUpRenderPreload src/Preload/Render.hs 237;" f +cleanUpRenderPreload src/Preload/Render.hs 240;" f cleanUpSoundPreload src/Preload.hs 15;" f cleanupHalted src/Sound.hs 117;" f cleatLabel src/Dodge/Cleat.hs 30;" f @@ -2879,7 +2880,7 @@ copier src/Dodge/Item/Scope.hs 88;" f copierItemUpdate src/Dodge/Creature/State.hs 131;" f copyItemToFloor src/Dodge/FloorItem.hs 14;" f corDoor src/Dodge/Room/Room.hs 385;" f -cornerList src/Preload/Render.hs 214;" f +cornerList src/Preload/Render.hs 217;" f corpseOrGib src/Dodge/Creature/Update.hs 111;" f corridor src/Dodge/Room/Corridor.hs 17;" f corridorBoss src/Dodge/LockAndKey.hs 133;" f @@ -3127,8 +3128,8 @@ digitalRect src/Geometry.hs 302;" f dim src/Color.hs 112;" f dirtPoly src/Dodge/Room/RoadBlock.hs 74;" f disconnectItemS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 650;" f -displayConfig src/Dodge/Menu.hs 230;" f -displayControls src/Dodge/Menu.hs 246;" f +displayConfig src/Dodge/Menu.hs 224;" f +displayControls src/Dodge/Menu.hs 240;" f displayFrameTicks src/Dodge/Render/Picture.hs 51;" f displayFreeSlots src/Dodge/DisplayInventory.hs 192;" f displayIndents src/Dodge/DisplayInventory.hs 110;" f @@ -3445,7 +3446,7 @@ facesToVF src/Polyhedra/Geodesic.hs 69;" f farWallDistDirection src/Dodge/Update/Camera.hs 244;" f fdiv src/ShortShow.hs 41;" f feet src/Dodge/Creature/Picture.hs 51;" f -ffoldM src/Framebuffer/Update.hs 79;" f +ffoldM src/Framebuffer/Update.hs 71;" f filter3 src/FoldableHelp.hs 76;" f filterSectionsPair src/Dodge/DisplayInventory.hs 157;" f findBlips src/Dodge/RadarSweep.hs 63;" f @@ -3527,7 +3528,7 @@ g src/ShortShow.hs 48;" f gLauncher src/Dodge/Item/Held/Launcher.hs 24;" f gRandify src/Dodge/Randify.hs 11;" f gadgetEffect src/Dodge/HeldUse.hs 47;" f -gameOverMenu src/Dodge/Menu.hs 207;" f +gameOverMenu src/Dodge/Menu.hs 201;" f gameRoomFromRoom src/Dodge/Layout.hs 152;" f gameRoomViewpoints src/Dodge/Viewpoints.hs 35;" f gameRoomsFromRooms src/Dodge/Layout.hs 149;" f @@ -3558,7 +3559,7 @@ getCrMoveSpeed src/Dodge/Creature/Statistics.hs 50;" f getCrsFromRooms src/Dodge/Room/Tutorial.hs 357;" f getCrsFromRooms' src/Dodge/Room/Tutorial.hs 344;" f getDebugMouseOver src/Dodge/Update.hs 377;" f -getDistortions src/Dodge/Render.hs 441;" f +getDistortions src/Dodge/Render.hs 462;" f getEdgesCrossing src/Dodge/Path.hs 42;" f getGrenadeHitEffect src/Dodge/HeldUse.hs 1264;" f getInventoryPath src/Dodge/Inventory/Path.hs 9;" f @@ -3710,10 +3711,10 @@ initWallZoning src/Dodge/Wall/Zone.hs 12;" f initialRoomTree src/Dodge/Floor.hs 24;" f initialWorld src/Dodge/Initialisation.hs 15;" f initialisePlaying src/Sound.hs 77;" f -initializeGLState src/Preload/Render.hs 232;" f +initializeGLState src/Preload/Render.hs 235;" f initializeOptionMenu src/Dodge/Menu/Option.hs 17;" f initializeOptionMenuBO src/Dodge/Menu/Option.hs 30;" f -initializeTexture2D src/Framebuffer/Update.hs 209;" f +initializeTexture2D src/Framebuffer/Update.hs 201;" f inorderNumberTree src/TreeHelp.hs 190;" f insertAt src/Padding.hs 63;" f insertIMInZone src/Dodge/Base.hs 54;" f @@ -3949,8 +3950,8 @@ lineThick src/Picture/Base.hs 234;" f lineUp src/Dodge/Creature/Boid.hs 150;" f linksDAGToPath src/Dodge/Room/Path.hs 13;" f linksOnPath src/Dodge/Room/CheckConsistency.hs 6;" f -listConfig src/Dodge/Menu.hs 239;" f -listControls src/Dodge/Menu.hs 251;" f +listConfig src/Dodge/Menu.hs 233;" f +listControls src/Dodge/Menu.hs 245;" f listCursorChooseBorderScale src/Dodge/Render/List.hs 135;" f listGuard src/Dodge/Creature/ReaderUpdate.hs 195;" f listSelectionColorPicture src/Dodge/DisplayInventory.hs 302;" f @@ -4626,9 +4627,10 @@ resetCrVocCoolDown src/Dodge/Creature/Vocalization.hs 47;" f resetPLUse src/Dodge/PlacementSpot.hs 92;" f resetStride src/Dodge/Creature/State/WalkCycle.hs 25;" f resetTerminal src/Dodge/WorldEffect.hs 109;" f -resizeFBOTO src/Framebuffer/Update.hs 191;" f -resizeFBOTO3 src/Framebuffer/Update.hs 163;" f -resizeRBO src/Framebuffer/Update.hs 82;" f +resizeFBOTO src/Framebuffer/Update.hs 183;" f +resizeFBOTO2 src/Framebuffer/Update.hs 131;" f +resizeFBOTO3 src/Framebuffer/Update.hs 155;" f +resizeRBO src/Framebuffer/Update.hs 74;" f respawn src/Dodge/SpawnAt.hs 12;" f restrictInLinks src/Dodge/RoomLink.hs 44;" f restrictLinkType src/Dodge/RoomLink.hs 34;" f @@ -4827,7 +4829,7 @@ setTiles src/Dodge/Layout.hs 67;" f setTreeInts src/Dodge/Room/Tutorial.hs 98;" f setViewDistance src/Dodge/Update/Camera.hs 239;" f setViewPos src/Dodge/Creature/ReaderUpdate.hs 69;" f -setViewport src/Dodge/Render.hs 446;" f +setViewport src/Dodge/Render.hs 467;" f setVol src/Dodge/Config.hs 47;" f setWristShieldPos src/Dodge/Equipment.hs 49;" f setWristShieldPos src/Dodge/Euse.hs 38;" f @@ -4927,7 +4929,7 @@ singleDT src/Dodge/DoubleTree.hs 10;" f singleLDT src/Dodge/DoubleTree.hs 13;" f singleton src/DoubleStack.hs 11;" f singletonTrie src/SimpleTrie.hs 20;" f -sizeFBOs src/Framebuffer/Update.hs 22;" f +sizeFBOs src/Framebuffer/Update.hs 20;" f skColor src/Dodge/Spark/Draw.hs 14;" f skwareFadeTwoSecS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 512;" f slap1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 670;" f @@ -5281,7 +5283,7 @@ unfoldrMID src/MonadHelp.hs 33;" f unigate src/Dodge/Item/Scope.hs 102;" f unitVectorAtAngle src/Geometry/Vector.hs 101;" f unlockInv src/Dodge/Inventory/Lock.hs 12;" f -unpause src/Dodge/Menu.hs 212;" f +unpause src/Dodge/Menu.hs 206;" f unsafeBlinkAction src/Dodge/Creature/Action/Blink.hs 57;" f unsafeBlinker src/Dodge/Item/Held/Utility.hs 33;" f unsafeSwapKeys src/IntMapHelp.hs 75;" f @@ -5332,8 +5334,9 @@ updateEnergyBall src/Dodge/EnergyBall.hs 31;" f updateEnergyBalls src/Dodge/Update.hs 661;" f updateEnterRegex src/Dodge/Update/Input/InGame.hs 505;" f updateExpBarrel src/Dodge/Barreloid.hs 21;" f -updateFBOTO src/Framebuffer/Update.hs 85;" f -updateFBOTO3 src/Framebuffer/Update.hs 119;" f +updateFBOTO src/Framebuffer/Update.hs 77;" f +updateFBOTO2 src/Framebuffer/Update.hs 93;" f +updateFBOTO3 src/Framebuffer/Update.hs 111;" f updateFlame src/Dodge/Flame.hs 19;" f updateFlames src/Dodge/Update.hs 658;" f updateFloatingCamera src/Dodge/Update/Camera.hs 36;" f