This commit is contained in:
2023-03-08 18:31:32 +00:00
parent 2279af5510
commit 48966dde1a
9 changed files with 283 additions and 407 deletions
+36 -33
View File
@@ -5,6 +5,7 @@ module Preload.Render (
cleanUpRenderPreload,
) where
import Control.Lens
import Control.Monad
import Data.Preload.Render
import qualified Data.Vector.Mutable as MV
@@ -46,8 +47,8 @@ preloadRender = do
bindVertexArrayObject $= Just wpColVAOname
setupVertexAttribPointer 0 4 8 0
setupVertexAttribPointer 1 4 8 4
let wpVAO = VAO{_vao = wpVAOname, _vaoVBO = wpVBO}
wpColVAO = VAO{_vao = wpColVAOname, _vaoVBO = wpVBO}
let wpVAO = VAO{_vaoName = wpVAOname, _vaoVBO = wpVBO}
wpColVAO = VAO{_vaoName = wpColVAOname, _vaoVBO = wpVBO}
-- setup window points VBO, VAOs and shaders
winVBOname <- genObjectName
winVBOptr <- mallocArray (8 * numDrawableWalls)
@@ -62,7 +63,7 @@ preloadRender = do
bindVertexArrayObject $= Just winColVAOname
setupVertexAttribPointer 0 4 8 0
setupVertexAttribPointer 1 4 8 4
let winColVAO = VAO{_vao = winColVAOname, _vaoVBO = winVBO}
let winColVAO = VAO{_vaoName = winColVAOname, _vaoVBO = winVBO}
-- setup shape geometry/cap VBO and two VAOs
shEBOname <- genObjectName
shEBOptr <- mallocArray numDrawableElements
@@ -93,8 +94,8 @@ preloadRender = do
bindBuffer ArrayBuffer $= Just shVBOname
setupVertexAttribPointer 0 3 7 0
bindBuffer ElementArrayBuffer $= Just shEBOname
let shPosColVAO = VAO{_vao = shPosColVAOname, _vaoVBO = shVBO}
shPosVAO = VAO{_vao = shPosVAOname, _vaoVBO = shVBO}
let shPosColVAO = VAO{_vaoName = shPosColVAOname, _vaoVBO = shVBO}
shPosVAO = VAO{_vaoName = shPosVAOname, _vaoVBO = shVBO}
--setup silhouette edge VAO
shEdgeVAOname <- genObjectName
bindVertexArrayObject $= Just shEdgeVAOname
@@ -111,56 +112,58 @@ preloadRender = do
, StreamDraw
)
let silEBO = EBO{_ebo = silEBOname, _eboPtr = silEBOptr}
shEdgeVAO = VAO{_vao = shEdgeVAOname, _vaoVBO = shVBO}
shEdgeVAO = VAO{_vaoName = shEdgeVAOname, _vaoVBO = shVBO}
-- lighting shaders
lightingWallShadShad <-
makeShaderUsingVAO' "lighting/wallShadow" [vert', geom', frag'] EPoints wpVAO
>>= addUniforms' ["lightPos"]
makeShaderUsingVAO "lighting/wallShadow" [vert', geom', frag'] EPoints wpVAO
>>= addUniforms ["lightPos"]
lightingCapShad <-
makeShaderUsingVAO' "lighting/cap" [vert', geom', frag'] ETriangles shPosVAO
>>= addUniforms' ["lightPos"]
makeShaderUsingVAO "lighting/cap" [vert', geom', frag'] ETriangles shPosVAO
>>= addUniforms ["lightPos"]
lightingLineShadowShad <-
makeShaderUsingVAO' "lighting/lineShadow" [vert', geom', frag'] ELinesAdjacency shEdgeVAO
>>= addUniforms' ["lightPos", "radiusUniform"]
makeShaderUsingVAO "lighting/lineShadow" [vert', geom', frag'] ELinesAdjacency shEdgeVAO
>>= addUniforms ["lightPos", "radiusUniform"]
-- positional shader
positionalBlankShad <- makeShader' "positional/blank" [vert', frag'] [3] ETriangles
positionalBlankShad <- makeShader "positional/blank" [vert', frag'] [3] ETriangles
-- 2D draw shaders
bslist <- makeShader' "dualTwoD/basic" [vert', frag'] [3, 4] ETriangles
bslista <- makeShader' "dualTwoD/basic" [vert', frag'] [3, 4] ETriangles
aslist <- makeShader' "dualTwoD/arc" [vert', frag'] [3, 4, 3] ETriangles
eslist <- makeShader' "dualTwoD/ellipse" [vert', geom', frag'] [3, 4] ETriangles
bezierQuadShader <- makeShader' "dualTwoD/bezierQuad" [vert', frag'] [3, 4, 4] ETriangleStrip
bslist <- makeShader "dualTwoD/basic" [vert', frag'] [3, 4] ETriangles
bslista <- makeShader "dualTwoD/basic" [vert', frag'] [3, 4] ETriangles
aslist <- makeShader "dualTwoD/arc" [vert', frag'] [3, 4, 3] ETriangles
eslist <- makeShader "dualTwoD/ellipse" [vert', geom', frag'] [3, 4] ETriangles
bezierQuadShader <- makeShader "dualTwoD/bezierQuad" [vert', frag'] [3, 4, 4] ETriangleStrip
cslist <-
makeShader' "dualTwoD/character" [vert', frag'] [3, 4, 2] ETriangles
>>= vaddTextureNoFilter' "data/texture/charMap.png"
makeShader "dualTwoD/character" [vert', frag'] [3, 4, 2] ETriangles
>>= vaddTextureNoFilter "data/texture/charMap.png"
-- this should really be a 2d texture array
basicTweakZShad <- makeShader' "dualTwoD/basicTweakZ" [vert', frag'] [4, 4] ETriangles
basicTweakZShad <- makeShader "dualTwoD/basicTweakZ" [vert', frag'] [4, 4] ETriangles
-- fullscreen shaders
--fullscreenAlphaHalveShad <- makeShaderSized "fullscreen/alphaHalve" [vert,frag] [2] 4 ETriangleStrip
--pokeArray (shadVBOptr fullscreenAlphaHalveShad) $ concat cornerListNoCoord
-- texture shaders, no textures attached
fsShad <- makeShaderSized' "texture/simple" [vert', frag'] [2, 2] 4 ETriangleStrip
fsShad <- makeShaderSized "texture/simple" [vert', frag'] [2, 2] 4 ETriangleStrip
-- note we directly poke the shader vertex data here
-- could possibly use an indirect draw call
pokeArray (shadVBOptr' fsShad) $ concat cornerList
bloomBlurShad <- makeShaderUsingShaderVAO' "texture/bloomBlur" [vert', frag'] ETriangleStrip fsShad
colorBlurShad <- makeShaderUsingShaderVAO' "texture/colorBlur" [vert', frag'] ETriangleStrip fsShad
grayscaleShad <- makeShaderUsingShaderVAO' "texture/grayscale" [vert', frag'] ETriangleStrip fsShad
let fsshadvao = fsShad ^. shadVAO'
bloomBlurShad <- makeShaderUsingVAO "texture/bloomBlur" [vert', frag'] ETriangleStrip fsshadvao
colorBlurShad <- makeShaderUsingVAO "texture/colorBlur" [vert', frag'] ETriangleStrip fsshadvao
grayscaleShad <- makeShaderUsingVAO "texture/grayscale" [vert', frag'] ETriangleStrip fsshadvao
lightingTextureShad <-
makeShaderUsingShaderVAO' "lighting/texture" [vert', frag'] ETriangleStrip fsShad
>>= addUniforms' ["lightPos", "lumRad"]
barrelShad <- makeShader' "texture/barrel" [vert', geom', frag'] [2, 2, 2, 1] EPoints
makeShaderUsingVAO "lighting/texture" [vert', frag'] ETriangleStrip fsshadvao
>>= addUniforms ["lightPos", "lumRad"]
barrelShad <- makeShader "texture/barrel" [vert', geom', frag'] [2, 2, 2, 1] EPoints
-- blank wallShader
wallBlankShad <- makeShaderUsingVAO' "wall/blank" [vert', geom', frag'] EPoints wpColVAO
wallBlankShad <- makeShaderUsingVAO "wall/blank" [vert', geom', frag'] EPoints wpColVAO
-- textured wallShader
wallTextureShad <-
makeShaderUsingVAO' "wall/texture" [vert', geom', frag'] EPoints wpColVAO
>>= addTexture' "data/texture/grayscaleDirt.png"
makeShaderUsingVAO "wall/texture" [vert', geom', frag'] EPoints wpColVAO
>>= addTexture "data/texture/grayscaleDirt.png"
---- texture array shader
textArrayShad <-
makeShader' "texture/arrayPos" [vert', frag'] [3, 3] ETriangles
>>= addTextureArray' "data/texture/ayene_wooden_floor_transformed.png"
makeShader "texture/arrayPos" [vert', frag'] [3, 3] ETriangles
>>= addTextureArray "data/texture/ayene_wooden_floor_transformed.png"
-- >>= addTextureArray "data/texture/ayene_wooden_floor.png"
-- bind fixed vertex data
bindShaderBuffers' [fsShad] [4, 4]
+41 -26
View File
@@ -1,41 +1,56 @@
{-# LANGUAGE OverloadedStrings #-}
module Preload.Update
( pdataResizeUpdate
) where
module Preload.Update (
pdataResizeUpdate,
) where
import Control.Lens
import qualified Data.ByteString as BS
import qualified Data.ByteString.Char8 as BSC
import Data.Preload
import Data.Preload.Render
import Framebuffer.Update
import Shader.Compile
import Shader.Data
import Data.Preload.Render
import qualified Data.ByteString as BS
import qualified Data.ByteString.Char8 as BSC
pdataResizeUpdate
:: Int -- ^ Scaled width
-> Int -- ^ Scaled height
-> Int -- ^ Full width
-> Int -- ^ Full height
-> PreloadData
-> IO PreloadData
pdataResizeUpdate ::
-- | Scaled width
Int ->
-- | Scaled height
Int ->
-- | Full width
Int ->
-- | Full height
Int ->
PreloadData ->
IO PreloadData
pdataResizeUpdate xsize ysize xfull yfull pdata = do
rd <- renderDataResizeUpdate xsize ysize xfull yfull (_renderData pdata)
return (pdata {_renderData = rd})
return (pdata{_renderData = rd})
renderDataResizeUpdate
:: Int -- ^ Scaled width
-> Int -- ^ Scaled height
-> Int -- ^ Full width
-> Int -- ^ Full height
-> RenderData
-> IO RenderData
renderDataResizeUpdate ::
-- | Scaled width
Int ->
-- | Scaled height
Int ->
-- | Full width
Int ->
-- | Full height
Int ->
RenderData ->
IO RenderData
renderDataResizeUpdate xsize ysize xfull yfull rdata = do
rdata' <- sizeFBOs xsize ysize xfull yfull rdata
bbVert <- BS.readFile "shader/texture/bloomBlur.vert"
bbFrag <- BS.readFile "shader/texture/bloomBlur.frag"
let (bh,bmid) = BS.breakSubstring "(" bbFrag
(_,btt) = BS.breakSubstring ")" bmid
let (bh, bmid) = BS.breakSubstring "(" bbFrag
(_, btt) = BS.breakSubstring ")" bmid
bbFrag' = BS.append bh $ BS.append (BSC.pack $ '(' : show xsize ++ "," ++ show ysize) btt
--BSC.putStrLn bbFrag'
bbShad <- makeByteStringShaderUsingVAO' "bloomBlur" [(vert',bbVert),(frag',bbFrag')] ETriangleStrip
(_fullscreenShader rdata)
return (rdata' {_bloomBlurShader = bbShad})
bbShad <-
makeByteStringShaderUsingVAO
"bloomBlur"
[(vert', bbVert), (frag', bbFrag')]
ETriangleStrip
(rdata ^. fullscreenShader . shadVAO')
return (rdata'{_bloomBlurShader = bbShad})