From 332a0f4e03f35132f86657c33814b577c0070a60 Mon Sep 17 00:00:00 2001
From: Mathias Paulin <mathias.paulin@irit.fr>
Date: Wed, 14 Apr 2021 19:01:29 +0200
Subject: [PATCH] Prototype of LIC function

---
 .../ImageProcess.frag.glsl                    | 44 +++++++++++++++++--
 1 file changed, 41 insertions(+), 3 deletions(-)

diff --git a/src/libRender/RadiumNBR/Shaders/ImageProcessingPass/ImageProcess.frag.glsl b/src/libRender/RadiumNBR/Shaders/ImageProcessingPass/ImageProcess.frag.glsl
index 721692b..0183a63 100644
--- a/src/libRender/RadiumNBR/Shaders/ImageProcessingPass/ImageProcess.frag.glsl
+++ b/src/libRender/RadiumNBR/Shaders/ImageProcessingPass/ImageProcess.frag.glsl
@@ -54,11 +54,47 @@ vec4 lic(in sampler2D desc,in bool invertdir) {
 
 */
 
+vec4 lic(in sampler2D desc,in bool invertdir, in vec2 imgSize) {
+    const int halfsize = 10;
+    vec2 coord = varTexcoord;
+    vec2 dir = texture(desc,coord).xy;
+    if ( length(dir) <0.0001 )
+        return vec4(0);
+    if(invertdir)
+        dir = vec2(dir.y,-dir.x);
+    float res = whiteNoise( dir, imgSize);
+
+    vec2 currentdir = dir;
+
+    for(int i=1;i<=halfsize;i++) {
+        coord  = coord + currentdir;//*halfsize;
+        currentdir = texture(desc,coord).xy;
+        res   += whiteNoise( currentdir, imgSize);
+        if(invertdir)
+            currentdir = vec2(currentdir.y,-currentdir.x);
+    }
+
+    coord = varTexcoord;
+    currentdir = dir;
+    for(int i=1;i<=halfsize;i++) {
+        coord  = coord - currentdir;//*halfsize;
+        currentdir = texture(desc,coord).xy;
+        res   += whiteNoise( currentdir, imgSize);
+        if(invertdir)
+            currentdir = vec2(currentdir.y,-currentdir.x);
+    }
+    res = res/(2.0f*float(halfsize)+1.0f);
+    return vec4(vec3(res), 0);
+}
+
+
+
 void main() {
+    vec2 imgSize = vec2(textureSize(image_sampler, 0));
     /*
     // 4x4 filtering for test
     const int half_width = 2;
-    vec2 texelSize = 1.0 / vec2(textureSize(image_sampler, 0));
+    vec2 texelSize = 1.0 / vec2(imgSize);
     vec3 result = vec3(0.0);
     for (int x = -half_width; x < half_width; ++x)
     {
@@ -70,8 +106,10 @@ void main() {
     }
     out_color = vec4(result / (4 * half_width * half_width), 1);
     */
-
-    vec2 imgSize = vec2(textureSize(image_sampler, 0));
+    /*
     out_color = vec4( vec3( whiteNoise( varTexcoord, imgSize) ), 1);
+    */
+    out_color = lic(image_sampler, false, imgSize);
+
 }
 
-- 
GitLab