Use vertex pulling for clouds
This commit is contained in:
@@ -0,0 +1,15 @@
|
|||||||
|
#version 450 core
|
||||||
|
in vec3 vPos;
|
||||||
|
in vec4 vCol;
|
||||||
|
in vec2 vControls;
|
||||||
|
layout (location=0) out vec4 fCol;
|
||||||
|
layout (location=1) out vec4 fPos;
|
||||||
|
layout (location=2) out vec4 fNorm;
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
float d = dot(vControls,vControls);
|
||||||
|
if (d > 1) {discard;}
|
||||||
|
fCol = vec4(vCol.xyz,vCol.w*(1-d));
|
||||||
|
fPos = vec4(vPos, vCol.w*(1-d));
|
||||||
|
fNorm = vec4(-vControls, -0.1 + 0.2 * d ,fPos.w);
|
||||||
|
}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
#version 450 core
|
||||||
|
struct CloudPosCol { vec4 pos; vec4 col; };
|
||||||
|
layout (std140, binding = 0) uniform TheMat { mat4 theMat; } ;
|
||||||
|
layout (std430, binding = 6) readonly buffer CPos { CloudPosCol data[]; };
|
||||||
|
const vec2 indices[6] =
|
||||||
|
{vec2(-1,-1) // 0 2--3
|
||||||
|
,vec2( 1,-1) // 1 | |
|
||||||
|
,vec2( 1, 1) // 3 0--1
|
||||||
|
,vec2(-1,-1) // 0
|
||||||
|
,vec2(-1, 1) // 2
|
||||||
|
,vec2( 1, 1) // 3
|
||||||
|
};
|
||||||
|
out vec4 vCol;
|
||||||
|
out vec2 vControls;
|
||||||
|
out vec3 vPos;
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
uint i = gl_VertexID / 6;
|
||||||
|
uint k = gl_VertexID % 6;
|
||||||
|
vCol = data[i].col;
|
||||||
|
// vCol = vec4(1,0.5,0,1);
|
||||||
|
vControls = indices[k];
|
||||||
|
vPos = vec3(data[i].pos.xy + 20*vControls, data[i].pos.z);
|
||||||
|
gl_Position = theMat * vec4(vPos,1);
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
#version 450 core
|
||||||
|
struct Verx { vec4 pos; vec4 col; };
|
||||||
|
layout (std140, binding = 0) uniform TheMat { mat4 theMat; } ;
|
||||||
|
layout (std430, binding = 6) readonly buffer Pos { Verx data[]; };
|
||||||
|
int indices[6] = {0,1,3,0,3,2};
|
||||||
|
out vec4 vColC;
|
||||||
|
out vec4 vColE;
|
||||||
|
out vec4 vPos;
|
||||||
|
out vec2 vDist;
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
uint i0 = gl_VertexID / 6;
|
||||||
|
uint k = indices[gl_VertexID % 6];
|
||||||
|
vec4 br =
|
||||||
|
//gl_Position = theMat * vec4(pos,1);
|
||||||
|
gl_Position = vec4(pos,1);
|
||||||
|
vCol = col;
|
||||||
|
}
|
||||||
@@ -9,6 +9,5 @@ void main()
|
|||||||
{
|
{
|
||||||
fCol = vCol;
|
fCol = vCol;
|
||||||
fPos = vPos;
|
fPos = vPos;
|
||||||
//fNorm = vec4(vNorm.xyz - vPos.xyz,1);
|
|
||||||
fNorm = vNorm ;
|
fNorm = vNorm ;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
#version 450 core
|
#version 450 core
|
||||||
//struct PosColNorm { vec4 pos; vec4 norm;uint col; uint dummy; };
|
struct PosColNorm { vec4 pos; uint norm; uint col; };
|
||||||
struct PosColNorm { vec4 pos; uint norm;uint col; };
|
|
||||||
// I don't know if the dummy is necessary
|
|
||||||
layout (std140, binding = 0) uniform TheMat { mat4 theMat; } ;
|
layout (std140, binding = 0) uniform TheMat { mat4 theMat; } ;
|
||||||
layout (std430, binding = 3) readonly buffer Data { PosColNorm data[]; };
|
layout (std430, binding = 3) readonly buffer Data { PosColNorm data[]; };
|
||||||
layout (std430, binding = 4) readonly buffer Indices { uint indices[]; };
|
layout (std430, binding = 4) readonly buffer Indices { uint indices[]; };
|
||||||
@@ -12,7 +10,6 @@ void main() {
|
|||||||
vPos = data[indices[gl_VertexID]].pos;
|
vPos = data[indices[gl_VertexID]].pos;
|
||||||
vCol = unpackUnorm4x8(data[indices[gl_VertexID]].col);
|
vCol = unpackUnorm4x8(data[indices[gl_VertexID]].col);
|
||||||
vNorm = unpackSnorm4x8(data[indices[gl_VertexID]].norm);
|
vNorm = unpackSnorm4x8(data[indices[gl_VertexID]].norm);
|
||||||
//vNorm = n *2 - vec4(1,1,1,1);
|
|
||||||
gl_Position = theMat * vec4(vPos.xyz,1);
|
gl_Position = theMat * vec4(vPos.xyz,1);
|
||||||
}
|
}
|
||||||
//layout (location = 0) in vec4 pos;
|
//layout (location = 0) in vec4 pos;
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ data RenderData = RenderData
|
|||||||
, _wallVBO :: VBO
|
, _wallVBO :: VBO
|
||||||
, _cloudVBO :: VBO
|
, _cloudVBO :: VBO
|
||||||
, _cloudShader :: Shader
|
, _cloudShader :: Shader
|
||||||
, _cloudEBO :: UintBO
|
-- , _cloudEBO :: UintBO
|
||||||
, _screenTextureVAO :: VAO
|
, _screenTextureVAO :: VAO
|
||||||
, _dummyVAO :: VAO
|
, _dummyVAO :: VAO
|
||||||
}
|
}
|
||||||
|
|||||||
+64
-37
@@ -61,6 +61,11 @@ doDrawing' win pdata u = do
|
|||||||
let wswp = wallSPics <> worldSPic cfig u
|
let wswp = wallSPics <> worldSPic cfig u
|
||||||
ws = wswp ^. _1
|
ws = wswp ^. _1
|
||||||
wp = wswp ^. _2
|
wp = wswp ^. _2
|
||||||
|
nCloudVs <-
|
||||||
|
V.foldM'
|
||||||
|
(pokeCloud (pdata ^. cloudVBO . vboPtr))
|
||||||
|
0
|
||||||
|
(V.fromList $ w ^. cWorld . lWorld . clouds)
|
||||||
((nWins, trueNWalls), (nShapeVs, nIndices, nSilIndices)) <-
|
((nWins, trueNWalls), (nShapeVs, nIndices, nSilIndices)) <-
|
||||||
MP.liftM3
|
MP.liftM3
|
||||||
(\_ a b -> (a, b))
|
(\_ a b -> (a, b))
|
||||||
@@ -83,28 +88,40 @@ doDrawing' win pdata u = do
|
|||||||
(0, 0, 0)
|
(0, 0, 0)
|
||||||
ws
|
ws
|
||||||
)
|
)
|
||||||
(nCloudVs', nCloudIs') <-
|
-- (nCloudVs', nCloudIs') <-
|
||||||
-- Might want to sort the clouds based on z depth, not sure
|
-- -- Might want to sort the clouds based on z depth, not sure
|
||||||
V.foldM'
|
-- V.foldM'
|
||||||
(pokeCloud (pdata ^. cloudVBO . vboPtr) (pdata ^. cloudEBO . uiboPtr))
|
-- (pokeCloud (pdata ^. cloudVBO . vboPtr) (pdata ^. cloudEBO . uiboPtr))
|
||||||
(0, 0)
|
-- (0, 0)
|
||||||
(V.fromList $ w ^. cWorld . lWorld . clouds)
|
-- (V.fromList $ w ^. cWorld . lWorld . clouds)
|
||||||
(nCloudVs, nCloudIs) <-
|
-- (nCloudVs, nCloudIs) <-
|
||||||
V.foldM'
|
-- V.foldM'
|
||||||
(pokeDust (pdata ^. cloudVBO . vboPtr) (pdata ^. cloudEBO . uiboPtr))
|
-- (pokeDust (pdata ^. cloudVBO . vboPtr) (pdata ^. cloudEBO . uiboPtr))
|
||||||
(nCloudVs', nCloudIs')
|
-- (nCloudVs', nCloudIs')
|
||||||
(V.fromList $ w ^. cWorld . lWorld . dusts)
|
-- (V.fromList $ w ^. cWorld . lWorld . dusts)
|
||||||
|
--nCloudVs' <-
|
||||||
|
-- nCloudVs <-
|
||||||
|
-- V.foldM'
|
||||||
|
-- (pokeCloud (pdata ^. cloudVBO . vboPtr))
|
||||||
|
-- 0
|
||||||
|
-- (V.fromList $ w ^. cWorld . lWorld . clouds)
|
||||||
|
-- nCloudVs <-
|
||||||
|
-- V.foldM'
|
||||||
|
-- (pokeDust (pdata ^. cloudVBO . vboPtr))
|
||||||
|
-- nCloudVs'
|
||||||
|
-- (V.fromList $ w ^. cWorld . lWorld . dusts)
|
||||||
-- bind wall points, silhouette data, surface geometry
|
-- bind wall points, silhouette data, surface geometry
|
||||||
bufferShaderLayers shadV pokeCounts
|
bufferShaderLayers shadV pokeCounts
|
||||||
mapM_
|
mapM_
|
||||||
(uncurry bufferPokedVBO)
|
(uncurry bufferPokedVBO)
|
||||||
[ (_vboShapes pdata, nShapeVs)
|
[ (_vboShapes pdata, nShapeVs)
|
||||||
, (pdata ^. cloudVBO, nCloudVs)
|
-- , (pdata ^. cloudVBO, nCloudVs) should probably do it this way
|
||||||
|
-- eventually
|
||||||
]
|
]
|
||||||
mapM_
|
mapM_
|
||||||
(uncurry bufferEBO)
|
(uncurry bufferEBO)
|
||||||
[ (_cloudEBO pdata, nCloudIs)
|
[-- (_cloudEBO pdata, nCloudIs)
|
||||||
, (_shapeEBO pdata, nIndices)
|
(_shapeEBO pdata, nIndices)
|
||||||
]
|
]
|
||||||
-- set the coordinate uniform ready for drawing elements using world coordinates
|
-- set the coordinate uniform ready for drawing elements using world coordinates
|
||||||
bufferPerspectiveMatrixUBO cfig (w ^. wCam) (pdata ^. matUBO)
|
bufferPerspectiveMatrixUBO cfig (w ^. wCam) (pdata ^. matUBO)
|
||||||
@@ -115,13 +132,20 @@ doDrawing' win pdata u = do
|
|||||||
glNamedBufferSubData (pdata ^. wallVBO . vboName) 0
|
glNamedBufferSubData (pdata ^. wallVBO . vboName) 0
|
||||||
(fromIntegral $ trueNWalls * sizeOf (0::Float) * 8)
|
(fromIntegral $ trueNWalls * sizeOf (0::Float) * 8)
|
||||||
(pdata ^. wallVBO . vboPtr)
|
(pdata ^. wallVBO . vboPtr)
|
||||||
glNamedBufferSubData (pdata ^. vboShapes . vboName) 0
|
-- glNamedBufferSubData (pdata ^. vboShapes . vboName) 0
|
||||||
(fromIntegral $ nShapeVs * shapeVerxSize)
|
-- (fromIntegral $ nShapeVs * shapeVerxSize)
|
||||||
(pdata ^. vboShapes . vboPtr)
|
-- (pdata ^. vboShapes . vboPtr)
|
||||||
glNamedBufferSubData (pdata ^. shapeEBO . uiboName) 0
|
glNamedBufferSubData (pdata ^. shapeEBO . uiboName) 0
|
||||||
(fromIntegral $ nIndices * (sizeOf (0::GLuint)))
|
(fromIntegral $ nIndices * (sizeOf (0::GLuint)))
|
||||||
(pdata ^. shapeEBO . uiboPtr)
|
(pdata ^. shapeEBO . uiboPtr)
|
||||||
bufferEBO (pdata ^. silhouetteEBO) nSilIndices
|
bufferEBO (pdata ^. silhouetteEBO) nSilIndices
|
||||||
|
-- withArray [0::Float,0,30,1,1,1,1,1] $
|
||||||
|
-- glNamedBufferSubData (pdata ^. cloudVBO . vboName) 0
|
||||||
|
-- (fromIntegral (sizeOf (0::Float)) * 8)
|
||||||
|
glNamedBufferSubData (pdata ^. cloudVBO . vboName)
|
||||||
|
0
|
||||||
|
(fromIntegral $ 8 * nCloudVs * (sizeOf (0::Float)))
|
||||||
|
(pdata ^. cloudVBO . vboPtr)
|
||||||
setViewport _gr_world_res cfig
|
setViewport _gr_world_res cfig
|
||||||
glBindFramebuffer GL_FRAMEBUFFER (pdata ^. fboBase . _1 . unFBO)
|
glBindFramebuffer GL_FRAMEBUFFER (pdata ^. fboBase . _1 . unFBO)
|
||||||
glDepthMask GL_TRUE
|
glDepthMask GL_TRUE
|
||||||
@@ -169,11 +193,8 @@ doDrawing' win pdata u = do
|
|||||||
-- 0
|
-- 0
|
||||||
-- (fromIntegral trueNWalls)
|
-- (fromIntegral trueNWalls)
|
||||||
glUseProgram (pdata ^. pullWallShader . shaderUINT)
|
glUseProgram (pdata ^. pullWallShader . shaderUINT)
|
||||||
glBindVertexArray $ pdata ^. dummyVAO . vaoName
|
--glBindVertexArray $ pdata ^. dummyVAO . vaoName
|
||||||
glDrawArrays
|
glDrawArrays GL_TRIANGLES 0 (fromIntegral trueNWalls * 6)
|
||||||
GL_TRIANGLES
|
|
||||||
0
|
|
||||||
(fromIntegral trueNWalls * 6)
|
|
||||||
--draw object shapes onto base buffer
|
--draw object shapes onto base buffer
|
||||||
let fs = _shapeShader pdata
|
let fs = _shapeShader pdata
|
||||||
glUseProgram (_shaderUINT fs)
|
glUseProgram (_shaderUINT fs)
|
||||||
@@ -251,11 +272,13 @@ doDrawing' win pdata u = do
|
|||||||
glBlendFuncSeparate GL_ZERO GL_ONE GL_CONSTANT_ALPHA GL_ONE_MINUS_SRC_ALPHA
|
glBlendFuncSeparate GL_ZERO GL_ONE GL_CONSTANT_ALPHA GL_ONE_MINUS_SRC_ALPHA
|
||||||
glUseProgram (pdata ^. cloudShader . shaderUINT)
|
glUseProgram (pdata ^. cloudShader . shaderUINT)
|
||||||
glBindVertexArray $ pdata ^. cloudShader . shaderVAO . vaoName
|
glBindVertexArray $ pdata ^. cloudShader . shaderVAO . vaoName
|
||||||
glDrawElements
|
glDrawArrays GL_TRIANGLES 0 (fromIntegral nCloudVs * 6)
|
||||||
(pdata ^. cloudShader . shaderPrimitive . unPrimitiveMode)
|
--glDrawArrays GL_TRIANGLES 0 6
|
||||||
(fromIntegral nCloudIs)
|
-- glDrawElements
|
||||||
GL_UNSIGNED_INT
|
-- (pdata ^. cloudShader . shaderPrimitive . unPrimitiveMode)
|
||||||
nullPtr
|
-- (fromIntegral nCloudIs)
|
||||||
|
-- GL_UNSIGNED_INT
|
||||||
|
-- nullPtr
|
||||||
glDepthMask GL_TRUE
|
glDepthMask GL_TRUE
|
||||||
|
|
||||||
--setup downscale viewport for blurring bloom
|
--setup downscale viewport for blurring bloom
|
||||||
@@ -295,11 +318,13 @@ doDrawing' win pdata u = do
|
|||||||
0
|
0
|
||||||
glUseProgram (pdata ^. cloudShader . shaderUINT)
|
glUseProgram (pdata ^. cloudShader . shaderUINT)
|
||||||
glBindVertexArray $ pdata ^. cloudShader . shaderVAO . vaoName
|
glBindVertexArray $ pdata ^. cloudShader . shaderVAO . vaoName
|
||||||
glDrawElements
|
glDrawArrays GL_TRIANGLES 0 (fromIntegral nCloudVs * 6)
|
||||||
(pdata ^. cloudShader . shaderPrimitive . unPrimitiveMode)
|
--glDrawArrays GL_TRIANGLES 0 6
|
||||||
(fromIntegral nCloudIs)
|
---- glDrawElements
|
||||||
GL_UNSIGNED_INT
|
---- (pdata ^. cloudShader . shaderPrimitive . unPrimitiveMode)
|
||||||
nullPtr
|
---- (fromIntegral nCloudIs)
|
||||||
|
---- GL_UNSIGNED_INT
|
||||||
|
---- nullPtr
|
||||||
-- glEnable GL_CULL_FACE
|
-- glEnable GL_CULL_FACE
|
||||||
-- glEnable GL_DEPTH_CLAMP
|
-- glEnable GL_DEPTH_CLAMP
|
||||||
-- glCullFace GL_BACK
|
-- glCullFace GL_BACK
|
||||||
@@ -327,11 +352,13 @@ doDrawing' win pdata u = do
|
|||||||
glUseProgram (pdata ^. cloudShader . shaderUINT)
|
glUseProgram (pdata ^. cloudShader . shaderUINT)
|
||||||
glBindVertexArray $ pdata ^. cloudShader . shaderVAO . vaoName
|
glBindVertexArray $ pdata ^. cloudShader . shaderVAO . vaoName
|
||||||
-- glDepthMask GL_TRUE
|
-- glDepthMask GL_TRUE
|
||||||
glDrawElements
|
glDrawArrays GL_TRIANGLES 0 (fromIntegral nCloudVs * 6)
|
||||||
(pdata ^. cloudShader . shaderPrimitive . unPrimitiveMode)
|
--glDrawArrays GL_TRIANGLES 0 6
|
||||||
(fromIntegral nCloudIs)
|
----glDrawElements
|
||||||
GL_UNSIGNED_INT
|
---- (pdata ^. cloudShader . shaderPrimitive . unPrimitiveMode)
|
||||||
nullPtr
|
---- (fromIntegral nCloudIs)
|
||||||
|
---- GL_UNSIGNED_INT
|
||||||
|
---- nullPtr
|
||||||
---
|
---
|
||||||
-- glEnable GL_CULL_FACE
|
-- glEnable GL_CULL_FACE
|
||||||
-- glEnable GL_DEPTH_CLAMP
|
-- glEnable GL_DEPTH_CLAMP
|
||||||
|
|||||||
+19
-19
@@ -58,7 +58,8 @@ preloadRender = do
|
|||||||
let shapessbosize = fromIntegral shapeVerxSize * 65536
|
let shapessbosize = fromIntegral shapeVerxSize * 65536
|
||||||
glNamedBufferStorage shapessbo shapessbosize nullPtr GL_DYNAMIC_STORAGE_BIT
|
glNamedBufferStorage shapessbo shapessbosize nullPtr GL_DYNAMIC_STORAGE_BIT
|
||||||
glBindBufferBase GL_SHADER_STORAGE_BUFFER 3 shapessbo
|
glBindBufferBase GL_SHADER_STORAGE_BUFFER 3 shapessbo
|
||||||
shptr <- mallocArray (fromIntegral shapessbosize)
|
--shptr <- mallocArray (fromIntegral shapessbosize)
|
||||||
|
shptr <- mallocArray (8 * 65536)
|
||||||
let shVBO = VBO shapessbo shptr shapeVerxSize
|
let shVBO = VBO shapessbo shptr shapeVerxSize
|
||||||
|
|
||||||
ishapessbo <- mglCreate glCreateBuffers
|
ishapessbo <- mglCreate glCreateBuffers
|
||||||
@@ -74,27 +75,26 @@ preloadRender = do
|
|||||||
glBindBufferBase GL_SHADER_STORAGE_BUFFER 5 ieshapessbo
|
glBindBufferBase GL_SHADER_STORAGE_BUFFER 5 ieshapessbo
|
||||||
ieptr <- mallocArray 65536 -- so we can go back to glushort...
|
ieptr <- mallocArray 65536 -- so we can go back to glushort...
|
||||||
|
|
||||||
|
cloudbo <- mglCreate glCreateBuffers
|
||||||
|
let cvsize = (sizeOf (0::Float)) * 8
|
||||||
|
cloudbosize = fromIntegral cvsize * 65536 -- this should be changed
|
||||||
|
glNamedBufferStorage cloudbo cloudbosize nullPtr GL_DYNAMIC_STORAGE_BIT
|
||||||
|
glBindBufferBase GL_SHADER_STORAGE_BUFFER 6 cloudbo
|
||||||
|
cloudptr <- mallocBytes (fromIntegral cloudbosize)
|
||||||
|
let cloudvbo = VBO cloudbo cloudptr cvsize
|
||||||
|
|
||||||
dummyvao <- mglCreate glGenVertexArrays
|
dummyvao <- mglCreate glGenVertexArrays
|
||||||
|
|
||||||
|
|
||||||
winpull <- makeShaderUsingVAO "pull/window" [vert,frag] pmTriangles (VAO dummyvao)
|
winpull <- makeShaderUsingVAO "pull/window" [vert,frag] pmTriangles (VAO dummyvao)
|
||||||
|
|
||||||
wallpull <- makeShaderUsingVAO "pull/wall" [vert,frag] pmTriangles (VAO dummyvao)
|
wallpull <- makeShaderUsingVAO "pull/wall" [vert,frag] pmTriangles (VAO dummyvao)
|
||||||
|
|
||||||
putStrLn "Setup shape VBO, VAO, EBO"
|
|
||||||
-- shVBO <- setupVBO shapeVerxSize
|
|
||||||
-- shPosVAO <- setupVAOUsingVBO [VertexAttribute 4 GL_FLOAT GL_FALSE 0] shVBO
|
|
||||||
-- shEBO <- setupEBO shPosVAO
|
|
||||||
-- note the shape shader vao is distinct from the position vao, but they
|
|
||||||
-- share an EBO
|
|
||||||
-- shapeshader <- makeShaderUsingVBO "shape/basic" [vert, frag] shapeVerxAttributes
|
|
||||||
-- pmTriangles
|
|
||||||
-- shVBO
|
|
||||||
-- glVertexArrayElementBuffer (shapeshader ^. shaderVAO . vaoName) (shEBO ^. uiboName)
|
|
||||||
shapeshader <-
|
shapeshader <-
|
||||||
makeShaderUsingVAO "shape/basic" [vert, frag] pmTriangles (VAO dummyvao)
|
makeShaderUsingVAO "shape/basic" [vert, frag] pmTriangles (VAO dummyvao)
|
||||||
|
|
||||||
putStrLn "Setup wall/windows VBO, VAO, EBO, shader"
|
cloudshader <- makeShaderUsingVAO "pull/cloud" [vert,frag] pmTriangles (VAO dummyvao)
|
||||||
-- winvbo <- setupVBO (floatSize * 8)
|
|
||||||
putStrLn "Setup lighting shaders"
|
putStrLn "Setup lighting shaders"
|
||||||
lightingWallShadShad <-
|
lightingWallShadShad <-
|
||||||
makeShaderUsingVAO "lighting/wallShadow" [vert] pmTriangles (VAO dummyvao)
|
makeShaderUsingVAO "lighting/wallShadow" [vert] pmTriangles (VAO dummyvao)
|
||||||
@@ -158,11 +158,11 @@ preloadRender = do
|
|||||||
(toFloatVAs [3])
|
(toFloatVAs [3])
|
||||||
pmTriangles
|
pmTriangles
|
||||||
chasmvbo
|
chasmvbo
|
||||||
putStrLn "Setup cloud VBO, shader"
|
-- putStrLn "Setup cloud VBO, shader"
|
||||||
let cloudverxsizes = [4, 4, 4]
|
-- let cloudverxsizes = [4, 4, 4]
|
||||||
cloudvbo <- setupVBO (floatSize * sum cloudverxsizes)
|
-- cloudvbo <- setupVBO (floatSize * sum cloudverxsizes)
|
||||||
(cloudshader, cloudebo) <-
|
-- (cloudshader, cloudebo) <-
|
||||||
makeShaderEBO "cloud/basic" [vert, frag] (toFloatVAs cloudverxsizes) pmTriangles cloudvbo
|
-- makeShaderEBO "cloud/basic" [vert, frag] (toFloatVAs cloudverxsizes) pmTriangles cloudvbo
|
||||||
framebuf2 <- newTextureFramebuffer
|
framebuf2 <- newTextureFramebuffer
|
||||||
framebuf3 <- newTextureFramebuffer
|
framebuf3 <- newTextureFramebuffer
|
||||||
|
|
||||||
@@ -240,7 +240,7 @@ preloadRender = do
|
|||||||
-- , _wallShader = wallshader
|
-- , _wallShader = wallshader
|
||||||
, _cloudVBO = cloudvbo
|
, _cloudVBO = cloudvbo
|
||||||
, _cloudShader = cloudshader
|
, _cloudShader = cloudshader
|
||||||
, _cloudEBO = cloudebo
|
-- , _cloudEBO = cloudebo
|
||||||
, _screenTextureVAO = screentexturevao
|
, _screenTextureVAO = screentexturevao
|
||||||
, _dummyVAO = VAO dummyvao
|
, _dummyVAO = VAO dummyvao
|
||||||
}
|
}
|
||||||
|
|||||||
+47
-28
@@ -4,19 +4,21 @@ module Shader.Poke.Cloud (pokeCloud, pokeDust) where
|
|||||||
|
|
||||||
import Color
|
import Color
|
||||||
import Control.Lens
|
import Control.Lens
|
||||||
import qualified Data.Vector.Unboxed as UV
|
--import qualified Data.Vector.Unboxed as UV
|
||||||
import Dodge.Data.Cloud
|
import Dodge.Data.Cloud
|
||||||
import Dodge.Material.Color
|
import Dodge.Material.Color
|
||||||
import Foreign
|
import Foreign
|
||||||
import Geometry.Data
|
import Geometry.Data
|
||||||
import Graphics.GL.Core45
|
--import Graphics.GL.Core45
|
||||||
import Linear
|
--import Linear
|
||||||
|
|
||||||
pokeCloud :: Ptr Float -> Ptr GLuint -> (Int, Int) -> Cloud -> IO (Int, Int)
|
pokeCloud :: Ptr Float -> Int -> Cloud -> IO Int
|
||||||
pokeCloud vptr iptr (nv, ni) = pokeCloudLike vptr iptr (nv, ni) . mkCloudCloudLike
|
pokeCloud vptr nv = pokeCloudLike vptr nv . mkCloudCloudLike
|
||||||
|
--pokeCloud :: Ptr Float -> Ptr GLuint -> (Int, Int) -> Cloud -> IO (Int, Int)
|
||||||
|
--pokeCloud vptr iptr (nv, ni) = pokeCloudLike vptr iptr (nv, ni) . mkCloudCloudLike
|
||||||
|
|
||||||
pokeDust :: Ptr Float -> Ptr GLuint -> (Int, Int) -> Dust -> IO (Int, Int)
|
pokeDust :: Ptr Float -> Int -> Dust -> IO Int
|
||||||
pokeDust vptr iptr (nv, ni) = pokeCloudLike vptr iptr (nv, ni) . mkDustCloudLike
|
pokeDust vptr nv = pokeCloudLike vptr nv . mkDustCloudLike
|
||||||
|
|
||||||
mkCloudCloudLike :: Cloud -> (Point3, Point4)
|
mkCloudCloudLike :: Cloud -> (Point3, Point4)
|
||||||
mkCloudCloudLike x = (x ^. clPos, V4 r g b a)
|
mkCloudCloudLike x = (x ^. clPos, V4 r g b a)
|
||||||
@@ -30,21 +32,38 @@ mkDustCloudLike x = (x ^. dsPos, V4 r g b a)
|
|||||||
(V4 r g b a') = dustColor x
|
(V4 r g b a') = dustColor x
|
||||||
a = a' * min 1 (fromIntegral (_dsTimer x) / 100)
|
a = a' * min 1 (fromIntegral (_dsTimer x) / 100)
|
||||||
|
|
||||||
pokeCloudLike ::
|
--pokeCloudLike ::
|
||||||
Ptr Float -> Ptr GLuint -> (Int, Int) -> (Point3, Point4) -> IO (Int, Int)
|
-- Ptr Float -> Ptr GLuint -> (Int, Int) -> (Point3, Point4) -> IO (Int, Int)
|
||||||
pokeCloudLike vptr iptr (nv, ni) x = do
|
--pokeCloudLike vptr iptr (nv, ni) x = do
|
||||||
UV.imapM_ (pokeCloudLikeVerx vptr x nv) $
|
-- UV.imapM_ (pokeCloudLikeVerx vptr x nv) $
|
||||||
UV.fromList [(1, 1), (-1, 1), (-1, -1), (1, -1)]
|
-- UV.fromList [(1, 1), (-1, 1), (-1, -1), (1, -1)]
|
||||||
UV.imapM_ (pokeCloudIndex iptr nv ni) $ UV.fromList [0, 1, 2, 2, 0, 3]
|
-- UV.imapM_ (pokeCloudIndex iptr nv ni) $ UV.fromList [0, 1, 2, 2, 0, 3]
|
||||||
return (nv + 4, ni + 6)
|
-- return (nv + 4, ni + 6)
|
||||||
|
pokeCloudLike :: Ptr Float -> Int -> (Point3, Point4) -> IO Int
|
||||||
|
pokeCloudLike ptr nv (V3 x y z, V4 r g b a) = do
|
||||||
|
pokeElemOff ptr (nv * 8) x
|
||||||
|
pokeElemOff ptr (nv * 8 + 1) y
|
||||||
|
pokeElemOff ptr (nv * 8 + 2) z
|
||||||
|
pokeElemOff ptr (nv * 8 + 3) 1
|
||||||
|
pokeElemOff ptr (nv * 8 + 4) r
|
||||||
|
pokeElemOff ptr (nv * 8 + 5) g
|
||||||
|
pokeElemOff ptr (nv * 8 + 6) b
|
||||||
|
pokeElemOff ptr (nv * 8 + 7) a
|
||||||
|
return $ nv + 1
|
||||||
|
|
||||||
pokeCloudLikeVerx :: Ptr Float -> (Point3, Point4) -> Int -> Int -> (Float, Float) -> IO ()
|
--pokeCloudLikeVerx :: Ptr Float -> (Point3, Point4) -> Int -> Int -> (Float, Float) -> IO ()
|
||||||
{-# INLINE pokeCloudLikeVerx #-}
|
--{-# INLINE pokeCloudLikeVerx #-}
|
||||||
pokeCloudLikeVerx ptr (V3 cx cy cz, V4 r g b a) nv i (dx, dy) =
|
--pokeCloudLikeVerx ptr (V3 cx cy cz, V4 r g b a) nv i (dx, dy) =
|
||||||
UV.imapM_ (pokeCloudFloat ptr (nv + i)) $
|
-- UV.imapM_ (pokeCloudFloat ptr (nv + i)) $
|
||||||
UV.fromList [x, y, cz, 1, r, g, b, a, dx, dy, 0, 0]
|
-- UV.fromList [x, y, cz, 1, r, g, b, a, dx, dy, 0, 0]
|
||||||
where
|
-- where
|
||||||
V2 x y = V2 cx cy + 20 *^ V2 dx dy
|
-- V2 x y = V2 cx cy + 20 *^ V2 dx dy
|
||||||
|
|
||||||
|
--pokeCloudLikeVerx :: Ptr Float -> (Point3, Point4) -> Int -> Int -> (Float, Float) -> IO ()
|
||||||
|
--{-# INLINE pokeCloudLikeVerx #-}
|
||||||
|
--pokeCloudLikeVerx ptr (V3 x y z, V4 r g b a) nv i (dx, dy) =
|
||||||
|
-- UV.imapM_ (pokeCloudFloat ptr (nv + i)) $
|
||||||
|
-- UV.fromList [x, y, z, 1, r, g, b, a]
|
||||||
|
|
||||||
clColor :: CloudType -> Color
|
clColor :: CloudType -> Color
|
||||||
clColor = \case
|
clColor = \case
|
||||||
@@ -53,13 +72,13 @@ clColor = \case
|
|||||||
CryoReleaseCloud -> white
|
CryoReleaseCloud -> white
|
||||||
GasCloud -> green
|
GasCloud -> green
|
||||||
|
|
||||||
pokeCloudFloat :: Ptr Float -> Int -> Int -> Float -> IO ()
|
--pokeCloudFloat :: Ptr Float -> Int -> Int -> Float -> IO ()
|
||||||
{-# INLINE pokeCloudFloat #-}
|
--{-# INLINE pokeCloudFloat #-}
|
||||||
pokeCloudFloat ptr nv i = pokeElemOff ptr (nv * 12 + i)
|
--pokeCloudFloat ptr nv i = pokeElemOff ptr (nv * 12 + i)
|
||||||
|
--
|
||||||
pokeCloudIndex :: Ptr GLuint -> Int -> Int -> Int -> Int -> IO ()
|
--pokeCloudIndex :: Ptr GLuint -> Int -> Int -> Int -> Int -> IO ()
|
||||||
{-# INLINE pokeCloudIndex #-}
|
--{-# INLINE pokeCloudIndex #-}
|
||||||
pokeCloudIndex ptr nv ni ioff voff = pokeElemOff ptr (ni + ioff) (fromIntegral $ nv + voff)
|
--pokeCloudIndex ptr nv ni ioff voff = pokeElemOff ptr (ni + ioff) (fromIntegral $ nv + voff)
|
||||||
|
|
||||||
dustColor :: Dust -> Color
|
dustColor :: Dust -> Color
|
||||||
dustColor = materialColor . _dsType
|
dustColor = materialColor . _dsType
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
module Shape.Parameters (shapeVerxSize) where
|
module Shape.Parameters (shapeVerxSize) where
|
||||||
-- ,shapeVerxAttributes) where
|
|
||||||
|
|
||||||
import Foreign.Storable
|
import Foreign.Storable
|
||||||
|
|
||||||
|
|||||||
@@ -1623,7 +1623,6 @@ _clickPos src/Dodge/Data/Input.hs 42;" f
|
|||||||
_clickWorldPos src/Dodge/Data/Input.hs 44;" f
|
_clickWorldPos src/Dodge/Data/Input.hs 44;" f
|
||||||
_closeButtons src/Dodge/Data/HUD.hs 36;" f
|
_closeButtons src/Dodge/Data/HUD.hs 36;" f
|
||||||
_closeItems src/Dodge/Data/HUD.hs 35;" f
|
_closeItems src/Dodge/Data/HUD.hs 35;" f
|
||||||
_cloudEBO src/Data/Preload/Render.hs 58;" f
|
|
||||||
_cloudShader src/Data/Preload/Render.hs 57;" f
|
_cloudShader src/Data/Preload/Render.hs 57;" f
|
||||||
_cloudVBO src/Data/Preload/Render.hs 56;" f
|
_cloudVBO src/Data/Preload/Render.hs 56;" f
|
||||||
_clouds src/Dodge/Data/LWorld.hs 96;" f
|
_clouds src/Dodge/Data/LWorld.hs 96;" f
|
||||||
@@ -2699,7 +2698,7 @@ brightX src/Color.hs 116;" f
|
|||||||
btSPic src/Dodge/Render/ShapePicture.hs 129;" f
|
btSPic src/Dodge/Render/ShapePicture.hs 129;" f
|
||||||
btText src/Dodge/Inventory/SelectionList.hs 237;" f
|
btText src/Dodge/Inventory/SelectionList.hs 237;" f
|
||||||
bufferEBO src/Shader/Bind.hs 28;" f
|
bufferEBO src/Shader/Bind.hs 28;" f
|
||||||
bufferPerspectiveMatrixUBO src/Dodge/Render.hs 472;" f
|
bufferPerspectiveMatrixUBO src/Dodge/Render.hs 490;" f
|
||||||
bufferPokedVBO src/Shader/Bind.hs 19;" f
|
bufferPokedVBO src/Shader/Bind.hs 19;" f
|
||||||
bufferShaderLayers src/Shader/Bind.hs 32;" f
|
bufferShaderLayers src/Shader/Bind.hs 32;" f
|
||||||
bulletBeltBracer src/Dodge/Item/Equipment.hs 67;" f
|
bulletBeltBracer src/Dodge/Item/Equipment.hs 67;" f
|
||||||
@@ -2784,7 +2783,7 @@ circleSolid src/Picture/Base.hs 164;" f
|
|||||||
circleSolidCol src/Picture/Base.hs 168;" f
|
circleSolidCol src/Picture/Base.hs 168;" f
|
||||||
clAlt src/Dodge/Cloud.hs 5;" f
|
clAlt src/Dodge/Cloud.hs 5;" f
|
||||||
clClSpringVel src/Dodge/Update.hs 839;" f
|
clClSpringVel src/Dodge/Update.hs 839;" f
|
||||||
clColor src/Shader/Poke/Cloud.hs 49;" f
|
clColor src/Shader/Poke/Cloud.hs 68;" f
|
||||||
clZoneSize src/Dodge/Zoning/Cloud.hs 21;" f
|
clZoneSize src/Dodge/Zoning/Cloud.hs 21;" f
|
||||||
clampPath src/Dodge/Room/Procedural.hs 146;" f
|
clampPath src/Dodge/Room/Procedural.hs 146;" f
|
||||||
clang1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 560;" f
|
clang1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 560;" f
|
||||||
@@ -2877,7 +2876,7 @@ copier src/Dodge/Item/Scope.hs 88;" f
|
|||||||
copierItemUpdate src/Dodge/Creature/State.hs 131;" f
|
copierItemUpdate src/Dodge/Creature/State.hs 131;" f
|
||||||
copyItemToFloor src/Dodge/FloorItem.hs 14;" f
|
copyItemToFloor src/Dodge/FloorItem.hs 14;" f
|
||||||
corDoor src/Dodge/Room/Room.hs 385;" f
|
corDoor src/Dodge/Room/Room.hs 385;" f
|
||||||
cornerList src/Preload/Render.hs 249;" f
|
cornerList src/Preload/Render.hs 246;" f
|
||||||
corpseOrGib src/Dodge/Creature/Update.hs 111;" f
|
corpseOrGib src/Dodge/Creature/Update.hs 111;" f
|
||||||
corridor src/Dodge/Room/Corridor.hs 17;" f
|
corridor src/Dodge/Room/Corridor.hs 17;" f
|
||||||
corridorBoss src/Dodge/LockAndKey.hs 133;" f
|
corridorBoss src/Dodge/LockAndKey.hs 133;" f
|
||||||
@@ -3370,7 +3369,7 @@ dtToLRAdjEither src/Dodge/DoubleTree.hs 181;" f
|
|||||||
dtToRootIntMap' src/Dodge/DoubleTree.hs 153;" f
|
dtToRootIntMap' src/Dodge/DoubleTree.hs 153;" f
|
||||||
dtToUpDownAdj src/Dodge/DoubleTree.hs 158;" f
|
dtToUpDownAdj src/Dodge/DoubleTree.hs 158;" f
|
||||||
dummyMenuOption src/Dodge/Menu/Option.hs 72;" f
|
dummyMenuOption src/Dodge/Menu/Option.hs 72;" f
|
||||||
dustColor src/Shader/Poke/Cloud.hs 64;" f
|
dustColor src/Shader/Poke/Cloud.hs 83;" f
|
||||||
dustSpringVel src/Dodge/Update.hs 850;" f
|
dustSpringVel src/Dodge/Update.hs 850;" f
|
||||||
ebColor src/Dodge/EnergyBall.hs 77;" f
|
ebColor src/Dodge/EnergyBall.hs 77;" f
|
||||||
ebDamage src/Dodge/EnergyBall.hs 85;" f
|
ebDamage src/Dodge/EnergyBall.hs 85;" f
|
||||||
@@ -3553,7 +3552,7 @@ getCrMoveSpeed src/Dodge/Creature/Statistics.hs 50;" f
|
|||||||
getCrsFromRooms src/Dodge/Room/Tutorial.hs 357;" f
|
getCrsFromRooms src/Dodge/Room/Tutorial.hs 357;" f
|
||||||
getCrsFromRooms' src/Dodge/Room/Tutorial.hs 344;" f
|
getCrsFromRooms' src/Dodge/Room/Tutorial.hs 344;" f
|
||||||
getDebugMouseOver src/Dodge/Update.hs 374;" f
|
getDebugMouseOver src/Dodge/Update.hs 374;" f
|
||||||
getDistortions src/Dodge/Render.hs 478;" f
|
getDistortions src/Dodge/Render.hs 496;" f
|
||||||
getEdgesCrossing src/Dodge/Path.hs 37;" f
|
getEdgesCrossing src/Dodge/Path.hs 37;" f
|
||||||
getGrenadeHitEffect src/Dodge/HeldUse.hs 1264;" f
|
getGrenadeHitEffect src/Dodge/HeldUse.hs 1264;" f
|
||||||
getInventoryPath src/Dodge/Inventory/Path.hs 9;" f
|
getInventoryPath src/Dodge/Inventory/Path.hs 9;" f
|
||||||
@@ -3704,7 +3703,7 @@ initWallZoning src/Dodge/Wall/Zone.hs 12;" f
|
|||||||
initialRoomTree src/Dodge/Floor.hs 24;" f
|
initialRoomTree src/Dodge/Floor.hs 24;" f
|
||||||
initialWorld src/Dodge/Initialisation.hs 15;" f
|
initialWorld src/Dodge/Initialisation.hs 15;" f
|
||||||
initialisePlaying src/Sound.hs 77;" f
|
initialisePlaying src/Sound.hs 77;" f
|
||||||
initializeGLState src/Preload/Render.hs 267;" f
|
initializeGLState src/Preload/Render.hs 264;" f
|
||||||
initializeOptionMenu src/Dodge/Menu/Option.hs 17;" f
|
initializeOptionMenu src/Dodge/Menu/Option.hs 17;" f
|
||||||
initializeOptionMenuBO src/Dodge/Menu/Option.hs 30;" f
|
initializeOptionMenuBO src/Dodge/Menu/Option.hs 30;" f
|
||||||
initializeTexture2D src/Framebuffer/Update.hs 205;" f
|
initializeTexture2D src/Framebuffer/Update.hs 205;" f
|
||||||
@@ -4151,9 +4150,9 @@ missileLaunchS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 674;" f
|
|||||||
mixColors src/Color.hs 86;" f
|
mixColors src/Color.hs 86;" f
|
||||||
mixColorsFrac src/Color.hs 82;" f
|
mixColorsFrac src/Color.hs 82;" f
|
||||||
mixColorsLinear src/Color.hs 95;" f
|
mixColorsLinear src/Color.hs 95;" f
|
||||||
mkCloudCloudLike src/Shader/Poke/Cloud.hs 21;" f
|
mkCloudCloudLike src/Shader/Poke/Cloud.hs 23;" f
|
||||||
mkCustomLenses src/ThirdPartyLens.hs 7;" f
|
mkCustomLenses src/ThirdPartyLens.hs 7;" f
|
||||||
mkDustCloudLike src/Shader/Poke/Cloud.hs 27;" f
|
mkDustCloudLike src/Shader/Poke/Cloud.hs 29;" f
|
||||||
mkGraphFromEdges src/GraphHelp.hs 4;" f
|
mkGraphFromEdges src/GraphHelp.hs 4;" f
|
||||||
mkNode src/Dodge/Graph.hs 29;" f
|
mkNode src/Dodge/Graph.hs 29;" f
|
||||||
mkRectangle src/Dodge/LevelGen/DoorPane.hs 7;" f
|
mkRectangle src/Dodge/LevelGen/DoorPane.hs 7;" f
|
||||||
@@ -4391,13 +4390,10 @@ pokeBoxSurface src/Shader/Poke.hs 263;" f
|
|||||||
pokeChasm src/Shader/Poke/Floor.hs 24;" f
|
pokeChasm src/Shader/Poke/Floor.hs 24;" f
|
||||||
pokeChasmVerx src/Shader/Poke/Floor.hs 28;" f
|
pokeChasmVerx src/Shader/Poke/Floor.hs 28;" f
|
||||||
pokeCloud src/Shader/Poke/Cloud.hs 15;" f
|
pokeCloud src/Shader/Poke/Cloud.hs 15;" f
|
||||||
pokeCloudFloat src/Shader/Poke/Cloud.hs 56;" f
|
pokeCloudLike src/Shader/Poke/Cloud.hs 42;" f
|
||||||
pokeCloudIndex src/Shader/Poke/Cloud.hs 60;" f
|
|
||||||
pokeCloudLike src/Shader/Poke/Cloud.hs 33;" f
|
|
||||||
pokeCloudLikeVerx src/Shader/Poke/Cloud.hs 41;" f
|
|
||||||
pokeCylinder src/Shader/Poke.hs 173;" f
|
pokeCylinder src/Shader/Poke.hs 173;" f
|
||||||
pokeCylinderCaps src/Shader/Poke.hs 216;" f
|
pokeCylinderCaps src/Shader/Poke.hs 216;" f
|
||||||
pokeDust src/Shader/Poke/Cloud.hs 18;" f
|
pokeDust src/Shader/Poke/Cloud.hs 20;" f
|
||||||
pokeF src/Shader/Poke.hs 68;" f
|
pokeF src/Shader/Poke.hs 68;" f
|
||||||
pokeFlatV src/Shader/Poke.hs 449;" f
|
pokeFlatV src/Shader/Poke.hs 449;" f
|
||||||
pokeFloors src/Shader/Poke.hs 62;" f
|
pokeFloors src/Shader/Poke.hs 62;" f
|
||||||
@@ -4820,7 +4816,7 @@ setTiles src/Dodge/Layout.hs 67;" f
|
|||||||
setTreeInts src/Dodge/Room/Tutorial.hs 98;" f
|
setTreeInts src/Dodge/Room/Tutorial.hs 98;" f
|
||||||
setViewDistance src/Dodge/Update/Camera.hs 239;" f
|
setViewDistance src/Dodge/Update/Camera.hs 239;" f
|
||||||
setViewPos src/Dodge/Creature/ReaderUpdate.hs 69;" f
|
setViewPos src/Dodge/Creature/ReaderUpdate.hs 69;" f
|
||||||
setViewport src/Dodge/Render.hs 483;" f
|
setViewport src/Dodge/Render.hs 501;" f
|
||||||
setVol src/Dodge/Config.hs 47;" f
|
setVol src/Dodge/Config.hs 47;" f
|
||||||
setWristShieldPos src/Dodge/Equipment.hs 49;" f
|
setWristShieldPos src/Dodge/Equipment.hs 49;" f
|
||||||
setWristShieldPos src/Dodge/Euse.hs 38;" f
|
setWristShieldPos src/Dodge/Euse.hs 38;" f
|
||||||
@@ -4845,7 +4841,7 @@ shadVBOptr src/Shader.hs 40;" f
|
|||||||
shaderTypeExt src/Shader/Compile.hs 176;" f
|
shaderTypeExt src/Shader/Compile.hs 176;" f
|
||||||
shapeBounds src/Dodge/Room/Foreground.hs 147;" f
|
shapeBounds src/Dodge/Room/Foreground.hs 147;" f
|
||||||
shapePoints src/Dodge/Room/Foreground.hs 144;" f
|
shapePoints src/Dodge/Room/Foreground.hs 144;" f
|
||||||
shapeVerxSize src/Shape/Parameters.hs 6;" f
|
shapeVerxSize src/Shape/Parameters.hs 5;" f
|
||||||
shatterGun src/Dodge/Item/Held/Weapons.hs 8;" f
|
shatterGun src/Dodge/Item/Held/Weapons.hs 8;" f
|
||||||
shatterGunSPic src/Dodge/Item/Draw/SPic.hs 312;" f
|
shatterGunSPic src/Dodge/Item/Draw/SPic.hs 312;" f
|
||||||
shellExplosionCheck src/Dodge/Projectile/Update.hs 50;" f
|
shellExplosionCheck src/Dodge/Projectile/Update.hs 50;" f
|
||||||
|
|||||||
Reference in New Issue
Block a user