diff --git a/shader/texture/barrel.frag b/shader/texture/barrel.frag index 2208f250d..6c5a220e5 100644 --- a/shader/texture/barrel.frag +++ b/shader/texture/barrel.frag @@ -1,18 +1,25 @@ #version 430 core -in vec2 cenPos; in vec2 texPos; in vec2 texDist; -in float factor; +in float gfactor; +in vec2 vcpos; out vec4 fColor; layout (binding = 1) uniform sampler2D screenTexture; float f ( float x) { - return max (1, 1 / (2 * x + 0.5)) ; -// return min (1, x) ; + //return max (1, 1 / (2 * x + 0.5)) ; + //return min (1, x) ; + if (x>1) {return 1;} else {return (1-gfactor)*x + gfactor;} + //if (x>1) {return 1;} else {return 0.5;} } void main() { - vec4 tColor = vec4(texture(screenTexture , texPos) ); - float t = distance(cenPos,texDist); - fColor = vec4(tColor.xy,t,tColor.w); - //, cenPos + f(distance(cenPos,texDist)) * (texPos - cenPos))) ; + float t = f(length(texDist)); + fColor = vec4(texture(screenTexture + , 0.5+0.5 *( vcpos + t * (texPos - vcpos)) + ) + ); + //vec4 tColor = vec4(texture(screenTexture , cpos + (texPos - cpos)) ); + //float t = distance(cenPos,texPos); + //fColor = vec4(tColor.xy,t,tColor.w); + //fColor = tColor; } diff --git a/shader/texture/barrel.geom b/shader/texture/barrel.geom index 00209e2e6..6031dd218 100644 --- a/shader/texture/barrel.geom +++ b/shader/texture/barrel.geom @@ -3,45 +3,43 @@ layout (points) in; layout (triangle_strip, max_vertices = 4) out; in vec2 vRad1[]; in vec2 vRad2[]; +in vec2 vCen[]; in float vFactor[]; -out vec2 cenPos; +out vec2 vcpos; out vec2 texPos; out vec2 texDist; -out float factor; -//const float root = 1 / sqrt(2); -const float root = 1; -vec2 cpos = gl_in[0].gl_Position.xy; -vec2 rad1 = vRad1[0]; -vec2 rad2 = vRad2[0]; -vec2 g(float x,float y) +out float gfactor; + +vec2 g(float x,float y, vec2 v, vec2 r1, vec2 r2) { return vec2 - //(x,y); - (dot(rad1-cpos,vec2(x,y)-cpos) - ,dot(rad2-cpos,vec2(x,y)-cpos) + (dot(normalize(r1-v),vec2(x,y)-v) / length(r1-v) + ,dot(normalize(r2-v),vec2(x,y)-v) / length(r2-v) ); } void main() { - float factor = vFactor[0]; - cenPos = cpos; + vec2 cpos = vCen[0]; + //vcpos = 2*cpos - vec2(1,1); + vcpos = cpos; + vec2 grad1 = vRad1[0]; + vec2 grad2 = vRad2[0]; + gfactor = vFactor[0]; texPos = vec2(1,1); - //texDist = g(root,root); - texDist = vec2(root,root); + texDist = g(1,1,cpos,grad1,grad2); gl_Position = vec4 (1,1,0,1); - //gl_Position = vec4 (cenPos,0,1); EmitVertex(); texPos = vec2(1,0); - //texDist = g(root,-root); - texDist = vec2(root,-root); + texPos = vec2(1,-1); + texDist = g(1,-1,cpos,grad1,grad2); gl_Position = vec4 (1,-1,0,1); EmitVertex(); texPos = vec2(0,1); - //texDist = g(-root,root); - texDist = vec2(-root,root); + texPos = vec2(-1,1); + texDist = g(-1,1,cpos,grad1,grad2); gl_Position = vec4 (-1,1,0,1); EmitVertex(); texPos = vec2(0,0); - //texDist = g(-root,-root); - texDist = vec2(-root,-root); + texPos = vec2(-1,-1); + texDist = g(-1,-1,cpos,grad1,grad2); gl_Position = vec4 (-1,-1,0,1); EmitVertex(); EndPrimitive(); diff --git a/shader/texture/barrel.vert b/shader/texture/barrel.vert index 835f8fffe..d280e4b12 100644 --- a/shader/texture/barrel.vert +++ b/shader/texture/barrel.vert @@ -4,14 +4,18 @@ layout (location = 1) in vec2 rad1; layout (location = 2) in vec2 rad2; layout (location = 3) in float factor; layout (std140, binding = 0) uniform TheMat { mat4 theMat; } ; +out vec2 vCen; out vec2 vRad1; out vec2 vRad2; out float vFactor; void main() { - gl_Position = theMat * vec4(pos,0,1); - //gl_Position = vec4(1,1,0,1); + gl_Position = vec4(0,0,0,1); + vCen = (theMat * vec4(pos,0,1)).xy; + //vCen = (theMat * vec4(0,0,0,1)).xy; vRad1 = (theMat * vec4(rad1,0,1)).xy; + //vRad1 = (theMat * vec4(0,200,0,1)).xy; vRad2 = (theMat * vec4(rad2,0,1)).xy; + //vRad2 = (theMat * vec4(200,0,0,1)).xy; vFactor = factor; } diff --git a/src/Dodge/Default/World.hs b/src/Dodge/Default/World.hs index 3137583f6..9df96971b 100644 --- a/src/Dodge/Default/World.hs +++ b/src/Dodge/Default/World.hs @@ -78,7 +78,7 @@ defaultWorld = World , _inventoryMode = TopInventory , _lClickHammer = HammerUp , _foregroundDecorations = [] - , _radDistortion = [((00,400),(0,80),(40,40),0.5)] + , _radDistortion = [((-20,120),(60,120),(-20,40),0.5)] } defaultDebugFlags :: DebugFlags defaultDebugFlags = DebugFlags diff --git a/src/Dodge/Render.hs b/src/Dodge/Render.hs index c36122a9d..1a5b8e8aa 100644 --- a/src/Dodge/Render.hs +++ b/src/Dodge/Render.hs @@ -146,9 +146,10 @@ doDrawing pdata w = do clear [ColorBuffer] activeTexture $= TextureUnit 1 textureBinding Texture2D $= Just (snd $ _fboBase pdata) + bufferUBO $ perspectiveMatrixb rot camzoom trans wins viewFroms nraddist <- F.foldM (pokeShader $ _barrelShader pdata) (map Render2221 $ _radDistortion w) bindShaderBuffers [_barrelShader pdata] [nraddist] - drawShader (_barrelShader pdata) 4 + drawShader (_barrelShader pdata) nraddist activeTexture $= TextureUnit 0 -- draw overlay