Work on lightmaps, add file
This commit is contained in:
Binary file not shown.
|
After Width: | Height: | Size: 9.4 KiB |
@@ -7,16 +7,30 @@ layout (std140, binding = 1) uniform LightsBlock
|
|||||||
//uniform int lightID;
|
//uniform int lightID;
|
||||||
vec3 lightPos = posBool[gl_Layer].xyz;
|
vec3 lightPos = posBool[gl_Layer].xyz;
|
||||||
vec4 lumRad = colRad[gl_Layer];
|
vec4 lumRad = colRad[gl_Layer];
|
||||||
uniform sampler2D screenTexture;
|
layout (binding = 0) uniform sampler2D screenTexture;
|
||||||
|
layout (binding = 1) uniform sampler2D normals;
|
||||||
in vec2 gTexPos;
|
in vec2 gTexPos;
|
||||||
out vec4 fColor;
|
out vec4 fColor;
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
|
float rad = lumRad.a;
|
||||||
vec3 distVec = texture(screenTexture,gTexPos).xyz - lightPos;
|
vec3 distVec = texture(screenTexture,gTexPos).xyz - lightPos;
|
||||||
float dist = dot(distVec,distVec);
|
float dist = dot(distVec,distVec);
|
||||||
if (dist > lumRad.a) {discard;}
|
if (dist > lumRad.a) {discard;}
|
||||||
float x = 1 - dist / lumRad.a ;
|
// float x = 1 - dist / lumRad.a ;
|
||||||
vec3 c = (x * x * x) * lumRad.rgb ;
|
// vec3 c = (x * x * x) * lumRad.rgb ;
|
||||||
|
// fColor = vec4(c,0);
|
||||||
|
// //fColor = vec4(0.05,0,0,0);
|
||||||
|
vec4 normbit = texture(normals, gTexPos);
|
||||||
|
vec3 norm = normbit.xyz;
|
||||||
|
float y1 = dot(normalize(norm), normalize(distVec));
|
||||||
|
float y2 = float(y1 > 0 ? 1 : 0);
|
||||||
|
//float y3 = clamp(0.5 * (y1 + 1),0,1) ;
|
||||||
|
float y3 = clamp(2*y1 + 1,0,1) ;
|
||||||
|
//float y3 = clamp(0.5 * (y1 + 2),0,1) ;
|
||||||
|
//float y = float(normbit.w == 0 ? y3 : y2);
|
||||||
|
float y = y2;
|
||||||
|
float x = 1 - dist / rad;
|
||||||
|
vec3 c = y* (x * x * x) * lumRad.rgb;
|
||||||
fColor = vec4(c, 0);
|
fColor = vec4(c, 0);
|
||||||
//fColor = vec4(0.05,0,0,0);
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -46,7 +46,6 @@ data RenderData = RenderData
|
|||||||
, _matUBO :: GLuint -- BufferObject id
|
, _matUBO :: GLuint -- BufferObject id
|
||||||
, _orthonormalMatUBO :: GLuint -- BufferObject id
|
, _orthonormalMatUBO :: GLuint -- BufferObject id
|
||||||
, _lightsUBO :: GLuint -- BufferObject id
|
, _lightsUBO :: GLuint -- BufferObject id
|
||||||
, _vboWalls :: VBO
|
|
||||||
, _vboWindows :: VBO
|
, _vboWindows :: VBO
|
||||||
, _vboShapes :: VBO
|
, _vboShapes :: VBO
|
||||||
, _floorVBO :: VBO
|
, _floorVBO :: VBO
|
||||||
|
|||||||
+6
-9
@@ -51,7 +51,7 @@ doDrawing' win pdata u = do
|
|||||||
trans = w ^. cWorld . camPos . camCenter
|
trans = w ^. cWorld . camPos . camCenter
|
||||||
wins@(V2 winx winy) = V2 (_windowX cfig) (_windowY cfig)
|
wins@(V2 winx winy) = V2 (_windowX cfig) (_windowY cfig)
|
||||||
resFact = resFactorNum $ cfig ^. graphics_resolution_factor
|
resFact = resFactorNum $ cfig ^. graphics_resolution_factor
|
||||||
(wallPointsCol, windowPoints, wallSPics, wallsToPoke) = wallsToDraw w
|
( windowPoints, wallSPics, wallsToPoke) = wallsToDraw w
|
||||||
lightPoints = lightsToRender cfig (w ^. cWorld . camPos) (w ^. cWorld . lWorld)
|
lightPoints = lightsToRender cfig (w ^. cWorld . camPos) (w ^. cWorld . lWorld)
|
||||||
viewFroms@(V2 vfx vfy) = w ^. cWorld . camPos . camViewFrom
|
viewFroms@(V2 vfx vfy) = w ^. cWorld . camPos . camViewFrom
|
||||||
shadV = _pictureShaders pdata
|
shadV = _pictureShaders pdata
|
||||||
@@ -61,7 +61,7 @@ doDrawing' win pdata u = do
|
|||||||
layerCounts <- UMV.replicate (numLayers * 6) 0
|
layerCounts <- UMV.replicate (numLayers * 6) 0
|
||||||
-- attempt to poke in parallel
|
-- attempt to poke in parallel
|
||||||
let (ws, wp) = wallSPics <> worldSPic cfig u
|
let (ws, wp) = wallSPics <> worldSPic cfig u
|
||||||
((nWalls, nWins,trueNWalls), (nShapeVs, nIndices, nSilIndices)) <-
|
(( nWins,trueNWalls), (nShapeVs, nIndices, nSilIndices)) <-
|
||||||
MP.bindM3
|
MP.bindM3
|
||||||
(\_ a b -> return (a, b))
|
(\_ a b -> return (a, b))
|
||||||
( pokeLayVerxs
|
( pokeLayVerxs
|
||||||
@@ -70,10 +70,8 @@ doDrawing' win pdata u = do
|
|||||||
wp
|
wp
|
||||||
)
|
)
|
||||||
( pokeWallsWindows
|
( pokeWallsWindows
|
||||||
( pdata ^. vboWalls . vboPtr)
|
|
||||||
( pdata ^. vboWindows . vboPtr)
|
( pdata ^. vboWindows . vboPtr)
|
||||||
( pdata ^. wallVBO . vboPtr)
|
( pdata ^. wallVBO . vboPtr)
|
||||||
wallPointsCol
|
|
||||||
windowPoints
|
windowPoints
|
||||||
wallsToPoke
|
wallsToPoke
|
||||||
)
|
)
|
||||||
@@ -88,8 +86,7 @@ doDrawing' win pdata u = do
|
|||||||
bufferShaderLayers shadV layerCounts
|
bufferShaderLayers shadV layerCounts
|
||||||
uncurry (zipWithM_ bufferPokedVBO) $
|
uncurry (zipWithM_ bufferPokedVBO) $
|
||||||
unzip
|
unzip
|
||||||
[ (pdata ^. vboWalls, nWalls)
|
[ (pdata ^. vboWindows, nWins)
|
||||||
, (pdata ^. vboWindows, nWins)
|
|
||||||
, (pdata ^. wallVBO, trueNWalls)
|
, (pdata ^. wallVBO, trueNWalls)
|
||||||
]
|
]
|
||||||
bufferPokedVBO (_vboShapes pdata) nShapeVs
|
bufferPokedVBO (_vboShapes pdata) nShapeVs
|
||||||
@@ -141,7 +138,7 @@ doDrawing' win pdata u = do
|
|||||||
glDrawArrays
|
glDrawArrays
|
||||||
(_unPrimitiveMode $ pdata ^. lightingWallShadShader . shaderPrimitive)
|
(_unPrimitiveMode $ pdata ^. lightingWallShadShader . shaderPrimitive)
|
||||||
0
|
0
|
||||||
(fromIntegral nWalls)
|
(fromIntegral trueNWalls)
|
||||||
-- clear normals
|
-- clear normals
|
||||||
withArray [0,0,0,0] $ \ptr -> glClearNamedFramebufferfv
|
withArray [0,0,0,0] $ \ptr -> glClearNamedFramebufferfv
|
||||||
(pdata ^. fboBase . _1 . unFBO)
|
(pdata ^. fboBase . _1 . unFBO)
|
||||||
@@ -189,7 +186,7 @@ doDrawing' win pdata u = do
|
|||||||
createLightMap
|
createLightMap
|
||||||
cfig
|
cfig
|
||||||
(u ^. uvConfig . graphics_object_shadows)
|
(u ^. uvConfig . graphics_object_shadows)
|
||||||
nWalls
|
(fromIntegral trueNWalls)
|
||||||
nSilIndices
|
nSilIndices
|
||||||
nIndices
|
nIndices
|
||||||
(pdata ^. fboBase . _2 . _2)
|
(pdata ^. fboBase . _2 . _2)
|
||||||
@@ -305,7 +302,7 @@ doDrawing' win pdata u = do
|
|||||||
createLightMap
|
createLightMap
|
||||||
cfig
|
cfig
|
||||||
(_graphics_object_shadows $ _uvConfig u)
|
(_graphics_object_shadows $ _uvConfig u)
|
||||||
nWalls
|
(fromIntegral trueNWalls)
|
||||||
nSilIndices
|
nSilIndices
|
||||||
nIndices
|
nIndices
|
||||||
(pdata ^. fboPos . _2)
|
(pdata ^. fboPos . _2)
|
||||||
|
|||||||
@@ -14,11 +14,10 @@ import Geometry
|
|||||||
import ShapePicture
|
import ShapePicture
|
||||||
|
|
||||||
-- not necessary: should just poke all walls to their wanted places
|
-- not necessary: should just poke all walls to their wanted places
|
||||||
wallsToDraw :: World -> ([((Point2, Point2), Point4)], [((Point2, Point2), Point4)], SPic, [Wall])
|
wallsToDraw :: World -> ( [((Point2, Point2), Point4)], SPic, [Wall])
|
||||||
wallsToDraw w = L.fold
|
wallsToDraw w = L.fold
|
||||||
( (,,,)
|
( (,,)
|
||||||
<$> L.prefilter wlOpaqueDraw (L.premap f L.list)
|
<$>L.prefilter wlSeeThroughDraw (L.premap f L.list)
|
||||||
<*> L.prefilter wlSeeThroughDraw (L.premap f L.list)
|
|
||||||
<*> L.premap getWallSPic L.mconcat
|
<*> L.premap getWallSPic L.mconcat
|
||||||
<*> L.prefilter wlOpaqueDraw L.list
|
<*> L.prefilter wlOpaqueDraw L.list
|
||||||
)
|
)
|
||||||
|
|||||||
+14
-51
@@ -29,9 +29,6 @@ import Graphics.GL.Core45
|
|||||||
50 charMapVert
|
50 charMapVert
|
||||||
-}
|
-}
|
||||||
|
|
||||||
numDrawableWalls :: Int
|
|
||||||
numDrawableWalls = 5000
|
|
||||||
|
|
||||||
preloadRender :: IO RenderData
|
preloadRender :: IO RenderData
|
||||||
preloadRender = do
|
preloadRender = do
|
||||||
-- set up uniform buffer object
|
-- set up uniform buffer object
|
||||||
@@ -47,40 +44,6 @@ preloadRender = do
|
|||||||
glNamedBufferData lightsubo 640 nullPtr GL_STREAM_DRAW
|
glNamedBufferData lightsubo 640 nullPtr GL_STREAM_DRAW
|
||||||
glBindBufferBase GL_UNIFORM_BUFFER 1 lightsubo
|
glBindBufferBase GL_UNIFORM_BUFFER 1 lightsubo
|
||||||
|
|
||||||
-- setup wall points VBO, VAOs and shaders
|
|
||||||
wpVBOname <- mglCreate glCreateBuffers
|
|
||||||
wpVBOptr <- mallocArray (8 * numDrawableWalls)
|
|
||||||
glNamedBufferData wpVBOname
|
|
||||||
( fromIntegral $ floatSize * numDrawableWalls * 8)
|
|
||||||
nullPtr
|
|
||||||
GL_STREAM_DRAW
|
|
||||||
let wpVBO = VBO{_vboName = wpVBOname, _vboPtr = wpVBOptr, _vboVertexSize = 8}
|
|
||||||
wpVAOname <- mglCreate glCreateVertexArrays
|
|
||||||
glBindVertexArray wpVAOname
|
|
||||||
glVertexArrayVertexBuffer wpVAOname 0 wpVBOname 0 (fromIntegral $ floatSize * 8)
|
|
||||||
setupVertexAttribPointer wpVAOname 0 4 0
|
|
||||||
wpColVAOname <- mglCreate glCreateVertexArrays
|
|
||||||
glBindVertexArray wpColVAOname
|
|
||||||
glVertexArrayVertexBuffer wpColVAOname 0 wpVBOname 0 (fromIntegral $ floatSize * 8)
|
|
||||||
setupVertexAttribPointer wpColVAOname 0 4 0
|
|
||||||
setupVertexAttribPointer wpColVAOname 1 4 4
|
|
||||||
let wpVAO = VAO{_vaoName = wpVAOname}
|
|
||||||
wpColVAO = VAO{_vaoName = wpColVAOname}
|
|
||||||
-- setup window points VBO, VAOs and shaders
|
|
||||||
winVBOname <- mglCreate glCreateBuffers
|
|
||||||
winVBOptr <- mallocArray (8 * numDrawableWalls)
|
|
||||||
glNamedBufferData wpVBOname
|
|
||||||
( fromIntegral $ floatSize * numDrawableWalls * 8)
|
|
||||||
nullPtr
|
|
||||||
GL_STREAM_DRAW
|
|
||||||
let winVBO = VBO{_vboName = winVBOname, _vboPtr = winVBOptr, _vboVertexSize = 8}
|
|
||||||
winColVAOname <- mglCreate glCreateVertexArrays
|
|
||||||
glBindVertexArray winColVAOname
|
|
||||||
glVertexArrayVertexBuffer winColVAOname 0 winVBOname 0 (fromIntegral $ floatSize * 8)
|
|
||||||
setupVertexAttribPointer winColVAOname 0 4 0
|
|
||||||
setupVertexAttribPointer winColVAOname 1 4 4
|
|
||||||
let winColVAO = VAO
|
|
||||||
{_vaoName = winColVAOname}
|
|
||||||
-- setup shape geometry/cap VBO and two VAOs
|
-- setup shape geometry/cap VBO and two VAOs
|
||||||
shVBO <- setupVBO nShapeVerxComp
|
shVBO <- setupVBO nShapeVerxComp
|
||||||
shPosVAOname <- mglCreate glCreateVertexArrays
|
shPosVAOname <- mglCreate glCreateVertexArrays
|
||||||
@@ -105,10 +68,12 @@ preloadRender = do
|
|||||||
GL_STREAM_DRAW
|
GL_STREAM_DRAW
|
||||||
let silEBO = EBO{_eboName = silEBOname, _eboPtr = silEBOptr}
|
let silEBO = EBO{_eboName = silEBOname, _eboPtr = silEBOptr}
|
||||||
shEdgeVAO = VAO{_vaoName = shEdgeVAOname}
|
shEdgeVAO = VAO{_vaoName = shEdgeVAOname}
|
||||||
-- shEdgeVAO is unecessary?
|
|
||||||
-- lighting shaders
|
let wallverxstrd = 8
|
||||||
|
wallvbo <- setupVBO wallverxstrd
|
||||||
lightingWallShadShad <-
|
lightingWallShadShad <-
|
||||||
makeShaderUsingVAO "lighting/wallShadow" [vert, geom, frag] pmPoints wpVAO
|
makeShaderUsingVBO "lighting/wallShadow" [vert, geom, frag] [4] pmPoints wallvbo
|
||||||
|
|
||||||
lightingCapShad <-
|
lightingCapShad <-
|
||||||
makeShaderUsingVAO "lighting/cap" [vert, geom] pmTriangles shPosVAO
|
makeShaderUsingVAO "lighting/cap" [vert, geom] pmTriangles shPosVAO
|
||||||
lightingLineShadowShad <-
|
lightingLineShadowShad <-
|
||||||
@@ -119,7 +84,7 @@ preloadRender = do
|
|||||||
shadowcapshader <-
|
shadowcapshader <-
|
||||||
makeShaderUsingVAO "shadow/cap" [vert, geom] pmTriangles shPosVAO
|
makeShaderUsingVAO "shadow/cap" [vert, geom] pmTriangles shPosVAO
|
||||||
shadowwallshader <-
|
shadowwallshader <-
|
||||||
makeShaderUsingVAO "shadow/wallShadow" [vert, geom] pmPoints wpVAO
|
makeShaderUsingVBO "shadow/wallShadow" [vert, geom] [4] pmPoints wallvbo
|
||||||
shadowlightshader <- makeShaderSized "shadow/light" [vert, geom, frag]
|
shadowlightshader <- makeShaderSized "shadow/light" [vert, geom, frag]
|
||||||
[1] 1
|
[1] 1
|
||||||
pmPoints
|
pmPoints
|
||||||
@@ -128,14 +93,14 @@ preloadRender = do
|
|||||||
|
|
||||||
-- 2D draw shaders
|
-- 2D draw shaders
|
||||||
bslist <- makeShaderVBO "dualTwoD/basic" [vert, frag] [3, 4] pmTriangles
|
bslist <- makeShaderVBO "dualTwoD/basic" [vert, frag] [3, 4] pmTriangles
|
||||||
bslista <- makeShaderUsingVBO "shape/basic" [vert, frag] shapeVerxSizes nShapeVerxComp pmTriangles shVBO
|
bslista <- makeShaderUsingVBO "shape/basic" [vert, frag] shapeVerxSizes pmTriangles shVBO
|
||||||
glVertexArrayElementBuffer (bslista ^. shaderVAO . vaoName) (shEBO' ^. eboName)
|
glVertexArrayElementBuffer (bslista ^. shaderVAO . vaoName) (shEBO' ^. eboName)
|
||||||
--glVertexArrayElementBuffer (bslista ^. shaderVAO . vaoName) shEBOname
|
--glVertexArrayElementBuffer (bslista ^. shaderVAO . vaoName) shEBOname
|
||||||
aslist <- makeShaderVBO "dualTwoD/arc" [vert, frag] [3, 4, 3] pmTriangles
|
aslist <- makeShaderVBO "dualTwoD/arc" [vert, frag] [3, 4, 3] pmTriangles
|
||||||
eslist <- makeShaderVBO "dualTwoD/ellipse" [vert, geom, frag] [3, 4] pmTriangles
|
eslist <- makeShaderVBO "dualTwoD/ellipse" [vert, geom, frag] [3, 4] pmTriangles
|
||||||
cslist <-
|
cslist <-
|
||||||
makeShaderVBO "picture/charArray" [vert, frag] [3, 4, 4] pmTriangles
|
makeShaderVBO "picture/charArray" [vert, frag] [3, 4, 4] pmTriangles
|
||||||
initTexture2DArray 50 "data/texture/charMapVert.png" 2 16 32 95 GL_NEAREST_MIPMAP_LINEAR GL_LINEAR
|
initTexture2DArray 50 "data/texture/charMapVertBig.png" 2 32 64 95 GL_NEAREST_MIPMAP_LINEAR GL_LINEAR
|
||||||
|
|
||||||
screentexturevbo <- mglCreate glCreateBuffers
|
screentexturevbo <- mglCreate glCreateBuffers
|
||||||
withArray (concat cornerList) $ \ptr ->
|
withArray (concat cornerList) $ \ptr ->
|
||||||
@@ -154,13 +119,12 @@ preloadRender = do
|
|||||||
makeShaderUsingVAO "lighting/texture" [vert, frag] pmTriangleStrip screentexturevao
|
makeShaderUsingVAO "lighting/texture" [vert, frag] pmTriangleStrip screentexturevao
|
||||||
barrelShad <- makeShaderVBO "texture/barrel" [vert, geom, frag] [2, 2, 2, 1] pmPoints
|
barrelShad <- makeShaderVBO "texture/barrel" [vert, geom, frag] [2, 2, 2, 1] pmPoints
|
||||||
-- blank wallShader
|
-- blank wallShader
|
||||||
wallBlankShad <- makeShaderUsingVAO "wall/blank" [vert, geom, frag] pmPoints wpColVAO
|
winvbo <- setupVBO 8
|
||||||
let wallverxstrd = 8
|
windowshader <- makeShaderUsingVBO "wall/blank" [vert, geom, frag] [4,4] pmPoints winvbo
|
||||||
wallvbo <- setupVBO wallverxstrd
|
wallshader <- makeShaderUsingVBO "wall/basic" [vert,geom,frag] [4,4] pmPoints wallvbo
|
||||||
wallshader <- makeShaderUsingVBO "wall/basic" [vert,geom,frag] [4,4] wallverxstrd pmPoints wallvbo
|
|
||||||
let floorverxstrd = 8
|
let floorverxstrd = 8
|
||||||
floorvbo <- setupVBOStatic floorverxstrd
|
floorvbo <- setupVBOStatic floorverxstrd
|
||||||
floorshader <- makeShaderUsingVBO "floor/arrayPos" [vert, frag] [4,4] floorverxstrd pmTriangles floorvbo
|
floorshader <- makeShaderUsingVBO "floor/arrayPos" [vert, frag] [4,4] pmTriangles floorvbo
|
||||||
initTexture2DArraySquare 40 3 GL_LINEAR_MIPMAP_LINEAR GL_LINEAR "data/normalMaps/diffuseArray.png"
|
initTexture2DArraySquare 40 3 GL_LINEAR_MIPMAP_LINEAR GL_LINEAR "data/normalMaps/diffuseArray.png"
|
||||||
initTexture2DArraySquare 41 3 GL_LINEAR_MIPMAP_LINEAR GL_LINEAR "data/normalMaps/normalArray.png"
|
initTexture2DArraySquare 41 3 GL_LINEAR_MIPMAP_LINEAR GL_LINEAR "data/normalMaps/normalArray.png"
|
||||||
|
|
||||||
@@ -218,7 +182,7 @@ preloadRender = do
|
|||||||
, _shadowWallShader = shadowwallshader
|
, _shadowWallShader = shadowwallshader
|
||||||
, _shadowLightShader = shadowlightshader
|
, _shadowLightShader = shadowlightshader
|
||||||
, _shadowCombineShader = shadowcombineshader
|
, _shadowCombineShader = shadowcombineshader
|
||||||
, _windowShader = wallBlankShad{_shaderVAO = winColVAO}
|
, _windowShader = windowshader
|
||||||
, _fullscreenShader = fsShad
|
, _fullscreenShader = fsShad
|
||||||
, _alphaDivideShader = alphadivideshader
|
, _alphaDivideShader = alphadivideshader
|
||||||
, _lightingTextureShader = lightingTextureShad
|
, _lightingTextureShader = lightingTextureShad
|
||||||
@@ -241,8 +205,7 @@ preloadRender = do
|
|||||||
, _matUBO = theUBO
|
, _matUBO = theUBO
|
||||||
, _orthonormalMatUBO = orthonormalUBO
|
, _orthonormalMatUBO = orthonormalUBO
|
||||||
, _lightsUBO = lightsubo
|
, _lightsUBO = lightsubo
|
||||||
, _vboWalls = wpVBO
|
, _vboWindows = winvbo
|
||||||
, _vboWindows = winVBO
|
|
||||||
, _vboShapes = shVBO
|
, _vboShapes = shVBO
|
||||||
, _floorVBO = floorvbo
|
, _floorVBO = floorvbo
|
||||||
, _floorShader = floorshader
|
, _floorShader = floorshader
|
||||||
|
|||||||
+17
-14
@@ -28,9 +28,8 @@ import Shader.Data
|
|||||||
createLightMap ::
|
createLightMap ::
|
||||||
Configuration ->
|
Configuration ->
|
||||||
ShadowRendering ->
|
ShadowRendering ->
|
||||||
|
|
||||||
-- | number of walls
|
-- | number of walls
|
||||||
Int ->
|
GLsizei ->
|
||||||
-- | number of silhoutte lines to draw
|
-- | number of silhoutte lines to draw
|
||||||
Int ->
|
Int ->
|
||||||
-- | number of "caps" to attempt to draw
|
-- | number of "caps" to attempt to draw
|
||||||
@@ -110,22 +109,26 @@ renderLightingNoShadows positiontexture normaltexture lightPoints pdata = do
|
|||||||
renderFlatLighting :: RenderData -> IO ()
|
renderFlatLighting :: RenderData -> IO ()
|
||||||
renderFlatLighting pdata = do
|
renderFlatLighting pdata = do
|
||||||
glBindFramebuffer GL_FRAMEBUFFER (_unFBO (fst (_fboLighting pdata)))
|
glBindFramebuffer GL_FRAMEBUFFER (_unFBO (fst (_fboLighting pdata)))
|
||||||
withArray [1, 1, 1, 1] $ \ptr ->
|
withArray [0, 0, 0, 1] $ \ptr ->
|
||||||
glClearNamedFramebufferfv
|
glClearNamedFramebufferfv
|
||||||
(pdata ^. fboLighting . _1 . unFBO)
|
(pdata ^. fboLighting . _1 . unFBO)
|
||||||
GL_COLOR
|
GL_COLOR
|
||||||
0
|
0
|
||||||
ptr
|
ptr
|
||||||
with 1 $ \ptr ->
|
|
||||||
glClearNamedFramebufferfv
|
|
||||||
(pdata ^. fboLighting . _1 . unFBO)
|
|
||||||
GL_DEPTH
|
|
||||||
0
|
|
||||||
ptr
|
|
||||||
glDisable GL_CULL_FACE
|
glDisable GL_CULL_FACE
|
||||||
glDepthFunc GL_ALWAYS
|
glDepthFunc GL_ALWAYS
|
||||||
glDepthMask GL_FALSE
|
glDepthMask GL_FALSE
|
||||||
|
|
||||||
|
renderShadows ::
|
||||||
|
ShadowRendering ->
|
||||||
|
GLsizei ->
|
||||||
|
Int ->
|
||||||
|
Int ->
|
||||||
|
TO ->
|
||||||
|
TO ->
|
||||||
|
[(Point3, Float, Point3)] ->
|
||||||
|
RenderData ->
|
||||||
|
IO ()
|
||||||
renderShadows shadrendertype nWalls nSils nCaps positiontexture normaltexture lightPoints pdata = do
|
renderShadows shadrendertype nWalls nSils nCaps positiontexture normaltexture lightPoints pdata = do
|
||||||
glBindFramebuffer GL_FRAMEBUFFER (_unFBO (fst (_fboLighting pdata)))
|
glBindFramebuffer GL_FRAMEBUFFER (_unFBO (fst (_fboLighting pdata)))
|
||||||
let llinesShad = _lightingLineShadowShader pdata
|
let llinesShad = _lightingLineShadowShader pdata
|
||||||
@@ -171,7 +174,7 @@ renderShadows shadrendertype nWalls nSils nCaps positiontexture normaltexture li
|
|||||||
glDrawArrays
|
glDrawArrays
|
||||||
(_unPrimitiveMode $ _shaderPrimitive lwallShad)
|
(_unPrimitiveMode $ _shaderPrimitive lwallShad)
|
||||||
0
|
0
|
||||||
(fromIntegral nWalls)
|
nWalls
|
||||||
case shadrendertype of
|
case shadrendertype of
|
||||||
GeoObjShads -> do
|
GeoObjShads -> do
|
||||||
--draw silhouette shadows
|
--draw silhouette shadows
|
||||||
@@ -198,7 +201,7 @@ renderShadows shadrendertype nWalls nSils nCaps positiontexture normaltexture li
|
|||||||
GL_UNSIGNED_SHORT
|
GL_UNSIGNED_SHORT
|
||||||
nullPtr
|
nullPtr
|
||||||
glDisable GL_DEPTH_CLAMP
|
glDisable GL_DEPTH_CLAMP
|
||||||
NoObjShads -> return ()
|
_ -> return ()
|
||||||
--draw lightmap itself
|
--draw lightmap itself
|
||||||
glDepthFunc GL_ALWAYS
|
glDepthFunc GL_ALWAYS
|
||||||
-- bind world position texture
|
-- bind world position texture
|
||||||
@@ -228,9 +231,8 @@ lightsToArray xs =
|
|||||||
|
|
||||||
instanceLightMap ::
|
instanceLightMap ::
|
||||||
Configuration ->
|
Configuration ->
|
||||||
|
|
||||||
-- | number of walls
|
-- | number of walls
|
||||||
Int ->
|
GLsizei ->
|
||||||
-- | number of silhoutte lines to draw
|
-- | number of silhoutte lines to draw
|
||||||
Int ->
|
Int ->
|
||||||
-- | number of "caps" to attempt to draw
|
-- | number of "caps" to attempt to draw
|
||||||
@@ -293,7 +295,7 @@ instanceLightMap cfig nWalls nSils nCaps toPos tanormals lightPoints pdata = do
|
|||||||
glDrawArrays
|
glDrawArrays
|
||||||
(_unPrimitiveMode $ pdata ^. shadowWallShader . shaderPrimitive)
|
(_unPrimitiveMode $ pdata ^. shadowWallShader . shaderPrimitive)
|
||||||
0
|
0
|
||||||
(fromIntegral nWalls)
|
nWalls
|
||||||
--draw silhouette shadows
|
--draw silhouette shadows
|
||||||
glUseProgram $ pdata ^. shadowEdgeShader . shaderUINT
|
glUseProgram $ pdata ^. shadowEdgeShader . shaderUINT
|
||||||
glBindVertexArray $ pdata ^. shadowEdgeShader . shaderVAO . vaoName
|
glBindVertexArray $ pdata ^. shadowEdgeShader . shaderVAO . vaoName
|
||||||
@@ -320,6 +322,7 @@ instanceLightMap cfig nWalls nSils nCaps toPos tanormals lightPoints pdata = do
|
|||||||
glUseProgram (pdata ^. shadowLightShader . _1 . shaderUINT)
|
glUseProgram (pdata ^. shadowLightShader . _1 . shaderUINT)
|
||||||
-- bind world position texture
|
-- bind world position texture
|
||||||
glBindTextureUnit 0 (toPos ^. unTO)
|
glBindTextureUnit 0 (toPos ^. unTO)
|
||||||
|
glBindTextureUnit 1 (tanormals ^. unTO)
|
||||||
glDrawArrays
|
glDrawArrays
|
||||||
(_unPrimitiveMode $ pdata ^. shadowLightShader . _1 . shaderPrimitive)
|
(_unPrimitiveMode $ pdata ^. shadowLightShader . _1 . shaderPrimitive)
|
||||||
0
|
0
|
||||||
|
|||||||
@@ -80,13 +80,15 @@ makeShaderUsingVBO ::
|
|||||||
[GLenum] ->
|
[GLenum] ->
|
||||||
-- | The input vertex sizes
|
-- | The input vertex sizes
|
||||||
[Int] ->
|
[Int] ->
|
||||||
-- | The stride
|
|
||||||
Int ->
|
|
||||||
PrimitiveMode ->
|
PrimitiveMode ->
|
||||||
VBO ->
|
VBO ->
|
||||||
IO Shader
|
IO Shader
|
||||||
makeShaderUsingVBO s shaderlist sizes strd pm vbo = setupVAOvbo sizes strd vbo
|
makeShaderUsingVBO s shaderlist sizes pm vbo = do
|
||||||
>>= makeShaderUsingVAO s shaderlist pm
|
let strd = vbo ^. vboVertexSize
|
||||||
|
when (strd < sum sizes) $
|
||||||
|
error "Tried to assign vertex attributes to VBO with too small a stride."
|
||||||
|
vao <- setupVAOvbo sizes strd vbo
|
||||||
|
makeShaderUsingVAO s shaderlist pm vao
|
||||||
|
|
||||||
setupVBO :: Int -> IO VBO
|
setupVBO :: Int -> IO VBO
|
||||||
setupVBO vertexsize = do
|
setupVBO vertexsize = do
|
||||||
|
|||||||
+3
-6
@@ -47,16 +47,13 @@ pokeVerx vbos offsets Verx{_vxPos = thePos, _vxCol = theCol, _vxExt = ext, _vxSh
|
|||||||
pokeWallsWindows ::
|
pokeWallsWindows ::
|
||||||
Ptr Float ->
|
Ptr Float ->
|
||||||
Ptr Float ->
|
Ptr Float ->
|
||||||
Ptr Float ->
|
|
||||||
[((Point2, Point2), Point4)] ->
|
|
||||||
[((Point2, Point2), Point4)] ->
|
[((Point2, Point2), Point4)] ->
|
||||||
[Wall] ->
|
[Wall] ->
|
||||||
IO (Int, Int, Int)
|
IO (Int, Int)
|
||||||
pokeWallsWindows wlptr wiptr truewlptr wls wis truewls = do
|
pokeWallsWindows wiptr truewlptr wis truewls = do
|
||||||
wlcounts1 <- VFSM.foldlM' (pokeW wlptr) 0 (VFSM.fromList wls)
|
|
||||||
wlcounts2 <- VFSM.foldlM' (pokeW wiptr) 0 (VFSM.fromList wis)
|
wlcounts2 <- VFSM.foldlM' (pokeW wiptr) 0 (VFSM.fromList wis)
|
||||||
wlcounts3 <- VFSM.foldlM' (pokeWall truewlptr) 0 (VFSM.fromList truewls)
|
wlcounts3 <- VFSM.foldlM' (pokeWall truewlptr) 0 (VFSM.fromList truewls)
|
||||||
return (wlcounts1, wlcounts2, wlcounts3)
|
return ( wlcounts2, wlcounts3)
|
||||||
|
|
||||||
pokeFloors :: Ptr Float ->
|
pokeFloors :: Ptr Float ->
|
||||||
[(Point3, Point3)] ->
|
[(Point3, Point3)] ->
|
||||||
|
|||||||
Reference in New Issue
Block a user