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