Continue render refactor
This commit is contained in:
@@ -22,23 +22,23 @@ data RenderData = RenderData
|
|||||||
, _shadowEdgeShader :: FullShader
|
, _shadowEdgeShader :: FullShader
|
||||||
, _shadowCapShader :: FullShader
|
, _shadowCapShader :: FullShader
|
||||||
, _shadowWallShader :: FullShader
|
, _shadowWallShader :: FullShader
|
||||||
, _shadowLightShader :: FullShader
|
, _shadowLightShader :: (FullShader,VBO)
|
||||||
, _shadowCombineShader :: FullShader
|
, _shadowCombineShader :: (FullShader,VBO)
|
||||||
, _positionalBlankShader :: FullShader
|
, _positionalBlankShader :: (FullShader,VBO)
|
||||||
, _wallBlankShader :: FullShader
|
, _wallBlankShader :: FullShader
|
||||||
, _windowShader :: FullShader
|
, _windowShader :: FullShader
|
||||||
, _wallTextureShader :: FullShader
|
, _wallTextureShader :: FullShader
|
||||||
, _textureArrayShader :: FullShader
|
, _textureArrayShader :: (FullShader,VBO)
|
||||||
, _fullscreenShader :: FullShader
|
, _fullscreenShader :: (FullShader,VBO)
|
||||||
, --, _fullscreenAlphaHalveShader :: FullShader
|
, --, _fullscreenAlphaHalveShader :: (FullShader,VBO)
|
||||||
_bloomBlurShader :: FullShader
|
_bloomBlurShader :: FullShader
|
||||||
, _colorBlurShader :: FullShader
|
, _colorBlurShader :: FullShader
|
||||||
, _barrelShader :: FullShader
|
, _barrelShader :: (FullShader,VBO)
|
||||||
, _grayscaleShader :: FullShader
|
, _grayscaleShader :: FullShader
|
||||||
, _shapeShader :: FullShader
|
, _shapeShader :: (FullShader,VBO)
|
||||||
, _shapeEBO :: EBO
|
, _shapeEBO :: EBO
|
||||||
, _silhouetteEBO :: EBO
|
, _silhouetteEBO :: EBO
|
||||||
, _pictureShaders :: MV.MVector (PrimState IO) FullShader
|
, _pictureShaders :: MV.MVector (PrimState IO) (FullShader,VBO)
|
||||||
, _fbo2 :: (FBO, TO)
|
, _fbo2 :: (FBO, TO)
|
||||||
, _fbo3 :: (FBO, TO)
|
, _fbo3 :: (FBO, TO)
|
||||||
, _fboHalf1 :: (FBO, TO)
|
, _fboHalf1 :: (FBO, TO)
|
||||||
@@ -56,6 +56,9 @@ data RenderData = RenderData
|
|||||||
, _matUBO :: GLuint -- BufferObject id
|
, _matUBO :: GLuint -- BufferObject id
|
||||||
, _isoMatUBO :: GLuint -- BufferObject id
|
, _isoMatUBO :: GLuint -- BufferObject id
|
||||||
, _lightsUBO :: GLuint -- BufferObject id
|
, _lightsUBO :: GLuint -- BufferObject id
|
||||||
|
, _vboWalls :: VBO
|
||||||
|
, _vboWindows :: VBO
|
||||||
|
, _vboShapes :: VBO
|
||||||
}
|
}
|
||||||
|
|
||||||
makeLenses ''RenderData
|
makeLenses ''RenderData
|
||||||
|
|||||||
+20
-18
@@ -70,15 +70,17 @@ doDrawing' win pdata u = do
|
|||||||
wp
|
wp
|
||||||
)
|
)
|
||||||
( pokeWallsWindowsFloor
|
( pokeWallsWindowsFloor
|
||||||
(shadVBOptr $ _wallTextureShader pdata)
|
--(shadVBOptr $ _wallTextureShader pdata)
|
||||||
(shadVBOptr $ _windowShader pdata)
|
--(shadVBOptr $ _windowShader pdata)
|
||||||
|
( pdata ^. vboWalls . vboPtr)
|
||||||
|
( pdata ^. vboWindows . vboPtr)
|
||||||
(shadVBOptr $ _textureArrayShader pdata)
|
(shadVBOptr $ _textureArrayShader pdata)
|
||||||
wallPointsCol
|
wallPointsCol
|
||||||
windowPoints
|
windowPoints
|
||||||
(w ^. cWorld . floorTiles)
|
(w ^. cWorld . floorTiles)
|
||||||
)
|
)
|
||||||
( pokeShape
|
( pokeShape
|
||||||
(_vboPtr $ _vaoVBO $ _shadVAO' $ _shapeShader pdata)
|
(_vboPtr $ _vboShapes pdata)
|
||||||
(_eboPtr $ _shapeEBO pdata)
|
(_eboPtr $ _shapeEBO pdata)
|
||||||
(_eboPtr $ _silhouetteEBO pdata)
|
(_eboPtr $ _silhouetteEBO pdata)
|
||||||
(0, 0, 0)
|
(0, 0, 0)
|
||||||
@@ -88,10 +90,10 @@ doDrawing' win pdata u = do
|
|||||||
bindShaderLayers shadV layerCounts
|
bindShaderLayers shadV layerCounts
|
||||||
uncurry bindShaderBuffers $
|
uncurry bindShaderBuffers $
|
||||||
unzip
|
unzip
|
||||||
[ (_wallTextureShader pdata, nWalls)
|
[ ((pdata ^. vboWalls), nWalls)
|
||||||
, (_shapeShader pdata, nShapeVs)
|
, (_vboShapes pdata, nShapeVs)
|
||||||
, (_windowShader pdata, nWins)
|
, (pdata ^. vboWindows, nWins)
|
||||||
, (_textureArrayShader pdata, nFls)
|
, (snd $ _textureArrayShader pdata, nFls)
|
||||||
]
|
]
|
||||||
glNamedBufferSubData
|
glNamedBufferSubData
|
||||||
(_eboName $ _shapeEBO pdata)
|
(_eboName $ _shapeEBO pdata)
|
||||||
@@ -134,15 +136,15 @@ doDrawing' win pdata u = do
|
|||||||
renderLayer BottomLayer shadV layerCounts
|
renderLayer BottomLayer shadV layerCounts
|
||||||
--draw object shapes onto base buffer
|
--draw object shapes onto base buffer
|
||||||
let fs = _shapeShader pdata
|
let fs = _shapeShader pdata
|
||||||
glUseProgram (_shadName fs)
|
glUseProgram (_shadName $ fst fs)
|
||||||
glBindVertexArray $ fs ^. shadVAO' . vaoName
|
glBindVertexArray $ fs ^. _1 . shadVAO' . vaoName
|
||||||
glDrawElements
|
glDrawElements
|
||||||
(marshalEPrimitiveMode $ _shadPrim' fs)
|
(marshalEPrimitiveMode $ _shadPrim' $ fst fs)
|
||||||
(fromIntegral nIndices)
|
(fromIntegral nIndices)
|
||||||
GL_UNSIGNED_SHORT
|
GL_UNSIGNED_SHORT
|
||||||
nullPtr
|
nullPtr
|
||||||
--draw floor onto base buffer
|
--draw floor onto base buffer
|
||||||
drawShader (_textureArrayShader pdata) nFls
|
drawShader (fst $ _textureArrayShader pdata) nFls
|
||||||
--draw lightmap into its own buffer
|
--draw lightmap into its own buffer
|
||||||
createLightMap
|
createLightMap
|
||||||
cfig
|
cfig
|
||||||
@@ -161,7 +163,7 @@ doDrawing' win pdata u = do
|
|||||||
glBindTexture GL_TEXTURE_2D (pdata ^. fboLighting . _2 . unTO)
|
glBindTexture GL_TEXTURE_2D (pdata ^. fboLighting . _2 . unTO)
|
||||||
glEnable GL_BLEND
|
glEnable GL_BLEND
|
||||||
glBlendFunc GL_ZERO GL_ONE_MINUS_SRC_COLOR
|
glBlendFunc GL_ZERO GL_ONE_MINUS_SRC_COLOR
|
||||||
drawShader (_fullscreenShader pdata) 4
|
drawShader (fst $ _fullscreenShader pdata) 4
|
||||||
with GL_COLOR_ATTACHMENT0 $ \ptr ->
|
with GL_COLOR_ATTACHMENT0 $ \ptr ->
|
||||||
glInvalidateNamedFramebufferData
|
glInvalidateNamedFramebufferData
|
||||||
(pdata ^. fboLighting . _1 . unFBO)
|
(pdata ^. fboLighting . _1 . unFBO)
|
||||||
@@ -231,7 +233,7 @@ doDrawing' win pdata u = do
|
|||||||
glBindTexture GL_TEXTURE_2D (_unTO . snd $ _fboLighting pdata)
|
glBindTexture GL_TEXTURE_2D (_unTO . snd $ _fboLighting pdata)
|
||||||
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
|
||||||
drawShader (_fullscreenShader pdata) 4
|
drawShader (fst $ _fullscreenShader pdata) 4
|
||||||
glBlendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
|
glBlendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
|
||||||
-- bind base buffer for drawing bloom then clouds
|
-- bind base buffer for drawing bloom then clouds
|
||||||
glBindFramebuffer GL_FRAMEBUFFER (_unFBO (fst (_fboBase pdata)))
|
glBindFramebuffer GL_FRAMEBUFFER (_unFBO (fst (_fboBase pdata)))
|
||||||
@@ -239,11 +241,11 @@ doDrawing' win pdata u = do
|
|||||||
glEnable GL_BLEND
|
glEnable GL_BLEND
|
||||||
glBlendFunc GL_SRC_ALPHA GL_ONE
|
glBlendFunc GL_SRC_ALPHA GL_ONE
|
||||||
glBindTexture GL_TEXTURE_2D (_unTO . snd $ _fboHalf1 pdata)
|
glBindTexture GL_TEXTURE_2D (_unTO . snd $ _fboHalf1 pdata)
|
||||||
drawShader (_fullscreenShader pdata) 4
|
drawShader (fst $ _fullscreenShader pdata) 4
|
||||||
glBlendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
|
glBlendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
|
||||||
--draw shadowed clouds onto base buffer
|
--draw shadowed clouds onto base buffer
|
||||||
glBindTexture GL_TEXTURE_2D (_unTO . fst . snd $ _fboCloud pdata)
|
glBindTexture GL_TEXTURE_2D (_unTO . fst . snd $ _fboCloud pdata)
|
||||||
drawShader (_fullscreenShader pdata) 4
|
drawShader (fst $ _fullscreenShader pdata) 4
|
||||||
--set viewport for radial distortion
|
--set viewport for radial distortion
|
||||||
setViewportSize (round winx) (round winy)
|
setViewportSize (round winx) (round winy)
|
||||||
glDepthFunc GL_ALWAYS
|
glDepthFunc GL_ALWAYS
|
||||||
@@ -253,13 +255,13 @@ doDrawing' win pdata u = do
|
|||||||
[] -> do
|
[] -> do
|
||||||
bindTO $ fst $ snd $ _fboBase pdata
|
bindTO $ fst $ snd $ _fboBase pdata
|
||||||
glBindFramebuffer GL_FRAMEBUFFER 0
|
glBindFramebuffer GL_FRAMEBUFFER 0
|
||||||
drawShader (_fullscreenShader pdata) 4
|
drawShader (fst $ _fullscreenShader pdata) 4
|
||||||
rds -> do
|
rds -> do
|
||||||
let bindDrawDist :: Distortion -> IO ()
|
let bindDrawDist :: Distortion -> IO ()
|
||||||
bindDrawDist (RadialDistortion (V2 a b) (V2 c d) (V2 e f) g) = do
|
bindDrawDist (RadialDistortion (V2 a b) (V2 c d) (V2 e f) g) = do
|
||||||
pokeArray (shadVBOptr $ _barrelShader pdata) [a, b, c, d, e, f, g]
|
pokeArray (shadVBOptr $ _barrelShader pdata) [a, b, c, d, e, f, g]
|
||||||
bindShaderBuffers [_barrelShader pdata] [1]
|
bindShaderBuffers [snd $ _barrelShader pdata] [1]
|
||||||
drawShader (_barrelShader pdata) 1
|
drawShader (fst $ _barrelShader pdata) 1
|
||||||
fboList =
|
fboList =
|
||||||
take (length rds - 1) (concat (repeat [fst $ _fbo2 pdata, fst $ _fbo3 pdata]))
|
take (length rds - 1) (concat (repeat [fst $ _fbo2 pdata, fst $ _fbo3 pdata]))
|
||||||
++ [FBO 0]
|
++ [FBO 0]
|
||||||
|
|||||||
+17
-16
@@ -17,22 +17,23 @@ import Shader.Parameters
|
|||||||
import Shape.Data
|
import Shape.Data
|
||||||
|
|
||||||
drawCPUShadows :: RenderData -> Shape -> Point3 -> Float -> IO ()
|
drawCPUShadows :: RenderData -> Shape -> Point3 -> Float -> IO ()
|
||||||
drawCPUShadows pdata s pos rad = do
|
drawCPUShadows _ _ _ _ = return ()
|
||||||
let theshad = pdata ^. positionalBlankShader
|
--drawCPUShadows pdata s pos rad = do
|
||||||
theptr = _vboPtr $ _vaoVBO $ _shadVAO' theshad
|
-- let theshad = pdata ^. positionalBlankShader
|
||||||
i <- VFSM.foldlM' (pokeShapeShad pos rad theptr) 0 $ VFSM.fromList s
|
-- theptr = _vboPtr $ _vaoVBO $ _shadVAO' theshad
|
||||||
glBufferSubData
|
-- i <- VFSM.foldlM' (pokeShapeShad pos rad theptr) 0 $ VFSM.fromList s
|
||||||
(theshad ^. shadVAO' . vaoVBO . vboName)
|
-- glBufferSubData
|
||||||
0
|
-- (theshad ^. shadVAO' . vaoVBO . vboName)
|
||||||
(fromIntegral $ floatSize * i)
|
-- 0
|
||||||
(theshad ^. shadVAO' . vaoVBO . vboPtr)
|
-- (fromIntegral $ floatSize * i)
|
||||||
glUseProgram (theshad ^. shadName)
|
-- (theshad ^. shadVAO' . vaoVBO . vboPtr)
|
||||||
glBindVertexArray . _vaoName $ _shadVAO' theshad
|
-- glUseProgram (theshad ^. shadName)
|
||||||
glDrawArrays
|
-- glBindVertexArray . _vaoName $ _shadVAO' theshad
|
||||||
(marshalEPrimitiveMode $ _shadPrim' theshad)
|
-- glDrawArrays
|
||||||
0
|
-- (marshalEPrimitiveMode $ _shadPrim' theshad)
|
||||||
(fromIntegral i)
|
-- 0
|
||||||
return ()
|
-- (fromIntegral i)
|
||||||
|
-- return ()
|
||||||
|
|
||||||
pokeShapeShad :: Point3 -> Float -> Ptr Float -> Int -> ShapeObj -> IO Int
|
pokeShapeShad :: Point3 -> Float -> Ptr Float -> Int -> ShapeObj -> IO Int
|
||||||
pokeShapeShad pos r theptr i so = do
|
pokeShapeShad pos r theptr i so = do
|
||||||
|
|||||||
+19
-15
@@ -59,8 +59,8 @@ preloadRender = do
|
|||||||
glBindVertexArray wpColVAOname
|
glBindVertexArray wpColVAOname
|
||||||
setupVertexAttribPointer wpColVAOname wpVBOname 0 4 8 0
|
setupVertexAttribPointer wpColVAOname wpVBOname 0 4 8 0
|
||||||
setupVertexAttribPointer wpColVAOname wpVBOname 1 4 8 4
|
setupVertexAttribPointer wpColVAOname wpVBOname 1 4 8 4
|
||||||
let wpVAO = VAO{_vaoName = wpVAOname, _vaoVBO = wpVBO, _vaoAttribSizes = [4], _vaoStride = 8}
|
let wpVAO = VAO{_vaoName = wpVAOname, _vaoAttribSizes = [4], _vaoStride = 8}
|
||||||
wpColVAO = VAO{_vaoName = wpColVAOname, _vaoVBO = wpVBO, _vaoAttribSizes = [4,4], _vaoStride = 8}
|
wpColVAO = VAO{_vaoName = wpColVAOname, _vaoAttribSizes = [4,4], _vaoStride = 8}
|
||||||
-- setup window points VBO, VAOs and shaders
|
-- setup window points VBO, VAOs and shaders
|
||||||
winVBOname <- mglCreate glCreateBuffers
|
winVBOname <- mglCreate glCreateBuffers
|
||||||
winVBOptr <- mallocArray (8 * numDrawableWalls)
|
winVBOptr <- mallocArray (8 * numDrawableWalls)
|
||||||
@@ -76,7 +76,7 @@ preloadRender = do
|
|||||||
setupVertexAttribPointer winColVAOname winVBOname 0 4 8 0
|
setupVertexAttribPointer winColVAOname winVBOname 0 4 8 0
|
||||||
setupVertexAttribPointer winColVAOname winVBOname 1 4 8 4
|
setupVertexAttribPointer winColVAOname winVBOname 1 4 8 4
|
||||||
let winColVAO = VAO
|
let winColVAO = VAO
|
||||||
{_vaoName = winColVAOname, _vaoVBO = winVBO, _vaoAttribSizes = [4,4], _vaoStride = 8}
|
{_vaoName = winColVAOname, _vaoAttribSizes = [4,4], _vaoStride = 8}
|
||||||
-- setup shape geometry/cap VBO and two VAOs
|
-- setup shape geometry/cap VBO and two VAOs
|
||||||
shEBOptr <- mallocArray numDrawableElements
|
shEBOptr <- mallocArray numDrawableElements
|
||||||
shEBOname <- mglCreate glCreateBuffers
|
shEBOname <- mglCreate glCreateBuffers
|
||||||
@@ -109,8 +109,8 @@ preloadRender = do
|
|||||||
--bindBuffer ElementArrayBuffer $= Just shEBOname
|
--bindBuffer ElementArrayBuffer $= Just shEBOname
|
||||||
glVertexArrayElementBuffer shPosVAOname shEBOname
|
glVertexArrayElementBuffer shPosVAOname shEBOname
|
||||||
let shPosColVAO = VAO
|
let shPosColVAO = VAO
|
||||||
{_vaoName = shPosColVAOname, _vaoVBO = shVBO, _vaoAttribSizes = [3,4], _vaoStride = 7}
|
{_vaoName = shPosColVAOname, _vaoAttribSizes = [3,4], _vaoStride = 7}
|
||||||
shPosVAO = VAO{_vaoName = shPosVAOname, _vaoVBO = shVBO, _vaoAttribSizes = [3], _vaoStride = 7}
|
shPosVAO = VAO{_vaoName = shPosVAOname, _vaoAttribSizes = [3], _vaoStride = 7}
|
||||||
--setup silhouette edge VAO
|
--setup silhouette edge VAO
|
||||||
--shEdgeVAOname <- genObjectName
|
--shEdgeVAOname <- genObjectName
|
||||||
--bindVertexArrayObject $= Just shEdgeVAOname
|
--bindVertexArrayObject $= Just shEdgeVAOname
|
||||||
@@ -129,7 +129,7 @@ preloadRender = do
|
|||||||
nullPtr
|
nullPtr
|
||||||
GL_STREAM_DRAW
|
GL_STREAM_DRAW
|
||||||
let silEBO = EBO{_eboName = silEBOname, _eboPtr = silEBOptr}
|
let silEBO = EBO{_eboName = silEBOname, _eboPtr = silEBOptr}
|
||||||
shEdgeVAO = VAO{_vaoName = shEdgeVAOname, _vaoVBO = shVBO, _vaoAttribSizes = [3], _vaoStride = 7}
|
shEdgeVAO = VAO{_vaoName = shEdgeVAOname, _vaoAttribSizes = [3], _vaoStride = 7}
|
||||||
-- shEdgeVAO is unecessary?
|
-- shEdgeVAO is unecessary?
|
||||||
-- lighting shaders
|
-- lighting shaders
|
||||||
lightingWallShadShad <-
|
lightingWallShadShad <-
|
||||||
@@ -152,7 +152,7 @@ preloadRender = do
|
|||||||
[1] 1
|
[1] 1
|
||||||
EPoints
|
EPoints
|
||||||
shadowcombineshader <- makeShaderSized "shadow/combine" [vert,geom,frag] [1] 1 EPoints
|
shadowcombineshader <- makeShaderSized "shadow/combine" [vert,geom,frag] [1] 1 EPoints
|
||||||
poke (shadVBOptr' shadowlightshader) 1
|
poke (shadVBOptr shadowlightshader) 1
|
||||||
|
|
||||||
-- positional shader
|
-- positional shader
|
||||||
positionalBlankShad <- makeShader "positional/blank" [vert, frag] [3] ETriangles
|
positionalBlankShad <- makeShader "positional/blank" [vert, frag] [3] ETriangles
|
||||||
@@ -164,7 +164,7 @@ preloadRender = do
|
|||||||
bezierQuadShader <- makeShader "dualTwoD/bezierQuad" [vert, frag] [3, 4, 4] ETriangleStrip
|
bezierQuadShader <- makeShader "dualTwoD/bezierQuad" [vert, frag] [3, 4, 4] ETriangleStrip
|
||||||
cslist <-
|
cslist <-
|
||||||
makeShader "dualTwoD/character" [vert, frag] [3, 4, 2] ETriangles
|
makeShader "dualTwoD/character" [vert, frag] [3, 4, 2] ETriangles
|
||||||
>>= vaddTextureNoFilter "data/texture/charMap.png"
|
>>= (_1 (vaddTextureNoFilter "data/texture/charMap.png"))
|
||||||
-- this should really be a 2d texture array
|
-- 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
|
-- fullscreen shaders
|
||||||
@@ -174,9 +174,9 @@ preloadRender = do
|
|||||||
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
|
-- note we directly poke the shader vertex data here
|
||||||
-- could possibly use an indirect draw call
|
-- could possibly use an indirect draw call
|
||||||
pokeArray (shadVBOptr' fsShad) $ concat cornerList
|
pokeArray (shadVBOptr fsShad) $ concat cornerList
|
||||||
|
|
||||||
let fsshadvao = fsShad ^. shadVAO'
|
let fsshadvao = fsShad ^. _1 . shadVAO'
|
||||||
|
|
||||||
bloomBlurShad <- makeShaderUsingVAO "texture/bloomBlur" [vert, frag] ETriangleStrip fsshadvao
|
bloomBlurShad <- makeShaderUsingVAO "texture/bloomBlur" [vert, frag] ETriangleStrip fsshadvao
|
||||||
colorBlurShad <- makeShaderUsingVAO "texture/colorBlur" [vert, frag] ETriangleStrip fsshadvao
|
colorBlurShad <- makeShaderUsingVAO "texture/colorBlur" [vert, frag] ETriangleStrip fsshadvao
|
||||||
@@ -199,7 +199,7 @@ preloadRender = do
|
|||||||
>>= addTextureArray "data/texture/ayene_wooden_floor_transformed.png"
|
>>= addTextureArray "data/texture/ayene_wooden_floor_transformed.png"
|
||||||
-- >>= addTextureArray "data/texture/ayene_wooden_floor.png"
|
-- >>= addTextureArray "data/texture/ayene_wooden_floor.png"
|
||||||
-- bind fixed vertex data
|
-- bind fixed vertex data
|
||||||
bindShaderBuffers [fsShad] [4, 4]
|
bindShaderBuffers [snd fsShad] [4, 4]
|
||||||
framebuf2 <- setupTextureFramebuffer 800 600
|
framebuf2 <- setupTextureFramebuffer 800 600
|
||||||
framebuf3 <- setupTextureFramebuffer 800 600
|
framebuf3 <- setupTextureFramebuffer 800 600
|
||||||
|
|
||||||
@@ -245,7 +245,7 @@ preloadRender = do
|
|||||||
return $
|
return $
|
||||||
RenderData
|
RenderData
|
||||||
{ _pictureShaders = shadV
|
{ _pictureShaders = shadV
|
||||||
, _shapeShader = bslista{_shadVAO' = shPosColVAO}
|
, _shapeShader = bslista & _1 . shadVAO' .~ shPosColVAO
|
||||||
, _shapeEBO = shEBO
|
, _shapeEBO = shEBO
|
||||||
, _silhouetteEBO = silEBO
|
, _silhouetteEBO = silEBO
|
||||||
, _lightingCapShader = lightingCapShad
|
, _lightingCapShader = lightingCapShad
|
||||||
@@ -284,6 +284,9 @@ preloadRender = do
|
|||||||
, _matUBO = theUBO
|
, _matUBO = theUBO
|
||||||
, _isoMatUBO = isoUBO
|
, _isoMatUBO = isoUBO
|
||||||
, _lightsUBO = lightsubo
|
, _lightsUBO = lightsubo
|
||||||
|
, _vboWalls = wpVBO
|
||||||
|
, _vboWindows = winVBO
|
||||||
|
, _vboShapes = shVBO
|
||||||
}
|
}
|
||||||
|
|
||||||
--------------------end preloadRender
|
--------------------end preloadRender
|
||||||
@@ -309,8 +312,9 @@ initializeGLState = do
|
|||||||
glEnable GL_DEPTH_TEST
|
glEnable GL_DEPTH_TEST
|
||||||
|
|
||||||
cleanUpRenderPreload :: RenderData -> IO ()
|
cleanUpRenderPreload :: RenderData -> IO ()
|
||||||
cleanUpRenderPreload pd = do
|
cleanUpRenderPreload _ = return ()
|
||||||
|
--cleanUpRenderPreload pd = do
|
||||||
-- TODO fix this
|
-- TODO fix this
|
||||||
--mapM_ freeShaderPointers $ _pictureShaders pd
|
--mapM_ freeShaderPointers $ _pictureShaders pd
|
||||||
freeShaderPointers' $ _lightingWallShadShader pd
|
--freeShaderPointers' $ _lightingWallShadShader pd
|
||||||
freeShaderPointers' $ _fullscreenShader pd
|
--freeShaderPointers' $ _fullscreenShader pd
|
||||||
|
|||||||
@@ -52,5 +52,5 @@ renderDataResizeUpdate xsize ysize xfull yfull rdata = do
|
|||||||
"bloomBlur"
|
"bloomBlur"
|
||||||
[(vert, bbVert), (frag, bbFrag')]
|
[(vert, bbVert), (frag, bbFrag')]
|
||||||
ETriangleStrip
|
ETriangleStrip
|
||||||
(rdata ^. fullscreenShader . shadVAO')
|
(rdata ^. fullscreenShader . _1 . shadVAO')
|
||||||
return (rdata'{_bloomBlurShader = bbShad})
|
return (rdata'{_bloomBlurShader = bbShad})
|
||||||
|
|||||||
+5
-5
@@ -275,12 +275,12 @@ instanceLightMap cfig pdata lightPoints nWalls nSils nCaps toPos = do
|
|||||||
glDepthFunc GL_ALWAYS
|
glDepthFunc GL_ALWAYS
|
||||||
glColorMask GL_TRUE GL_TRUE GL_TRUE GL_TRUE
|
glColorMask GL_TRUE GL_TRUE GL_TRUE GL_TRUE
|
||||||
glStencilFunc GL_EQUAL 0 255
|
glStencilFunc GL_EQUAL 0 255
|
||||||
glUseProgram (pdata ^. shadowLightShader . shadName)
|
glUseProgram (pdata ^. shadowLightShader . _1 . shadName)
|
||||||
-- bind world position texture
|
-- bind world position texture
|
||||||
bindTO toPos
|
bindTO toPos
|
||||||
-- glBindVertexArray $ pdata ^. shadowLightShader . shadVAO' . vaoName
|
-- glBindVertexArray $ pdata ^. shadowLightShader . shadVAO' . vaoName
|
||||||
glDrawArrays
|
glDrawArrays
|
||||||
(marshalEPrimitiveMode $ pdata ^. shadowLightShader . shadPrim')
|
(marshalEPrimitiveMode $ pdata ^. shadowLightShader . _1 . shadPrim')
|
||||||
0
|
0
|
||||||
1
|
1
|
||||||
glDisable GL_CULL_FACE
|
glDisable GL_CULL_FACE
|
||||||
@@ -292,7 +292,7 @@ instanceLightMap cfig pdata lightPoints nWalls nSils nCaps toPos = do
|
|||||||
glBindTexture GL_TEXTURE_2D_ARRAY (pdata ^. fboShadow . _2 . _1 . unTO)
|
glBindTexture GL_TEXTURE_2D_ARRAY (pdata ^. fboShadow . _2 . _1 . unTO)
|
||||||
glEnable GL_BLEND
|
glEnable GL_BLEND
|
||||||
glBlendFunc GL_ZERO GL_ONE_MINUS_SRC_COLOR
|
glBlendFunc GL_ZERO GL_ONE_MINUS_SRC_COLOR
|
||||||
glUseProgram (pdata ^. shadowCombineShader . shadName)
|
glUseProgram (pdata ^. shadowCombineShader . _1 . shadName)
|
||||||
glDrawArrays
|
glDrawArrays
|
||||||
(marshalEPrimitiveMode EPoints)
|
(marshalEPrimitiveMode EPoints)
|
||||||
0
|
0
|
||||||
@@ -322,7 +322,7 @@ pingPongBetween (fb1, to1) (fb2, to2) fs = do
|
|||||||
drawShader fs 4
|
drawShader fs 4
|
||||||
|
|
||||||
renderFoldable ::
|
renderFoldable ::
|
||||||
MV.MVector (PrimState IO) FullShader ->
|
MV.MVector (PrimState IO) (FullShader,VBO) ->
|
||||||
Picture ->
|
Picture ->
|
||||||
IO ()
|
IO ()
|
||||||
renderFoldable shadV struct = do
|
renderFoldable shadV struct = do
|
||||||
@@ -333,7 +333,7 @@ renderFoldable shadV struct = do
|
|||||||
------------------------------end renderFoldable
|
------------------------------end renderFoldable
|
||||||
renderLayer ::
|
renderLayer ::
|
||||||
Layer ->
|
Layer ->
|
||||||
MV.MVector (PrimState IO) FullShader ->
|
MV.MVector (PrimState IO) (FullShader,VBO) ->
|
||||||
UMV.MVector (PrimState IO) Int ->
|
UMV.MVector (PrimState IO) Int ->
|
||||||
IO ()
|
IO ()
|
||||||
renderLayer layer shads counts = do
|
renderLayer layer shads counts = do
|
||||||
|
|||||||
+11
-16
@@ -2,7 +2,6 @@ module Shader
|
|||||||
( freeShaderPointers'
|
( freeShaderPointers'
|
||||||
, drawShaderLay
|
, drawShaderLay
|
||||||
, shadVBOptr
|
, shadVBOptr
|
||||||
, shadVBOptr'
|
|
||||||
, drawShader
|
, drawShader
|
||||||
, pokeBindFoldable
|
, pokeBindFoldable
|
||||||
, pokeBindFoldableLayer
|
, pokeBindFoldableLayer
|
||||||
@@ -21,22 +20,22 @@ import Control.Monad.Primitive
|
|||||||
import Foreign
|
import Foreign
|
||||||
import Graphics.GL.Core45
|
import Graphics.GL.Core45
|
||||||
|
|
||||||
drawShaderLay :: Int -> UMV.MVector (PrimState IO) Int -> Int -> FullShader -> IO ()
|
drawShaderLay :: Int -> UMV.MVector (PrimState IO) Int -> Int -> (FullShader,VBO) -> IO ()
|
||||||
{-# INLINE drawShaderLay #-}
|
{-# INLINE drawShaderLay #-}
|
||||||
drawShaderLay l countsVector shadIn fs = do
|
drawShaderLay l countsVector shadIn fs = do
|
||||||
i <- UMV.read countsVector shadIn
|
i <- UMV.read countsVector shadIn
|
||||||
--currentProgram $= Just (_shadProg' fs)
|
--currentProgram $= Just (_shadProg' fs)
|
||||||
glUseProgram (_shadName fs)
|
glUseProgram (_shadName $ fst fs)
|
||||||
glBindVertexArray $ fs ^. shadVAO' . vaoName
|
glBindVertexArray $ fs ^. _1 . shadVAO' . vaoName
|
||||||
--bindVertexArrayObject $= Just (_vaoName $ _shadVAO' fs)
|
--bindVertexArrayObject $= Just (_vaoName $ _shadVAO' fs)
|
||||||
case _shadTex' fs of
|
case _shadTex' $ fst fs of
|
||||||
Just ShaderTexture{_textureObject = txo} --, _textureTarget = tt}
|
Just ShaderTexture{_textureObject = txo} --, _textureTarget = tt}
|
||||||
-- -> textureBinding Texture2D $= Just txo
|
-- -> textureBinding Texture2D $= Just txo
|
||||||
-- -> glBindTexture tt txo
|
-- -> glBindTexture tt txo
|
||||||
-> glBindTextureUnit 0 txo
|
-> glBindTextureUnit 0 txo
|
||||||
_ -> return ()
|
_ -> return ()
|
||||||
glDrawArrays
|
glDrawArrays
|
||||||
(marshalEPrimitiveMode $ _shadPrim' fs)
|
(marshalEPrimitiveMode $ _shadPrim' $ fst fs)
|
||||||
(fromIntegral $ l*numSubElements)
|
(fromIntegral $ l*numSubElements)
|
||||||
(fromIntegral i)
|
(fromIntegral i)
|
||||||
|
|
||||||
@@ -58,11 +57,11 @@ drawShader fs i = do
|
|||||||
0
|
0
|
||||||
(fromIntegral i)
|
(fromIntegral i)
|
||||||
|
|
||||||
freeShaderPointers' :: FullShader -> IO ()
|
freeShaderPointers' :: (FullShader,VBO) -> IO ()
|
||||||
freeShaderPointers' = free . _vboPtr . _vaoVBO . _shadVAO'
|
freeShaderPointers' = free . _vboPtr . snd
|
||||||
|
|
||||||
pokeBindFoldable
|
pokeBindFoldable
|
||||||
:: MV.MVector (PrimState IO) FullShader
|
:: MV.MVector (PrimState IO) (FullShader,VBO)
|
||||||
-> UMV.MVector (PrimState IO) Int
|
-> UMV.MVector (PrimState IO) Int
|
||||||
-> Picture
|
-> Picture
|
||||||
-> IO ()
|
-> IO ()
|
||||||
@@ -71,7 +70,7 @@ pokeBindFoldable shadV counts m = do
|
|||||||
bindShader shadV counts
|
bindShader shadV counts
|
||||||
|
|
||||||
pokeBindFoldableLayer
|
pokeBindFoldableLayer
|
||||||
:: MV.MVector (PrimState IO) FullShader
|
:: MV.MVector (PrimState IO) (FullShader,VBO)
|
||||||
-> UMV.MVector (PrimState IO) Int
|
-> UMV.MVector (PrimState IO) Int
|
||||||
-> Picture
|
-> Picture
|
||||||
-> IO ()
|
-> IO ()
|
||||||
@@ -79,10 +78,6 @@ pokeBindFoldableLayer shadV counts m = do
|
|||||||
pokeLayVerxs shadV counts m
|
pokeLayVerxs shadV counts m
|
||||||
bindShaderLayers shadV counts
|
bindShaderLayers shadV counts
|
||||||
|
|
||||||
shadVBOptr :: FullShader -> Ptr Float
|
shadVBOptr :: (FullShader,VBO) -> Ptr Float
|
||||||
{-# INLINE shadVBOptr #-}
|
{-# INLINE shadVBOptr #-}
|
||||||
shadVBOptr = _vboPtr . _vaoVBO . _shadVAO'
|
shadVBOptr = _vboPtr . snd
|
||||||
|
|
||||||
shadVBOptr' :: FullShader -> Ptr Float
|
|
||||||
{-# INLINE shadVBOptr' #-}
|
|
||||||
shadVBOptr' = _vboPtr . _vaoVBO . _shadVAO'
|
|
||||||
|
|||||||
@@ -62,8 +62,8 @@ addTexture2D nlev minfilt magfilt texpath shad = do
|
|||||||
-- | for transforming a 256x256 image containing 64 tiles of 16x16 pixels into
|
-- | for transforming a 256x256 image containing 64 tiles of 16x16 pixels into
|
||||||
-- an image that was directly readable by glTexSubImage3D, used the
|
-- an image that was directly readable by glTexSubImage3D, used the
|
||||||
-- transformation tilesToLine 8 128 on the underlying pixels.
|
-- transformation tilesToLine 8 128 on the underlying pixels.
|
||||||
addTextureArray :: String -> FullShader -> IO FullShader
|
addTextureArray :: String -> (FullShader,VBO) -> IO (FullShader,VBO)
|
||||||
addTextureArray texturePath shad = do
|
addTextureArray texturePath (shad,vbo) = do
|
||||||
err <- glGetError
|
err <- glGetError
|
||||||
print err
|
print err
|
||||||
Right cmap <- readImage texturePath
|
Right cmap <- readImage texturePath
|
||||||
@@ -75,8 +75,9 @@ addTextureArray texturePath shad = do
|
|||||||
glGenerateTextureMipmap texname
|
glGenerateTextureMipmap texname
|
||||||
glTextureParameteri texname GL_TEXTURE_MIN_FILTER (unsafeCoerce GL_LINEAR_MIPMAP_LINEAR)
|
glTextureParameteri texname GL_TEXTURE_MIN_FILTER (unsafeCoerce GL_LINEAR_MIPMAP_LINEAR)
|
||||||
glTextureParameteri texname GL_TEXTURE_MAG_FILTER (unsafeCoerce GL_LINEAR)
|
glTextureParameteri texname GL_TEXTURE_MAG_FILTER (unsafeCoerce GL_LINEAR)
|
||||||
return $ shad & shadTex' ?~ ShaderTexture
|
return (shad & shadTex' ?~ ShaderTexture
|
||||||
{ _textureObject = texname}
|
{ _textureObject = texname}
|
||||||
|
, vbo)
|
||||||
|
|
||||||
-- I am completely unclear on why this works with its current parameters
|
-- I am completely unclear on why this works with its current parameters
|
||||||
tilesToLine
|
tilesToLine
|
||||||
|
|||||||
+6
-6
@@ -22,11 +22,11 @@ bindArrayBuffers numVs theVBO = glNamedBufferSubData
|
|||||||
(fromIntegral $ floatSize * numVs * sum (_vboAttribSizes theVBO))
|
(fromIntegral $ floatSize * numVs * sum (_vboAttribSizes theVBO))
|
||||||
(_vboPtr theVBO)
|
(_vboPtr theVBO)
|
||||||
|
|
||||||
bindShaderLayers :: MV.MVector (PrimState IO) FullShader -> UMV.MVector (PrimState IO) Int -> IO ()
|
bindShaderLayers :: MV.MVector (PrimState IO) (FullShader, VBO) -> UMV.MVector (PrimState IO) Int -> IO ()
|
||||||
bindShaderLayers shads counts = MV.imapM_ f shads
|
bindShaderLayers shads counts = MV.imapM_ f shads
|
||||||
where
|
where
|
||||||
f i shad = do
|
f i shad = do
|
||||||
let theVBO = _vaoVBO $ _shadVAO' shad
|
let theVBO = snd shad
|
||||||
stride = sum $ _vboAttribSizes theVBO
|
stride = sum $ _vboAttribSizes theVBO
|
||||||
VFSM.mapM_ (g stride theVBO) $ VFSM.enumFromStepN 0 1 6 -- [0..5]
|
VFSM.mapM_ (g stride theVBO) $ VFSM.enumFromStepN 0 1 6 -- [0..5]
|
||||||
where
|
where
|
||||||
@@ -41,12 +41,12 @@ bindShaderLayers shads counts = MV.imapM_ f shads
|
|||||||
glNamedBufferSubDataH :: GLuint -> GLintptr -> GLsizeiptr -> Ptr a -> IO ()
|
glNamedBufferSubDataH :: GLuint -> GLintptr -> GLsizeiptr -> Ptr a -> IO ()
|
||||||
glNamedBufferSubDataH = glNamedBufferSubData
|
glNamedBufferSubDataH = glNamedBufferSubData
|
||||||
|
|
||||||
bindShader :: MV.MVector (PrimState IO) FullShader -> UMV.MVector (PrimState IO) Int -> IO ()
|
bindShader :: MV.MVector (PrimState IO) (FullShader,VBO) -> UMV.MVector (PrimState IO) Int -> IO ()
|
||||||
bindShader shads counts = MV.imapM_ f shads
|
bindShader shads counts = MV.imapM_ f shads
|
||||||
where
|
where
|
||||||
f i shad = UMV.read counts i >>= flip bindArrayBuffers (_vaoVBO . _shadVAO' $ shad)
|
f i shad = UMV.read counts i >>= flip bindArrayBuffers (snd shad)
|
||||||
|
|
||||||
bindShaderBuffers :: [FullShader] -> [Int] -> IO ()
|
bindShaderBuffers :: [VBO] -> [Int] -> IO ()
|
||||||
bindShaderBuffers = zipWithM_ f
|
bindShaderBuffers = zipWithM_ f
|
||||||
where
|
where
|
||||||
f fs i = bindArrayBuffers i $ _vaoVBO $ _shadVAO' fs
|
f fs i = bindArrayBuffers i fs
|
||||||
|
|||||||
+14
-15
@@ -29,18 +29,18 @@ makeShader ::
|
|||||||
-- | The input vertex sizes
|
-- | The input vertex sizes
|
||||||
[Int] ->
|
[Int] ->
|
||||||
EPrimitiveMode ->
|
EPrimitiveMode ->
|
||||||
IO FullShader
|
IO (FullShader,VBO)
|
||||||
makeShader s shaderlist sizes pm = do
|
makeShader s shaderlist sizes pm = do
|
||||||
prog <- makeSourcedShader s shaderlist
|
prog <- makeSourcedShader s shaderlist
|
||||||
vaob <- setupVAO sizes
|
(vao,vbo) <- setupVAO sizes
|
||||||
return $
|
return ( FullShader
|
||||||
FullShader
|
|
||||||
{ _shadName = prog
|
{ _shadName = prog
|
||||||
, _shadVAO' = vaob
|
, _shadVAO' = vao
|
||||||
, _shadPrim' = pm
|
, _shadPrim' = pm
|
||||||
, _shadTex' = Nothing
|
, _shadTex' = Nothing
|
||||||
, _shadUnis' = mempty
|
, _shadUnis' = mempty
|
||||||
}
|
}
|
||||||
|
, vbo)
|
||||||
|
|
||||||
makeByteStringShaderUsingVAO ::
|
makeByteStringShaderUsingVAO ::
|
||||||
-- | (Arbitrary) name of the shader
|
-- | (Arbitrary) name of the shader
|
||||||
@@ -95,18 +95,18 @@ makeShaderSized ::
|
|||||||
-- | Number of vertexes that can be poked
|
-- | Number of vertexes that can be poked
|
||||||
Int ->
|
Int ->
|
||||||
EPrimitiveMode ->
|
EPrimitiveMode ->
|
||||||
IO FullShader
|
IO (FullShader,VBO)
|
||||||
makeShaderSized s shaderlist sizes ndraw pm = do
|
makeShaderSized s shaderlist sizes ndraw pm = do
|
||||||
prog <- makeSourcedShader s shaderlist
|
prog <- makeSourcedShader s shaderlist
|
||||||
vaob <- setupVAOSized ndraw sizes
|
(vao,vbo) <- setupVAOSized ndraw sizes
|
||||||
return $
|
return ( FullShader
|
||||||
FullShader
|
|
||||||
{ _shadName = prog
|
{ _shadName = prog
|
||||||
, _shadVAO' = vaob
|
, _shadVAO' = vao
|
||||||
, _shadPrim' = pm
|
, _shadPrim' = pm
|
||||||
, _shadTex' = Nothing
|
, _shadTex' = Nothing
|
||||||
, _shadUnis' = mempty
|
, _shadUnis' = mempty
|
||||||
}
|
}
|
||||||
|
, vbo)
|
||||||
|
|
||||||
{- | Compile shader and get its uniform locations.
|
{- | Compile shader and get its uniform locations.
|
||||||
supposes the shader code is in the shader folder, with the string names
|
supposes the shader code is in the shader folder, with the string names
|
||||||
@@ -124,21 +124,20 @@ shaderTypeExt' GL_FRAGMENT_SHADER = ".frag"
|
|||||||
shaderTypeExt' _ = undefined
|
shaderTypeExt' _ = undefined
|
||||||
|
|
||||||
-- I think that this requires that the correct shader program is bound?
|
-- I think that this requires that the correct shader program is bound?
|
||||||
setupVAO :: [Int] -> IO VAO
|
setupVAO :: [Int] -> IO (VAO,VBO)
|
||||||
setupVAO = setupVAOSized numDrawableElements
|
setupVAO = setupVAOSized numDrawableElements
|
||||||
|
|
||||||
setupVAOSized :: Int -> [Int] -> IO VAO
|
setupVAOSized :: Int -> [Int] -> IO (VAO,VBO)
|
||||||
setupVAOSized ndraw sizes = do
|
setupVAOSized ndraw sizes = do
|
||||||
vaoname <- mglCreate glCreateVertexArrays
|
vaoname <- mglCreate glCreateVertexArrays
|
||||||
glBindVertexArray vaoname
|
glBindVertexArray vaoname
|
||||||
theVBO <- setupVBOSized ndraw vaoname sizes
|
theVBO <- setupVBOSized ndraw vaoname sizes
|
||||||
return $
|
return ( VAO
|
||||||
VAO
|
|
||||||
{ _vaoName = vaoname
|
{ _vaoName = vaoname
|
||||||
, _vaoAttribSizes = sizes
|
, _vaoAttribSizes = sizes
|
||||||
, _vaoStride = sum sizes
|
, _vaoStride = sum sizes
|
||||||
, _vaoVBO = theVBO
|
|
||||||
}
|
}
|
||||||
|
, theVBO)
|
||||||
|
|
||||||
setupVBOSized :: Int -> GLuint -> [Int] -> IO VBO
|
setupVBOSized :: Int -> GLuint -> [Int] -> IO VBO
|
||||||
setupVBOSized ndraw vao sizes = do
|
setupVBOSized ndraw vao sizes = do
|
||||||
|
|||||||
+3
-2
@@ -11,7 +11,7 @@ module Shader.Data
|
|||||||
, EPrimitiveMode (..)
|
, EPrimitiveMode (..)
|
||||||
-- | Lens functions
|
-- | Lens functions
|
||||||
, vaoName
|
, vaoName
|
||||||
, vaoVBO
|
-- , vaoVBO
|
||||||
, vaoAttribSizes
|
, vaoAttribSizes
|
||||||
, vaoStride
|
, vaoStride
|
||||||
|
|
||||||
@@ -50,7 +50,7 @@ data VAO = VAO
|
|||||||
{ _vaoName :: GLuint
|
{ _vaoName :: GLuint
|
||||||
, _vaoAttribSizes :: [Int] -- ^ It is not clear to me if this is necessary to store or not
|
, _vaoAttribSizes :: [Int] -- ^ It is not clear to me if this is necessary to store or not
|
||||||
, _vaoStride :: Int
|
, _vaoStride :: Int
|
||||||
, _vaoVBO :: VBO
|
-- , _vaoVBO :: VBO
|
||||||
}
|
}
|
||||||
{- | Vertex buffer object: contains the reference to the object,
|
{- | Vertex buffer object: contains the reference to the object,
|
||||||
a pointer to a location with space that can be written to the buffer,
|
a pointer to a location with space that can be written to the buffer,
|
||||||
@@ -61,6 +61,7 @@ data VBO = VBO
|
|||||||
, _vboPtr :: Ptr Float
|
, _vboPtr :: Ptr Float
|
||||||
, _vboAttribSizes :: [Int] -- ^ It is not clear to me if this is necessary to store or not
|
, _vboAttribSizes :: [Int] -- ^ It is not clear to me if this is necessary to store or not
|
||||||
, _vboStride :: Int
|
, _vboStride :: Int
|
||||||
|
-- add int for AMOUNT of data poked!
|
||||||
}
|
}
|
||||||
data EBO = EBO
|
data EBO = EBO
|
||||||
{ _eboName :: GLuint
|
{ _eboName :: GLuint
|
||||||
|
|||||||
+6
-6
@@ -25,17 +25,17 @@ import Control.Monad.Primitive
|
|||||||
--import qualified Control.Monad.Parallel as MP
|
--import qualified Control.Monad.Parallel as MP
|
||||||
|
|
||||||
pokeVerxs
|
pokeVerxs
|
||||||
:: MV.MVector (PrimState IO) FullShader
|
:: MV.MVector (PrimState IO) (FullShader,VBO)
|
||||||
-> UMV.MVector (PrimState IO) Int
|
-> UMV.MVector (PrimState IO) Int
|
||||||
-> Picture
|
-> Picture
|
||||||
-> IO ()
|
-> IO ()
|
||||||
--pokeVerxs vbos count = S.mapM_ (pokeVerx vbos count) . S.each
|
--pokeVerxs vbos count = S.mapM_ (pokeVerx vbos count) . S.each
|
||||||
pokeVerxs vbos count = VFSM.mapM_ (pokeVerx vbos count) . VFSM.fromList
|
pokeVerxs vbos count = VFSM.mapM_ (pokeVerx vbos count) . VFSM.fromList
|
||||||
|
|
||||||
pokeVerx :: MV.MVector (PrimState IO) FullShader -> UMV.MVector (PrimState IO) Int -> Verx -> IO ()
|
pokeVerx :: MV.MVector (PrimState IO) (FullShader,VBO) -> UMV.MVector (PrimState IO) Int -> Verx -> IO ()
|
||||||
pokeVerx vbos offsets Verx{_vxPos=thePos,_vxCol=theCol,_vxExt=ext,_vxShadNum=theShadNum} = do
|
pokeVerx vbos offsets Verx{_vxPos=thePos,_vxCol=theCol,_vxExt=ext,_vxShadNum=theShadNum} = do
|
||||||
typeOff <- UMV.unsafeRead offsets sn
|
typeOff <- UMV.unsafeRead offsets sn
|
||||||
basePtr <- _vboPtr . _vaoVBO . _shadVAO' <$> MV.unsafeRead vbos sn
|
basePtr <- _vboPtr . snd <$> MV.unsafeRead vbos sn
|
||||||
let thePtr = plusPtr basePtr (typeOff * pokeStride sn * floatSize)
|
let thePtr = plusPtr basePtr (typeOff * pokeStride sn * floatSize)
|
||||||
poke34 thePtr thePos theCol
|
poke34 thePtr thePos theCol
|
||||||
pokeArrayOff thePtr 7 ext
|
pokeArrayOff thePtr 7 ext
|
||||||
@@ -185,18 +185,18 @@ pokeJustV ptr nv sh = do
|
|||||||
V4 d e f g = _svCol sh
|
V4 d e f g = _svCol sh
|
||||||
|
|
||||||
pokeLayVerxs
|
pokeLayVerxs
|
||||||
:: MV.MVector (PrimState IO) FullShader
|
:: MV.MVector (PrimState IO) (FullShader ,VBO)
|
||||||
-> UMV.MVector (PrimState IO) Int
|
-> UMV.MVector (PrimState IO) Int
|
||||||
-> Picture
|
-> Picture
|
||||||
-> IO ()
|
-> IO ()
|
||||||
--pokeLayVerxs vbos counts = S.mapM_ (pokeLayVerx vbos counts) . S.each
|
--pokeLayVerxs vbos counts = S.mapM_ (pokeLayVerx vbos counts) . S.each
|
||||||
pokeLayVerxs vbos counts = VFSM.mapM_ (pokeLayVerx vbos counts) . VFSM.fromList
|
pokeLayVerxs vbos counts = VFSM.mapM_ (pokeLayVerx vbos counts) . VFSM.fromList
|
||||||
|
|
||||||
pokeLayVerx :: MV.MVector (PrimState IO) FullShader -> UMV.MVector (PrimState IO) Int -> Verx -> IO ()
|
pokeLayVerx :: MV.MVector (PrimState IO) (FullShader,VBO) -> UMV.MVector (PrimState IO) Int -> Verx -> IO ()
|
||||||
--{-# INLINE pokeLayVerx #-}
|
--{-# INLINE pokeLayVerx #-}
|
||||||
pokeLayVerx vbos counts vx = do
|
pokeLayVerx vbos counts vx = do
|
||||||
theOff <- UMV.unsafeRead counts vecPos
|
theOff <- UMV.unsafeRead counts vecPos
|
||||||
basePtr <- _vboPtr . _vaoVBO . _shadVAO' <$> MV.unsafeRead vbos sn
|
basePtr <- _vboPtr . snd <$> MV.unsafeRead vbos sn
|
||||||
let thePtr = plusPtr basePtr ((theOff + layOff) * theStride * floatSize)
|
let thePtr = plusPtr basePtr ((theOff + layOff) * theStride * floatSize)
|
||||||
poke34 thePtr thePos theCol
|
poke34 thePtr thePos theCol
|
||||||
pokeArrayOff thePtr 7 (_vxExt vx)
|
pokeArrayOff thePtr 7 (_vxExt vx)
|
||||||
|
|||||||
Reference in New Issue
Block a user