From 75f0fea7fbbd6ebbec41eb9a8a5f43e897106f9a Mon Sep 17 00:00:00 2001
From: Matevz Tadel <mtadel@ucsd.edu>
Date: Thu, 24 Sep 2020 11:48:50 -0700
Subject: [PATCH] Add URL params for RenderQueue setup.

---
 ui5/eve7/lib/GlViewerRCore.js             | 51 +++++++++++++++--------
 ui5/eve7/lib/RendeQuTor.js                |  2 +-
 ui5/eve7/shaders/custom/highPassReve.frag | 37 ++++++++++++++++
 ui5/eve7/shaders/custom/highPassReve.vert | 23 ++++++++++
 ui5/eve7/shaders/custom/lowPassReve.frag  | 37 ++++++++++++++++
 ui5/eve7/shaders/custom/lowPassReve.vert  | 23 ++++++++++
 ui5/eve7/shaders/programs.json            | 16 +++++++
 7 files changed, 170 insertions(+), 19 deletions(-)
 create mode 100644 ui5/eve7/shaders/custom/highPassReve.frag
 create mode 100644 ui5/eve7/shaders/custom/highPassReve.vert
 create mode 100644 ui5/eve7/shaders/custom/lowPassReve.frag
 create mode 100644 ui5/eve7/shaders/custom/lowPassReve.vert
 create mode 100644 ui5/eve7/shaders/programs.json

diff --git a/ui5/eve7/lib/GlViewerRCore.js b/ui5/eve7/lib/GlViewerRCore.js
index 778d9da9827..b0091b53fb2 100644
--- a/ui5/eve7/lib/GlViewerRCore.js
+++ b/ui5/eve7/lib/GlViewerRCore.js
@@ -6,18 +6,32 @@ sap.ui.define([
 
    "use strict";
 
+   var RC;
+   var RP;
+   var RendeQuTor;
+
    function GlViewerRCore(viewer_class)
    {
       GlViewer.call(this, viewer_class);
-   }
 
-   var RC;
-   var RP;
-   var RendeQuTor;
+      const urlParams = new URLSearchParams(window.location.search);
+
+      console.log("XXXX", window.location.search, urlParams.get('UseRenderQueue'), urlParams.get('NoRenderQueue'));
+      this.UseRenderQueue = true;
+      if (urlParams.get('UseRenderQueue') != null) this.UseRenderQueue = true;
+      if (urlParams.get('NoRenderQueue' ) != null) this.UseRenderQueue = false;
+
+      if (this.UseRenderQueue)
+      {
+         let mode_mm = /^(?:Direct|Simple|Full)$/.exec(urlParams.get('RQ_Mode'));
+         let ssaa_mm = /^(1|2|4)$/.               exec(urlParams.get('RQ_SSAA'));
 
-   const UseRenderQueue = true;//false;
-   const RQ_Mode = "Simple"; // "DirectToScreen | Simple | Full"
-   const RQ_SSAA = 1;
+         this.RQ_Mode = (mode_mm) ? mode_mm[0] : "Simple";
+         this.RQ_SSAA = (ssaa_mm) ? ssaa_mm[0] : 2;
+      }
+
+      console.log("UseRenderQueue", this.UseRenderQueue, "RQ_Mode", this.RQ_Mode, "RQ_SSAA", this.RQ_SSAA);
+   }
 
    GlViewerRCore.prototype = Object.assign(Object.create(GlViewer.prototype), {
 
@@ -41,7 +55,7 @@ sap.ui.define([
                console.log("GlViewerRCore.onInit - RenderCore.js loaded");
 
                RC = module;
-               if (UseRenderQueue)
+               if (this.UseRenderQueue)
                {
                   import("../../eve7/lib/RendeQuTor.js").then((module) => {
                      console.log("GlViewerRCore.onInit - RenderPassesRCore.js loaded");
@@ -55,7 +69,7 @@ sap.ui.define([
                   pthis.bootstrap();
                }
             });
-         },
+      },
 
       bootstrap: function()
       {
@@ -106,6 +120,7 @@ sap.ui.define([
          this.renderer = new RC.MeshRenderer(this.canvas, RC.WEBGL2, {antialias: false, stencil: true});
          this.renderer.clearColor = "#FFFFFFFF";
          this.renderer.addShaderLoaderUrls("rootui5sys/eve7/rnr_core/shaders");
+         this.renderer.addShaderLoaderUrls("rootui5sys/eve7/shaders");
 
          this.scene = new RC.Scene();
 
@@ -171,22 +186,22 @@ sap.ui.define([
 
          this.rot_center = new THREE.Vector3(0,0,0);
 
-         if (UseRenderQueue)
+         if (this.UseRenderQueue)
          {
             this.rqt = new RendeQuTor(this.renderer, this.scene, this.camera);
-            if (RQ_Mode == "DirectToScreen")
+            if (this.RQ_Mode == "Direct")
             {
                this.rqt.initDirectToScreen();
             }
-            else if (RQ_Mode == "Simple")
+            else if (this.RQ_Mode == "Simple")
             {
-               this.rqt.initSimple(RQ_SSAA);
-               this.creator.SetupPointLineFacs(RQ_SSAA, RQ_SSAA);
+               this.rqt.initSimple(this.RQ_SSAA);
+               this.creator.SetupPointLineFacs(this.RQ_SSAA, this.RQ_SSAA);
             }
             else
             {
-               this.rqt.initFull(RQ_SSAA);
-               this.creator.SetupPointLineFacs(RQ_SSAA, RQ_SSAA);
+               this.rqt.initFull(this.RQ_SSAA);
+               this.creator.SetupPointLineFacs(this.RQ_SSAA, this.RQ_SSAA);
             }
             this.rqt.updateViewport(w, h);
          }
@@ -396,7 +411,7 @@ sap.ui.define([
       {
          // console.log("RENDER", this.scene, this.camera, this.canvas, this.renderer);
 
-         if (UseRenderQueue)
+         if (this.UseRenderQueue)
             this.rqt.render();
          else
             this.renderer.render( this.scene, this.camera );
@@ -427,7 +442,7 @@ sap.ui.define([
 
          this.renderer.updateViewport(w, h);
 
-         if (UseRenderQueue)
+         if (this.UseRenderQueue)
          {
             this.rqt.updateViewport(w, h);
          }
diff --git a/ui5/eve7/lib/RendeQuTor.js b/ui5/eve7/lib/RendeQuTor.js
index 194f5cef4bc..774130fbd4a 100644
--- a/ui5/eve7/lib/RendeQuTor.js
+++ b/ui5/eve7/lib/RendeQuTor.js
@@ -214,7 +214,7 @@ export class RendeQuTor
     {
         var pthis = this;
 
-        this.RP_HighPass_mat = new RC.CustomShaderMaterial("highPass");
+        this.RP_HighPass_mat = new RC.CustomShaderMaterial("highPassReve");
         this.RP_HighPass_mat.lights = false;
 
         this.RP_HighPass = new RC.RenderPass(
diff --git a/ui5/eve7/shaders/custom/highPassReve.frag b/ui5/eve7/shaders/custom/highPassReve.frag
new file mode 100644
index 00000000000..2bbecb46cef
--- /dev/null
+++ b/ui5/eve7/shaders/custom/highPassReve.frag
@@ -0,0 +1,37 @@
+#version 300 es
+precision mediump float;
+
+
+struct Material {
+    #if (TEXTURE)
+        sampler2D texture0;
+    #fi
+};
+
+
+uniform Material material;
+
+#if (TEXTURE)
+    in vec2 fragUV;
+#fi
+
+//out vec4 color[2];
+out vec4 color;
+
+
+void main() {
+	// check whether fragment output is higher than threshold, if so output as brightness color
+	float brightness = dot(texture(material.texture0, fragUV).rgb, vec3(0.2126, 0.7152, 0.0722));
+
+	if(brightness > 0.75) {
+		//color[0] = texture(material.texture0, fragUV); //texture(material.texture##I_TEX, fragUV)
+		color = texture(material.texture0, fragUV); //texture(material.texture##I_TEX, fragUV)
+	}else{
+		//color[0] = vec4(0.0, 0.0, 0.0, 1.0);
+		color = vec4(0.0, 0.0, 0.0, 1.0);
+	}
+
+
+	//COPY
+	//color[1] = texture(material.texture0, fragUV);
+}
\ No newline at end of file
diff --git a/ui5/eve7/shaders/custom/highPassReve.vert b/ui5/eve7/shaders/custom/highPassReve.vert
new file mode 100644
index 00000000000..03564897924
--- /dev/null
+++ b/ui5/eve7/shaders/custom/highPassReve.vert
@@ -0,0 +1,23 @@
+#version 300 es
+precision mediump float;
+
+
+in vec3 VPos; // Vertex position
+
+#if (TEXTURE)
+    in vec2 uv;  // Texture coordinate
+#fi
+
+// Output quad texture coordinates
+out vec2 fragUV;
+
+
+void main() {
+    gl_Position = vec4(VPos, 1.0);
+
+
+    #if (TEXTURE)
+        // Pass-through texture coordinate
+        fragUV = uv;
+    #fi
+}
diff --git a/ui5/eve7/shaders/custom/lowPassReve.frag b/ui5/eve7/shaders/custom/lowPassReve.frag
new file mode 100644
index 00000000000..69887883b22
--- /dev/null
+++ b/ui5/eve7/shaders/custom/lowPassReve.frag
@@ -0,0 +1,37 @@
+#version 300 es
+precision mediump float;
+
+
+struct Material {
+    #if (TEXTURE)
+        sampler2D texture0;
+    #fi
+};
+
+
+uniform Material material;
+
+#if (TEXTURE)
+    in vec2 fragUV;
+#fi
+
+//out vec4 color[2];
+out vec4 color;
+
+
+void main() {
+	// check whether fragment output is higher than threshold, if so output as brightness color
+	float brightness = dot(texture(material.texture0, fragUV).rgb, vec3(0.2126, 0.7152, 0.0722));
+
+	if(brightness > 0.75){
+		//color[0] = texture(material.texture0, fragUV); //texture(material.texture##I_TEX, fragUV)
+		color = texture(material.texture0, fragUV); //texture(material.texture##I_TEX, fragUV)
+	}else{
+		//color[0] = vec4(0.0, 0.0, 0.0, 1.0);
+		color = vec4(0.0, 0.0, 0.0, 1.0);
+	}
+
+
+	//COPY
+	//color[1] = texture(material.texture0, fragUV);
+}
diff --git a/ui5/eve7/shaders/custom/lowPassReve.vert b/ui5/eve7/shaders/custom/lowPassReve.vert
new file mode 100644
index 00000000000..03564897924
--- /dev/null
+++ b/ui5/eve7/shaders/custom/lowPassReve.vert
@@ -0,0 +1,23 @@
+#version 300 es
+precision mediump float;
+
+
+in vec3 VPos; // Vertex position
+
+#if (TEXTURE)
+    in vec2 uv;  // Texture coordinate
+#fi
+
+// Output quad texture coordinates
+out vec2 fragUV;
+
+
+void main() {
+    gl_Position = vec4(VPos, 1.0);
+
+
+    #if (TEXTURE)
+        // Pass-through texture coordinate
+        fragUV = uv;
+    #fi
+}
diff --git a/ui5/eve7/shaders/programs.json b/ui5/eve7/shaders/programs.json
new file mode 100644
index 00000000000..b75e183336f
--- /dev/null
+++ b/ui5/eve7/shaders/programs.json
@@ -0,0 +1,16 @@
+{
+    "custom_highPassReve": {
+        "description": "High Pass Filter fo REve.",
+        "shaders": {
+            "vertex": "custom/highPassReve.vert",
+            "fragment": "custom/highPassReve.frag"
+        }
+    },
+    "custom_lowPassReve": {
+        "description": "Low Pass Filter fo REve.",
+        "shaders": {
+            "vertex": "custom/post_process/lowPassReve.vert",
+            "fragment": "custom/post_process/lowPassReve.frag"
+        }
+    }
+}
\ No newline at end of file
-- 
GitLab