BugFix ImageFilter timing

new debuging shader
This commit is contained in:
Bruno Herbelin
2022-05-07 18:24:38 +02:00
parent 82be9326a8
commit 137b5ca4f9
2 changed files with 80 additions and 1 deletions

View File

@@ -215,6 +215,8 @@ ImageFilteringShader::ImageFilteringShader(): ImageShader()
custom_shading_.setShaders("shaders/image.vs", shader_code_); custom_shading_.setShaders("shaders/image.vs", shader_code_);
timer_ = g_timer_new (); timer_ = g_timer_new ();
iTime_ = 0.0;
iFrame_ = 0;
ImageShader::reset(); ImageShader::reset();
} }
@@ -227,7 +229,7 @@ ImageFilteringShader::~ImageFilteringShader()
void ImageFilteringShader::update(float dt) void ImageFilteringShader::update(float dt)
{ {
iTime_ += dt; iTime_ += 0.001 * dt;
if (iTime_ > FLT_MAX) if (iTime_ > FLT_MAX)
iTime_ = 0.0; iTime_ = 0.0;

View File

@@ -0,0 +1,77 @@
// Created by inigo quilez - iq/2016
// License Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.
float udRoundBox( vec2 p, vec2 b, float r )
{
return length(max(abs(p)-b,0.0))-r;
}
float sdBox( vec2 p, vec2 b )
{
vec2 d = abs(p) - b;
return min(max(d.x,d.y),0.0) + length(max(d,0.0));
}
//-----------------------------------------------------------------
// Digit drawing function by P_Malin (https://www.shadertoy.com/view/4sf3RN)
float SampleDigit(const in float n, const in vec2 vUV)
{
if(vUV.x < 0.0) return 0.0;
if(vUV.y < 0.0) return 0.0;
if(vUV.x >= 1.0) return 0.0;
if(vUV.y >= 1.0) return 0.0;
float data = 0.0;
if(n < 0.5) data = 7.0 + 5.0*16.0 + 5.0*256.0 + 5.0*4096.0 + 7.0*65536.0;
else if(n < 1.5) data = 2.0 + 2.0*16.0 + 2.0*256.0 + 2.0*4096.0 + 2.0*65536.0;
else if(n < 2.5) data = 7.0 + 1.0*16.0 + 7.0*256.0 + 4.0*4096.0 + 7.0*65536.0;
else if(n < 3.5) data = 7.0 + 4.0*16.0 + 7.0*256.0 + 4.0*4096.0 + 7.0*65536.0;
else if(n < 4.5) data = 4.0 + 7.0*16.0 + 5.0*256.0 + 1.0*4096.0 + 1.0*65536.0;
else if(n < 5.5) data = 7.0 + 4.0*16.0 + 7.0*256.0 + 1.0*4096.0 + 7.0*65536.0;
else if(n < 6.5) data = 7.0 + 5.0*16.0 + 7.0*256.0 + 1.0*4096.0 + 7.0*65536.0;
else if(n < 7.5) data = 4.0 + 4.0*16.0 + 4.0*256.0 + 4.0*4096.0 + 7.0*65536.0;
else if(n < 8.5) data = 7.0 + 5.0*16.0 + 7.0*256.0 + 5.0*4096.0 + 7.0*65536.0;
else if(n < 9.5) data = 7.0 + 4.0*16.0 + 7.0*256.0 + 5.0*4096.0 + 7.0*65536.0;
vec2 vPixel = floor(vUV * vec2(4.0, 5.0));
float fIndex = vPixel.x + (vPixel.y * 4.0);
return mod(floor(data / pow(2.0, fIndex)), 2.0);
}
float PrintInt(const in vec2 uv, const in float value )
{
float res = 0.0;
float maxDigits = 1.0+ceil(log2(value)/log2(10.0));
float digitID = floor(uv.x);
if( digitID>0.0 && digitID<maxDigits )
{
float digitVa = mod( floor( value/pow(10.0,maxDigits-1.0-digitID) ), 10.0 );
res = SampleDigit( digitVa, vec2(fract(uv.x), uv.y) );
}
return res;
}
void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
float px = 1.0 / iResolution.y;
vec2 uv = vec2( fragCoord.x, iResolution.y- fragCoord.y) * px;
// top: 1.0/iTimeDelta as an integer
float col = PrintInt( (uv-vec2(0.2,0.75))*10.0, floor( 1.0/iTimeDelta + 0.5) );
// middle; time
col += PrintInt( (uv-vec2(0.2,0.5))*10.0, int( iTime * 100) );
// bottom: frame
col += PrintInt( (uv-vec2(0.2,0.25))*10.0, iFrame );
// iTimeDelta as vertical bar
col += (1.0-smoothstep( 0.0, px, sdBox( uv-vec2(0.1,0.0), vec2(0.02,60.0*iTimeDelta) )));
fragColor = vec4(col,col,col,1.0);
}