Draw to fullscreen using one triangle

This commit is contained in:
2025-11-23 22:26:06 +00:00
parent 5f29c20d39
commit 65d7b93a32
2 changed files with 31 additions and 11 deletions
+20 -10
View File
@@ -174,7 +174,8 @@ doDrawing' win pdata u = do
glEnable GL_BLEND glEnable GL_BLEND
glBlendFunc GL_ZERO GL_ONE_MINUS_SRC_COLOR glBlendFunc GL_ZERO GL_ONE_MINUS_SRC_COLOR
glUseProgram (pdata ^. fullscreenShader) glUseProgram (pdata ^. fullscreenShader)
glDrawArrays GL_TRIANGLES 0 6 --glDrawArrays GL_TRIANGLES 0 6
glDrawArrays GL_TRIANGLES 0 3
-- no longer need lighting texture -- no longer need lighting texture
with GL_COLOR_ATTACHMENT0 $ with GL_COLOR_ATTACHMENT0 $
glInvalidateNamedFramebufferData (pdata ^. fboLighting . _1 . unFBO) 1 glInvalidateNamedFramebufferData (pdata ^. fboLighting . _1 . unFBO) 1
@@ -217,7 +218,8 @@ doDrawing' win pdata u = do
-- glClearNamedFramebufferfv (pdata ^. fboHalf2 . _1 . unFBO) GL_COLOR 0 -- glClearNamedFramebufferfv (pdata ^. fboHalf2 . _1 . unFBO) GL_COLOR 0
-- glBlendFunc GL_ONE GL_ONE_MINUS_SRC_ALPHA -- glBlendFunc GL_ONE GL_ONE_MINUS_SRC_ALPHA
glUseProgram (_bloomBlurShader pdata) glUseProgram (_bloomBlurShader pdata)
glDrawArrays GL_TRIANGLES 0 6 --glDrawArrays GL_TRIANGLES 0 6
glDrawArrays GL_TRIANGLES 0 3
when (cfig ^. gr_bloom) $ do when (cfig ^. gr_bloom) $ do
replicateM_ 1 $ replicateM_ 1 $
pingPongBetween pingPongBetween
@@ -270,7 +272,8 @@ doDrawing' win pdata u = do
glBindTextureUnit 0 (pdata ^. fboCloud . _2 . _2 . unTO) glBindTextureUnit 0 (pdata ^. fboCloud . _2 . _2 . unTO)
glDepthMask GL_FALSE glDepthMask GL_FALSE
glUseProgram (pdata ^. alphaDivideShader) glUseProgram (pdata ^. alphaDivideShader)
glDrawArrays GL_TRIANGLES 0 6 --glDrawArrays GL_TRIANGLES 0 6
glDrawArrays GL_TRIANGLES 0 3
----draw lightmap for cloud buffer ----draw lightmap for cloud buffer
glDepthMask GL_TRUE glDepthMask GL_TRUE
glDepthFunc GL_LESS glDepthFunc GL_LESS
@@ -327,20 +330,24 @@ doDrawing' win pdata u = do
glEnable GL_BLEND glEnable GL_BLEND
glBlendFuncSeparate GL_ZERO GL_ONE_MINUS_SRC_COLOR GL_ZERO GL_ONE glBlendFuncSeparate GL_ZERO GL_ONE_MINUS_SRC_COLOR GL_ZERO GL_ONE
glUseProgram (pdata ^. fullscreenShader) glUseProgram (pdata ^. fullscreenShader)
glDrawArrays GL_TRIANGLES 0 6 --glDrawArrays GL_TRIANGLES 0 6
glDrawArrays GL_TRIANGLES 0 3
glBlendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA glBlendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
-- bind base buffer for drawing clouds and bloom -- bind base buffer for drawing clouds and bloom
glBindFramebuffer GL_FRAMEBUFFER (pdata ^. fboBase . _1 . unFBO) glBindFramebuffer GL_FRAMEBUFFER (pdata ^. fboBase . _1 . unFBO)
glUseProgram (pdata ^. fullscreenShader) glUseProgram (pdata ^. fullscreenShader)
glBindTextureUnit 0 (pdata ^. fboWindow . _2 . _2 . unTO) glBindTextureUnit 0 (pdata ^. fboWindow . _2 . _2 . unTO)
glBlendFunc GL_DST_COLOR GL_ONE_MINUS_SRC_ALPHA glBlendFunc GL_DST_COLOR GL_ONE_MINUS_SRC_ALPHA
glDrawArrays GL_TRIANGLES 0 6 --glDrawArrays GL_TRIANGLES 0 6
glDrawArrays GL_TRIANGLES 0 3
glBindTextureUnit 0 (pdata ^. fboCloud . _2 . _1 . unTO) glBindTextureUnit 0 (pdata ^. fboCloud . _2 . _1 . unTO)
glBlendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA glBlendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
glDrawArrays GL_TRIANGLES 0 6 --glDrawArrays GL_TRIANGLES 0 6
glDrawArrays GL_TRIANGLES 0 3
glBindTextureUnit 0 (pdata ^. fboWindow . _2 . _1 . unTO) glBindTextureUnit 0 (pdata ^. fboWindow . _2 . _1 . unTO)
glBlendFunc GL_DST_COLOR GL_ONE_MINUS_SRC_ALPHA glBlendFunc GL_DST_COLOR GL_ONE_MINUS_SRC_ALPHA
glDrawArrays GL_TRIANGLES 0 6 --glDrawArrays GL_TRIANGLES 0 6
glDrawArrays GL_TRIANGLES 0 3
--Draw blurred bloom onto base buffer --Draw blurred bloom onto base buffer
glEnable GL_BLEND glEnable GL_BLEND
@@ -348,7 +355,8 @@ doDrawing' win pdata u = do
--glBlendFunc GL_ONE GL_ONE --glBlendFunc GL_ONE GL_ONE
glBindTextureUnit 0 (_unTO . snd $ _fboHalf1 pdata) glBindTextureUnit 0 (_unTO . snd $ _fboHalf1 pdata)
glUseProgram (pdata ^. fullscreenShader) glUseProgram (pdata ^. fullscreenShader)
glDrawArrays GL_TRIANGLES 0 6 --glDrawArrays GL_TRIANGLES 0 6
glDrawArrays GL_TRIANGLES 0 3
--set viewport for radial distortion --set viewport for radial distortion
--setViewportSize (round winx) (round winy) --setViewportSize (round winx) (round winy)
@@ -361,7 +369,8 @@ doDrawing' win pdata u = do
glBindTextureUnit 0 $ pdata ^. fboBase . _2 . _1 . unTO glBindTextureUnit 0 $ pdata ^. fboBase . _2 . _1 . unTO
glBindFramebuffer GL_FRAMEBUFFER 0 glBindFramebuffer GL_FRAMEBUFFER 0
glUseProgram (pdata ^. fullscreenShader) glUseProgram (pdata ^. fullscreenShader)
glDrawArrays GL_TRIANGLES 0 6 --glDrawArrays GL_TRIANGLES 0 6
glDrawArrays GL_TRIANGLES 0 3
rs' -> do rs' -> do
let rs = take 15 rs' let rs = take 15 rs'
glBindFramebuffer GL_FRAMEBUFFER 0 glBindFramebuffer GL_FRAMEBUFFER 0
@@ -371,7 +380,8 @@ doDrawing' win pdata u = do
glBindTextureUnit 1 $ pdata ^. fboBase . _2 . _1 . unTO glBindTextureUnit 1 $ pdata ^. fboBase . _2 . _1 . unTO
glUseProgram (pdata ^. barrelShader . _1) glUseProgram (pdata ^. barrelShader . _1)
glUniform1i 0 (fromIntegral (length rs)) glUniform1i 0 (fromIntegral (length rs))
glDrawArrays GL_TRIANGLES 0 6 --glDrawArrays GL_TRIANGLES 0 6
glDrawArrays GL_TRIANGLES 0 3
glBlendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA glBlendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
-- draw the overlay -- draw the overlay
glDepthFunc GL_ALWAYS glDepthFunc GL_ALWAYS
+11 -1
View File
@@ -42,7 +42,8 @@ preloadRender = do
glBindBufferBase GL_UNIFORM_BUFFER 1 lightubo glBindBufferBase GL_UNIFORM_BUFFER 1 lightubo
fulltexbo <- mglCreate glCreateBuffers fulltexbo <- mglCreate glCreateBuffers
let ftsize = fromIntegral $ sizeOf (0::Float) * 6 * 4 --let ftsize = fromIntegral $ sizeOf (0::Float) * 6 * 4
let ftsize = fromIntegral $ sizeOf (0::Float) * 3 * 4
withArray cornerList $ \ptr -> withArray cornerList $ \ptr ->
glNamedBufferStorage fulltexbo ftsize ptr 0 glNamedBufferStorage fulltexbo ftsize ptr 0
glBindBufferBase GL_UNIFORM_BUFFER 2 fulltexbo glBindBufferBase GL_UNIFORM_BUFFER 2 fulltexbo
@@ -226,6 +227,15 @@ preloadRender = do
--------------------end preloadRender --------------------end preloadRender
cornerList :: [Float] cornerList :: [Float]
cornerList = concat cornerList = concat
[ bl, br, tl
]
where
bl = [-1, -1, 0, 0]
br = [ 3, -1, 2, 0]
tl = [-1, 3, 0, 2]
cornerList' :: [Float]
cornerList' = concat
[ bl, br, tl [ bl, br, tl
, tl, br, tr , tl, br, tr
] ]