diff --git a/src/core/renderers/webgl/managers/FilterManager.js b/src/core/renderers/webgl/managers/FilterManager.js index 9b51961..6d69090 100644 --- a/src/core/renderers/webgl/managers/FilterManager.js +++ b/src/core/renderers/webgl/managers/FilterManager.js @@ -210,10 +210,11 @@ // 0 is reserverd for the pixi texture so we start at 1! var textureCount = 1; + var currentState; if(shader.uniforms.data.filterArea) { - var currentState = this.filterData.stack[this.filterData.index]; + currentState = this.filterData.stack[this.filterData.index]; var filterArea = shader.uniforms.filterArea; filterArea[0] = currentState.renderTarget.size.width; @@ -224,6 +225,19 @@ shader.uniforms.filterArea = filterArea; } + if(shader.uniforms.data.filterClamp) + { + currentState = this.filterData.stack[this.filterData.index]; + var filterClamp = shader.uniforms.filterClamp; + + filterClamp[0] = 0.5 / currentState.renderTarget.size.width; + filterClamp[1] = 0.5 / currentState.renderTarget.size.height; + filterClamp[2] = (currentState.sourceFrame.width - 0.5) / currentState.renderTarget.size.width; + filterClamp[3] = (currentState.sourceFrame.height - 0.5) / currentState.renderTarget.size.height; + + shader.uniforms.filterClamp = filterClamp; + } + var val; //TODO Cacheing layer.. for(var i in uniformData) diff --git a/src/core/renderers/webgl/managers/FilterManager.js b/src/core/renderers/webgl/managers/FilterManager.js index 9b51961..6d69090 100644 --- a/src/core/renderers/webgl/managers/FilterManager.js +++ b/src/core/renderers/webgl/managers/FilterManager.js @@ -210,10 +210,11 @@ // 0 is reserverd for the pixi texture so we start at 1! var textureCount = 1; + var currentState; if(shader.uniforms.data.filterArea) { - var currentState = this.filterData.stack[this.filterData.index]; + currentState = this.filterData.stack[this.filterData.index]; var filterArea = shader.uniforms.filterArea; filterArea[0] = currentState.renderTarget.size.width; @@ -224,6 +225,19 @@ shader.uniforms.filterArea = filterArea; } + if(shader.uniforms.data.filterClamp) + { + currentState = this.filterData.stack[this.filterData.index]; + var filterClamp = shader.uniforms.filterClamp; + + filterClamp[0] = 0.5 / currentState.renderTarget.size.width; + filterClamp[1] = 0.5 / currentState.renderTarget.size.height; + filterClamp[2] = (currentState.sourceFrame.width - 0.5) / currentState.renderTarget.size.width; + filterClamp[3] = (currentState.sourceFrame.height - 0.5) / currentState.renderTarget.size.height; + + shader.uniforms.filterClamp = filterClamp; + } + var val; //TODO Cacheing layer.. for(var i in uniformData) diff --git a/src/filters/displacement/displacement.frag b/src/filters/displacement/displacement.frag index 51e942e..c989687 100644 --- a/src/filters/displacement/displacement.frag +++ b/src/filters/displacement/displacement.frag @@ -6,6 +6,8 @@ uniform sampler2D uSampler; uniform sampler2D mapSampler; +uniform vec4 filterClamp; + void main(void) { vec4 map = texture2D(mapSampler, vMapCoord); @@ -13,5 +15,5 @@ map -= 0.5; map.xy *= scale; - gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x + map.x, vTextureCoord.y + map.y)); + gl_FragColor = texture2D(uSampler, clamp(vec2(vTextureCoord.x + map.x, vTextureCoord.y + map.y), filterClamp.xy, filterClamp.zw)); }