From 22712ecc4699f63874ff9c6e02e21f1e47f820f3 Mon Sep 17 00:00:00 2001 From: pandrr Date: Fri, 2 Feb 2024 10:52:15 +0100 Subject: [PATCH 01/12] localfile --- .../Ops.Sidebar.LocalFileToDataUrl.js | 18 +++++++++++++-- .../Ops.Sidebar.LocalFileToDataUrl.json | 23 ++++++++++++++++++- .../Ops.Sidebar.LocalFileToDataUrl.md | 13 +++++++++++ 3 files changed, 51 insertions(+), 3 deletions(-) create mode 100644 src/ops/base/Ops.Sidebar.LocalFileToDataUrl/Ops.Sidebar.LocalFileToDataUrl.md diff --git a/src/ops/base/Ops.Sidebar.LocalFileToDataUrl/Ops.Sidebar.LocalFileToDataUrl.js b/src/ops/base/Ops.Sidebar.LocalFileToDataUrl/Ops.Sidebar.LocalFileToDataUrl.js index d5dbaf8add..a07227e4c7 100644 --- a/src/ops/base/Ops.Sidebar.LocalFileToDataUrl/Ops.Sidebar.LocalFileToDataUrl.js +++ b/src/ops/base/Ops.Sidebar.LocalFileToDataUrl/Ops.Sidebar.LocalFileToDataUrl.js @@ -3,6 +3,7 @@ const parentPort = op.inObject("link", "element"), labelPort = op.inString("Text", "Select File:"), inLabelText = op.inString("Button Text", "Choose File"), + inAccept = op.inString("Accept Files", ""), inId = op.inValueString("Id", ""), inVisible = op.inBool("Visible", true), inGreyOut = op.inBool("Grey Out", false), @@ -36,23 +37,27 @@ fileInputEle.name = "file"; fileInputEle.style["background-color"] = "transparent"; fileInputEle.style.width = "90%"; fileInputEle.style.display = "none"; -// fileInputEle.style.float = "left"; const elReset = document.createElement("div"); elReset.style.cursor = "pointer"; elReset.style.position = "absolute"; elReset.style.right = "10px"; elReset.style["margin-top"] = "15px"; + elReset.innerHTML = "  ✕"; const fileInputButton = document.createElement("div"); fileInputButton.classList.add("sidebar__button-input"); fileInputButton.innerHTML = inLabelText.get(); - fileInputButton.onclick = () => { fileInputEle.click(); }; inOpenDialog.onTriggered = () => { fileInputButton.click(); }; fileInputButton.style["margin-top"] = "10px"; +fileInputButton.style["padding-left"] = "5px"; +fileInputButton.style["padding-right"] = "5px"; fileInputButton.style.width = "80%"; +fileInputButton.style["text-overflow"] = "ellipsis"; +fileInputButton.style.overflow = "hidden"; +fileInputButton.style["white-space"] = "nowrap"; el.appendChild(elReset); el.appendChild(fileInputButton); @@ -67,6 +72,11 @@ greyOut.classList.add("sidebar__greyout"); el.appendChild(greyOut); greyOut.style.display = "none"; +inAccept.onChange = () => +{ + fileInputEle.accept = inAccept.get(); +}; + inLabelText.onChange = () => { fileInputButton.innerHTML = inLabelText.get(); @@ -86,6 +96,7 @@ function onReset() { fileInputEle.value = ""; outDataURL.set(""); + fileInputButton.innerHTML = inLabelText.get(); } reset.onTriggered = onReset; @@ -109,10 +120,13 @@ function handleFileSelect(evt) { reader.readAsDataURL(evt.target.files[0]); outFilename.set(evt.target.files[0].name); + fileInputButton.innerHTML = evt.target.files[0].name; outObject.set(evt.target.files[0]); } else { + fileInputButton.innerHTML = inLabelText.get(); + outDataURL.set(""); outFilename.set(""); outObject.set(null); diff --git a/src/ops/base/Ops.Sidebar.LocalFileToDataUrl/Ops.Sidebar.LocalFileToDataUrl.json b/src/ops/base/Ops.Sidebar.LocalFileToDataUrl/Ops.Sidebar.LocalFileToDataUrl.json index 00d4aaf0a0..4b788c8bd2 100644 --- a/src/ops/base/Ops.Sidebar.LocalFileToDataUrl/Ops.Sidebar.LocalFileToDataUrl.json +++ b/src/ops/base/Ops.Sidebar.LocalFileToDataUrl/Ops.Sidebar.LocalFileToDataUrl.json @@ -21,6 +21,18 @@ "type": "feature", "author": "pandur", "date": 1705997265649 + }, + { + "message": "File Select Button now shows Filename when a file was selected", + "type": "feature", + "author": "pandur", + "date": 1706866865908 + }, + { + "message": "Added Accept input to filter accepable files by extension", + "type": "feature", + "author": "pandur", + "date": 1706867407064 } ], "authorName": "pandur", @@ -39,6 +51,10 @@ "type": "5", "name": "Button Text" }, + { + "type": "5", + "name": "Accept Files" + }, { "type": "0", "name": "Id", @@ -86,7 +102,12 @@ "issues": "", "youtubeids": [], "docs": { - "ports": [] + "ports": [ + { + "name": "File Object", + "text": "File Select Button now shows Filename when a file was selected" + } + ] }, "exampleProjectId": "a0V6xn" } diff --git a/src/ops/base/Ops.Sidebar.LocalFileToDataUrl/Ops.Sidebar.LocalFileToDataUrl.md b/src/ops/base/Ops.Sidebar.LocalFileToDataUrl/Ops.Sidebar.LocalFileToDataUrl.md new file mode 100644 index 0000000000..1e3e299c41 --- /dev/null +++ b/src/ops/base/Ops.Sidebar.LocalFileToDataUrl/Ops.Sidebar.LocalFileToDataUrl.md @@ -0,0 +1,13 @@ +Let the user select a file from their local harddrive. The file is not loaded to any server, it is just loaded in to memory. +You can connect the dataUrl output to a texture op to load an image as a texture in cables. + +Internally it uses an `<input type="file"/>` , the way standard html file select + +### Accept Parameter + +- A valid case-insensitive filename extension, starting with a period (".") character. For example: `.jpg`, `.pdf`, or `.doc` +- Multiple extensions seperated by comma, like `.png,.jpg` +- A valid MIME type string, with no extensions. +- The string `audio/*` meaning "any audio file". +- The string `video/*` meaning "any video file". +- The string `image/*` meaning "any image file". From dcf7b86e7ab4471a07cfc4d662fdfa8446909284 Mon Sep 17 00:00:00 2001 From: pandrr Date: Fri, 2 Feb 2024 16:21:34 +0100 Subject: [PATCH 02/12] shader op relationship --- src/core/cgl/cgl_mesh.js | 4 +- src/core/cgl/cgl_shader.js | 4 +- .../cgl/shadermodifier/cgl_shadermodifier.js | 1 + ...recated.Admin.TransformInstancedIndexed.js | 2 +- ...Gl.TextureEffects.RandomClusterScroller.js | 2 +- ...Deprecated.Gl.Shader.TextureSinusWobble.js | 2 +- ...d.Gl.Stereoscopic.Interleaved3dMaterial.js | 2 +- ...ated.Gl.Stereoscopic.SideBySideMaterial.js | 2 +- .../Ops.Deprecated.Gl.TextureEffects.Blur.js | 2 +- ...eprecated.Gl.TextureEffects.BlurByDepth.js | 2 +- ...d.Gl.TextureEffects.ChromaticAberration.js | 2 +- ...precated.Gl.TextureEffects.ColorLookup2.js | 2 +- ...precated.Gl.TextureEffects.ColorMapping.js | 2 +- ...recated.Gl.TextureEffects.ColorMapping2.js | 2 +- ...precated.Gl.TextureEffects.ColorOverlay.js | 2 +- ...recated.Gl.TextureEffects.ColorOverlay2.js | 2 +- ...extureEffects.CustomTextureEffectShader.js | 2 +- ...precated.Gl.TextureEffects.DepthOfField.js | 2 +- ...ecated.Gl.TextureEffects.DepthOfField22.js | 2 +- ...precated.Gl.TextureEffects.DepthStripes.js | 2 +- ...Gl.TextureEffects.DepthTextureIntersect.js | 2 +- ...Gl.TextureEffects.EdgeDetectionFreiChen.js | 2 +- ...eprecated.Gl.TextureEffects.LumaKeySoft.js | 2 +- ...eprecated.Gl.TextureEffects.LumaToAlpha.js | 2 +- ...s.Deprecated.Gl.TextureEffects.MixImage.js | 2 +- ...l.TextureEffects.Noise.RectangularNoise.js | 2 +- .../Ops.Deprecated.Gl.TextureEffects.Noise.js | 2 +- ...ted.Gl.TextureEffects.PixelDisplacement.js | 2 +- ....TextureEffects.PixelDisplacementCenter.js | 2 +- ....Deprecated.Gl.TextureEffects.PixelSort.js | 2 +- .../Ops.Deprecated.Gl.TextureEffects.SSAO.js | 2 +- ...ps.Deprecated.Gl.TextureEffects.SSAO_v1.js | 2 +- ...ps.Deprecated.Gl.TextureEffects.SSAO_v2.js | 2 +- ....Deprecated.Gl.TextureEffects.SineCurve.js | 2 +- ...ecated.Gl.TextureEffects.SubstractColor.js | 2 +- ...ps.Deprecated.Gl.TextureEffects.ToneMap.js | 2 +- .../Ops.Deprecated.Gl.TextureEffects.Twirl.js | 2 +- ...eprecated.Gl.TextureEffects.VignetteOld.js | 2 +- .../Ops.Dev.Debug.GlTextureStack.js | 2 +- .../Ops.Dev.Gl.ImageCompose.ToneMap.js | 2 +- ...ps.Dev.Gl.TextureEffects.ChromaKeyAlpha.js | 2 +- .../Ops.Dev.GlArrayCurlNoise.js | 2 +- .../Ops.Dev.GlArrayMath.js | 2 +- .../Ops.Dev.GlArrayModulo.js | 8 +- .../Ops.Dev.GlArrayNormalize.js | 2 +- .../Ops.Dev.GlArrayRandom.js | 2 +- .../Ops.Dev.InstancedModulo.js | 2 +- .../Ops.Dev.LinesArrayFromTexture.js | 2 +- .../Ops.Dev.VertexTexture.RgbCurlNoise.js | 2 +- .../Ops.Gl.GLTF.GltfMorphTargets.js | 2 +- .../Ops.Gl.GLTF.GltfSkin.js | 2 +- .../Ops.Gl.ImageCompose.AlphaMask.js | 2 +- .../Ops.Gl.ImageCompose.AlphaMask_v2.js | 2 +- .../Ops.Gl.ImageCompose.BarrelDistortion.js | 2 +- ...Ops.Gl.ImageCompose.BarrelDistortion_v2.js | 2 +- ...Ops.Gl.ImageCompose.BarrelDistortion_v3.js | 2 +- .../Ops.Gl.ImageCompose.ClampTexture.js | 2 +- .../Ops.Gl.ImageCompose.Clarity.js | 2 +- .../Ops.Gl.ImageCompose.ColorBalance.js | 2 +- .../Ops.Gl.ImageCompose.ColorBalance_v2.js | 2 +- .../Ops.Gl.ImageCompose.ColorChannel.js | 2 +- .../Ops.Gl.ImageCompose.ColorChannel_v2.js | 2 +- .../Ops.Gl.ImageCompose.ColorMap.js | 2 +- .../Ops.Gl.ImageCompose.ColorMap_v2.js | 2 +- .../Ops.Gl.ImageCompose.Denoise.js | 2 +- .../Ops.Gl.ImageCompose.DepthTexture.js | 2 +- .../Ops.Gl.ImageCompose.DepthTextureFocus.js | 2 +- ...ps.Gl.ImageCompose.DepthTextureFocus_v2.js | 2 +- .../Ops.Gl.ImageCompose.DepthTexture_v2.js | 2 +- .../Ops.Gl.ImageCompose.Desaturate.js | 2 +- .../Ops.Gl.ImageCompose.Dither.js | 2 +- .../Ops.Gl.ImageCompose.Dither_v2.js | 2 +- .../Ops.Gl.ImageCompose.EdgeDetection.js | 2 +- .../Ops.Gl.ImageCompose.EdgeDetection_v2.js | 2 +- .../Ops.Gl.ImageCompose.EdgeDetection_v3.js | 2 +- .../Ops.Gl.ImageCompose.EdgeDetection_v4.js | 2 +- .../Ops.Gl.ImageCompose.Emboss.js | 2 +- .../Ops.Gl.ImageCompose.FXAA.js | 2 +- .../Ops.Gl.ImageCompose.Flip.js | 2 +- ...ps.Gl.ImageCompose.Float32ToRgbeTexture.js | 2 +- .../Ops.Gl.ImageCompose.Fog.js | 2 +- .../Ops.Gl.ImageCompose.Fog_v2.js | 2 +- .../Ops.Gl.ImageCompose.GammaCorrection.js | 2 +- .../Ops.Gl.ImageCompose.GammaCorrection_v2.js | 2 +- .../Ops.Gl.ImageCompose.GridTexture.js | 2 +- .../Ops.Gl.ImageCompose.GridTexture_v2.js | 2 +- .../Ops.Gl.ImageCompose.GrowPixels.js | 2 +- .../Ops.Gl.ImageCompose.GrowPixels_v2.js | 2 +- .../Ops.Gl.ImageCompose.Hue.js | 2 +- .../Ops.Gl.ImageCompose.Interlace.js | 2 +- .../Ops.Gl.ImageCompose.Invert.js | 2 +- .../Ops.Gl.ImageCompose.Invert_v2.js | 2 +- .../Ops.Gl.ImageCompose.Kaleidoscope.js | 2 +- .../Ops.Gl.ImageCompose.Kaleidoscope_v2.js | 2 +- .../Ops.Gl.ImageCompose.LUTMap.js | 2 +- .../Ops.Gl.ImageCompose.LensDirt.js | 2 +- .../Ops.Gl.ImageCompose.LensDirt_v2.js | 2 +- .../Ops.Gl.ImageCompose.LensScratches.js | 2 +- .../Ops.Gl.ImageCompose.LensScratches_v2.js | 2 +- .../Ops.Gl.ImageCompose.Levels.js | 2 +- .../Ops.Gl.ImageCompose.Levels_v2.js | 2 +- .../Ops.Gl.ImageCompose.Math.Normalize.js | 2 +- .../Ops.Gl.ImageCompose.Math.RgbMath.js | 2 +- ....Gl.ImageCompose.Math.RgbMathExpression.js | 2 +- .../Ops.Gl.ImageCompose.Math.RgbTransform.js | 2 +- ....ImageCompose.Math.RgbeToFloat32Texture.js | 2 +- ...Ops.Gl.ImageCompose.Math.TexMathCompare.js | 2 +- .../Ops.Gl.ImageCompose.Mirror.js | 2 +- .../Ops.Gl.ImageCompose.Mix.js | 2 +- ...Ops.Gl.ImageCompose.Noise.CellularNoise.js | 2 +- ....Gl.ImageCompose.Noise.CellularNoise_v2.js | 2 +- .../Ops.Gl.ImageCompose.Noise.GlitchNoise.js | 2 +- ...ps.Gl.ImageCompose.Noise.GlitchNoise_v2.js | 2 +- .../Ops.Gl.ImageCompose.Noise.HexagonNoise.js | 2 +- ...s.Gl.ImageCompose.Noise.HexagonNoise_v2.js | 2 +- .../Ops.Gl.ImageCompose.Noise.PixelNoise.js | 2 +- ...Ops.Gl.ImageCompose.Noise.PixelNoise_v2.js | 2 +- ...Ops.Gl.ImageCompose.Noise.PixelNoise_v3.js | 2 +- ...Ops.Gl.ImageCompose.Noise.PolkaDotNoise.js | 2 +- ....Gl.ImageCompose.Noise.PolkaDotNoise_v2.js | 2 +- .../Ops.Gl.ImageCompose.Noise.SimplexNoise.js | 2 +- ...s.Gl.ImageCompose.Noise.SimplexNoise_v2.js | 2 +- ...Ops.Gl.ImageCompose.Noise.TriangleNoise.js | 2 +- ....Gl.ImageCompose.Noise.TriangleNoise_v2.js | 2 +- .../Ops.Gl.ImageCompose.Noise.ValueNoise.js | 2 +- ...Ops.Gl.ImageCompose.Noise.ValueNoise_v2.js | 2 +- .../Ops.Gl.ImageCompose.Noise.Voronoise.js | 2 +- .../Ops.Gl.ImageCompose.Noise.Voronoise_v2.js | 2 +- .../Ops.Gl.ImageCompose.Noise.WorleyNoise.js | 2 +- ...ps.Gl.ImageCompose.Noise.WorleyNoise_v2.js | 2 +- .../Ops.Gl.ImageCompose.PatternLookup.js | 2 +- .../Ops.Gl.ImageCompose.PixelColor.js | 2 +- .../Ops.Gl.ImageCompose.PixelDifference.js | 2 +- ...ps.Gl.ImageCompose.PixelDisplacement_v2.js | 2 +- ...ps.Gl.ImageCompose.PixelDisplacement_v3.js | 2 +- ...ps.Gl.ImageCompose.PixelDisplacement_v4.js | 2 +- .../Ops.Gl.ImageCompose.Pixelate.js | 2 +- .../Ops.Gl.ImageCompose.Pixelate_v2.js | 2 +- .../Ops.Gl.ImageCompose.Plasma.js | 2 +- .../Ops.Gl.ImageCompose.Plasma_v2.js | 2 +- .../Ops.Gl.ImageCompose.PolarCoords.js | 2 +- .../Ops.Gl.ImageCompose.Posterize.js | 2 +- .../Ops.Gl.ImageCompose.Posterize_v2.js | 2 +- .../Ops.Gl.ImageCompose.PseudoLensFlares.js | 2 +- .../Ops.Gl.ImageCompose.RemoveAlpha.js | 2 +- .../Ops.Gl.ImageCompose.RepeatTexture.js | 2 +- .../Ops.Gl.ImageCompose.RepeatTexture_v2.js | 2 +- .../Ops.Gl.ImageCompose.RgbMultiply.js | 2 +- .../Ops.Gl.ImageCompose.RgbToHsvTexture.js | 2 +- .../Ops.Gl.ImageCompose.RotateTexture.js | 2 +- .../Ops.Gl.ImageCompose.RotateTexture_v2.js | 2 +- .../Ops.Gl.ImageCompose.RoundCorners.js | 2 +- .../Ops.Gl.ImageCompose.ScaleTexture.js | 2 +- .../Ops.Gl.ImageCompose.ScaleTexture_v2.js | 2 +- .../Ops.Gl.ImageCompose.ScrollTexture.js | 2 +- .../Ops.Gl.ImageCompose.Shapes2d.js | 2 +- .../Ops.Gl.ImageCompose.Shapes2d_v2.js | 2 +- .../Ops.Gl.ImageCompose.Sharpen.js | 2 +- .../Ops.Gl.ImageCompose.TextureDifference.js | 2 +- .../Ops.Gl.ImageCompose.ToNormalMap.js | 2 +- .../Ops.Gl.ImageCompose.ToNormalMap_v2.js | 2 +- .../Ops.Gl.ImageCompose.Twirl_v2.js | 2 +- .../Ops.Gl.ImageCompose.Twirl_v3.js | 2 +- .../Ops.Gl.ImageCompose.Twirl_v4.js | 2 +- .../Ops.Gl.ImageCompose.Vibrance.js | 2 +- .../Ops.Gl.ImageCompose.Vignette.js | 2 +- .../Ops.Gl.ImageCompose.WaveformGradient.js | 2 +- ...Ops.Gl.ImageCompose.WaveformGradient_v2.js | 2 +- ...Ops.Gl.ImageCompose.WaveformGradient_v3.js | 2 +- ...Ops.Gl.ImageCompose.WaveformGradient_v4.js | 2 +- .../Ops.Gl.ImageCompose.Waveform_v2.js | 2 +- .../Ops.Gl.ImageCompose.Waveform_v3.js | 2 +- .../Ops.Gl.ImageCompose.Wobble.js | 2 +- .../Ops.Gl.ImageCompose.Wobble_v2.js | 2 +- ...s.Gl.Matrix.ArrayPathFollowParticles_v2.js | 2 +- .../Ops.Gl.MeshInstancer_v4.js | 13 ++- .../base/Ops.Gl.MeshMorph/Ops.Gl.MeshMorph.js | 13 ++- .../Ops.Gl.Meshes.FloorGrid.js | 2 +- .../Ops.Gl.Meshes.FullscreenRectangle.js | 2 +- .../Ops.Gl.Meshes.FullscreenRectangle_v2.js | 2 +- .../Ops.Gl.Meshes.GeometryToTexture.js | 41 ++++----- .../Ops.Gl.Meshes.GeometryToTexture_v2.js | 45 +++++----- .../Ops.Gl.Meshes.MeshInstancerFromTexture.js | 2 +- ...s.Gl.Meshes.MeshInstancerFromTexture_v2.js | 2 +- ...s.Gl.Meshes.MeshInstancerFromTexture_v3.js | 2 +- .../Ops.Gl.Meshes.PointCloudFromTexture.js | 2 +- .../Ops.Gl.Meshes.QuadWarpTexture.js | 2 +- .../Ops.Gl.Meshes.SplineMeshMaterial_v2.js | 2 +- .../Ops.Gl.Meshes.TextMesh.js | 9 +- .../Ops.Gl.Meshes.TextMesh_v2.js | 11 ++- .../Ops.Gl.Pbr.PbrMaterial.js | 2 +- .../Ops.Gl.Phong.PhongMaterial_v6.js | 2 +- .../Ops.Gl.Shader.AttributeAsColorMaterial.js | 2 +- .../Ops.Gl.Shader.BasicMaterial_v3.js | 2 +- .../Ops.Gl.Shader.CustomShader_v2.js | 2 +- .../Ops.Gl.Shader.GetShader.js | 2 +- .../Ops.Gl.Shader.PointMaterial_v3.js | 2 +- .../Ops.Gl.Shader.PointMaterial_v5.js | 2 +- ...ps.Gl.ShaderEffects.AreaDiscardPixel_v2.js | 2 +- .../Ops.Gl.ShaderEffects.AreaRotate_v2.js | 34 +++---- .../Ops.Gl.ShaderEffects.AreaScaler_v3.js | 2 +- ...Gl.ShaderEffects.AreaTranslateMeshes_v2.js | 2 +- ...Gl.ShaderEffects.AreaTranslateMeshes_v3.js | 2 +- .../Ops.Gl.ShaderEffects.Bend_v2.js | 2 +- ...Gl.ShaderEffects.ClampVertexPosition_v2.js | 2 +- .../Ops.Gl.ShaderEffects.ColorArea_v3.js | 2 +- .../Ops.Gl.ShaderEffects.ColorArea_v4.js | 2 +- .../Ops.Gl.ShaderEffects.ColorArea_v5.js | 2 +- .../Ops.Gl.ShaderEffects.DeformArea.js | 2 +- ...s.Gl.ShaderEffects.DiscardMaterialAlpha.js | 2 +- ....Gl.ShaderEffects.ExplodeDividedMesh_v2.js | 88 +++++++++---------- .../Ops.Gl.ShaderEffects.FogEffect.js | 2 +- ....ShaderEffects.InstancedDisplacementMap.js | 2 +- ...aderEffects.InstancedDisplacementMap_v2.js | 2 +- ...haderEffects.InstancedPerlinPosition_v2.js | 2 +- ....ShaderEffects.InstancedTextureColorize.js | 2 +- .../Ops.Gl.ShaderEffects.MeshPixelNoise_v2.js | 2 +- ...s.Gl.ShaderEffects.ModuloVertexPosition.js | 2 +- ...ps.Gl.ShaderEffects.PerlinAreaDeform_v4.js | 2 +- .../Ops.Gl.ShaderEffects.ScaleByNormal_v2.js | 2 +- .../Ops.Gl.ShaderEffects.SplineDeform_v2.js | 2 +- .../Ops.Gl.ShaderEffects.TextureProjection.js | 2 +- ...s.Gl.ShaderEffects.TextureProjection_v2.js | 2 +- ...aderEffects.TransformTextureCoordinates.js | 2 +- .../Ops.Gl.ShaderEffects.TransformVertex.js | 2 +- .../Ops.Gl.ShaderEffects.Twist_v3.js | 2 +- .../Ops.Gl.ShaderEffects.UseVertexColor.js | 2 +- ...Ops.Gl.ShaderEffects.VertexColorAsAlpha.js | 14 +-- ....ShaderEffects.VertexDisplacementMap_v3.js | 2 +- ....ShaderEffects.VertexDisplacementMap_v4.js | 2 +- ...s.Gl.ShaderEffects.VertexNumberLimit_v2.js | 10 +-- ...derEffects.VertexPositionFromTexture_v2.js | 2 +- .../Ops.Gl.ShaderEffects.VertexWobble.js | 2 +- .../Ops.Gl.ShaderEffects.VertexWobble_v2.js | 22 ++--- .../Ops.Gl.Textures.CopyTexture.js | 2 +- 235 files changed, 378 insertions(+), 379 deletions(-) diff --git a/src/core/cgl/cgl_mesh.js b/src/core/cgl/cgl_mesh.js index bd85b020d1..1a2eb90b32 100644 --- a/src/core/cgl/cgl_mesh.js +++ b/src/core/cgl/cgl_mesh.js @@ -489,8 +489,6 @@ Mesh.prototype._bind = function (shader) { if (!shader.isValid()) return; - - // if (shader != this._lastShader) this.unBind(); let attrLocs = []; if (this._attribLocs[shader.id]) attrLocs = this._attribLocs[shader.id]; else this._attribLocs[shader.id] = attrLocs; @@ -737,7 +735,7 @@ Mesh.prototype.render = function (shader) let queryProfilerData = this._cgl.profileData.glQueryData[id]; - if (!queryProfilerData) queryProfilerData = { "id": id, "num": 0 }; + if (!queryProfilerData) queryProfilerData = { "id": id, "num": 0, "shaderOp": shader.opId }; this._cgl.profileData.glQueryData[id] = queryProfilerData; diff --git a/src/core/cgl/cgl_shader.js b/src/core/cgl/cgl_shader.js index 8a147b549a..3749e224d9 100644 --- a/src/core/cgl/cgl_shader.js +++ b/src/core/cgl/cgl_shader.js @@ -43,7 +43,7 @@ let materialIdCounter = 0; * var shader=new CGL.Shader(cgl,'MinimalMaterial'); * shader.setSource(attachments.shader_vert,attachments.shader_frag); */ -const Shader = function (_cgl, _name) +const Shader = function (_cgl, _name, _op) { if (!_cgl) throw new Error("shader constructed without cgl " + _name); @@ -52,6 +52,8 @@ const Shader = function (_cgl, _name) if (!_name) this._log.stack("no shader name given"); this._name = _name || "unknown"; + + if (_op) this.opId = _op.id; this.glslVersion = 0; if (_cgl.glVersion > 1) this.glslVersion = 300; diff --git a/src/libs/cgl/shadermodifier/cgl_shadermodifier.js b/src/libs/cgl/shadermodifier/cgl_shadermodifier.js index a1c31ba743..c8634c70bb 100644 --- a/src/libs/cgl/shadermodifier/cgl_shadermodifier.js +++ b/src/libs/cgl/shadermodifier/cgl_shadermodifier.js @@ -18,6 +18,7 @@ class ShaderModifier this.needsTexturePush = false; this._lastShader = null; this._attributes = []; + if (options.op) this.opId = options.op; if (this._cgl.glVersion == 1) { diff --git a/src/ops/base/Ops.Deprecated.Admin.TransformInstancedIndexed/Ops.Deprecated.Admin.TransformInstancedIndexed.js b/src/ops/base/Ops.Deprecated.Admin.TransformInstancedIndexed/Ops.Deprecated.Admin.TransformInstancedIndexed.js index 6be41f682e..81ac9033ba 100644 --- a/src/ops/base/Ops.Deprecated.Admin.TransformInstancedIndexed/Ops.Deprecated.Admin.TransformInstancedIndexed.js +++ b/src/ops/base/Ops.Deprecated.Admin.TransformInstancedIndexed/Ops.Deprecated.Admin.TransformInstancedIndexed.js @@ -60,7 +60,7 @@ const moduleFrag = null; inTex.onChange = updateLookupTexture; -const mod = new CGL.ShaderModifier(cgl, op.name); +const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); mod.addModule({ "title": op.name, "name": "MODULE_VERTEX_POSITION", diff --git a/src/ops/base/Ops.Deprecated.Exp.Gl.TextureEffects.RandomClusterScroller/Ops.Deprecated.Exp.Gl.TextureEffects.RandomClusterScroller.js b/src/ops/base/Ops.Deprecated.Exp.Gl.TextureEffects.RandomClusterScroller/Ops.Deprecated.Exp.Gl.TextureEffects.RandomClusterScroller.js index 750e458b90..f01899ceaa 100644 --- a/src/ops/base/Ops.Deprecated.Exp.Gl.TextureEffects.RandomClusterScroller/Ops.Deprecated.Exp.Gl.TextureEffects.RandomClusterScroller.js +++ b/src/ops/base/Ops.Deprecated.Exp.Gl.TextureEffects.RandomClusterScroller/Ops.Deprecated.Exp.Gl.TextureEffects.RandomClusterScroller.js @@ -3,7 +3,7 @@ let render = op.inTrigger("render"); let trigger = op.outTrigger("trigger"); let cgl = op.patch.cgl; -let shader = new CGL.Shader(cgl, op.name); +let shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.scroller_frag); diff --git a/src/ops/base/Ops.Deprecated.Gl.Shader.TextureSinusWobble/Ops.Deprecated.Gl.Shader.TextureSinusWobble.js b/src/ops/base/Ops.Deprecated.Gl.Shader.TextureSinusWobble/Ops.Deprecated.Gl.Shader.TextureSinusWobble.js index 7fc8fec077..4c710b2210 100644 --- a/src/ops/base/Ops.Deprecated.Gl.Shader.TextureSinusWobble/Ops.Deprecated.Gl.Shader.TextureSinusWobble.js +++ b/src/ops/base/Ops.Deprecated.Gl.Shader.TextureSinusWobble/Ops.Deprecated.Gl.Shader.TextureSinusWobble.js @@ -57,7 +57,7 @@ let srcFrag = "" .endl() + "}"; -var shader = new CGL.Shader(cgl, op.name); +var shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), srcFrag); this.a = this.addInPort(new CABLES.Port(this, "a", CABLES.OP_PORT_TYPE_VALUE, { "display": "range" })); diff --git a/src/ops/base/Ops.Deprecated.Gl.Stereoscopic.Interleaved3dMaterial/Ops.Deprecated.Gl.Stereoscopic.Interleaved3dMaterial.js b/src/ops/base/Ops.Deprecated.Gl.Stereoscopic.Interleaved3dMaterial/Ops.Deprecated.Gl.Stereoscopic.Interleaved3dMaterial.js index 9334d78dab..0d5a26eb97 100644 --- a/src/ops/base/Ops.Deprecated.Gl.Stereoscopic.Interleaved3dMaterial/Ops.Deprecated.Gl.Stereoscopic.Interleaved3dMaterial.js +++ b/src/ops/base/Ops.Deprecated.Gl.Stereoscopic.Interleaved3dMaterial/Ops.Deprecated.Gl.Stereoscopic.Interleaved3dMaterial.js @@ -29,7 +29,7 @@ let srcFrag = "" .endl() + "gl_FragColor = col;" .endl() + "}"; -let shader = new CGL.Shader(cgl, op.name); +let shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), srcFrag); diff --git a/src/ops/base/Ops.Deprecated.Gl.Stereoscopic.SideBySideMaterial/Ops.Deprecated.Gl.Stereoscopic.SideBySideMaterial.js b/src/ops/base/Ops.Deprecated.Gl.Stereoscopic.SideBySideMaterial/Ops.Deprecated.Gl.Stereoscopic.SideBySideMaterial.js index bc8666833a..f7a4f729c2 100644 --- a/src/ops/base/Ops.Deprecated.Gl.Stereoscopic.SideBySideMaterial/Ops.Deprecated.Gl.Stereoscopic.SideBySideMaterial.js +++ b/src/ops/base/Ops.Deprecated.Gl.Stereoscopic.SideBySideMaterial/Ops.Deprecated.Gl.Stereoscopic.SideBySideMaterial.js @@ -46,7 +46,7 @@ let srcFrag = "" .endl() + "gl_FragColor = col;" .endl() + "}"; -let shader = new CGL.Shader(cgl, op.name); +let shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), srcFrag); diff --git a/src/ops/base/Ops.Deprecated.Gl.TextureEffects.Blur/Ops.Deprecated.Gl.TextureEffects.Blur.js b/src/ops/base/Ops.Deprecated.Gl.TextureEffects.Blur/Ops.Deprecated.Gl.TextureEffects.Blur.js index ea422ec7c3..a627251655 100644 --- a/src/ops/base/Ops.Deprecated.Gl.TextureEffects.Blur/Ops.Deprecated.Gl.TextureEffects.Blur.js +++ b/src/ops/base/Ops.Deprecated.Gl.TextureEffects.Blur/Ops.Deprecated.Gl.TextureEffects.Blur.js @@ -9,7 +9,7 @@ this.trigger = this.addOutPort(new CABLES.Port(this, "trigger", CABLES.OP_PORT_T this.iterations = this.addInPort(new CABLES.Port(this, "iterations", CABLES.OP_PORT_TYPE_VALUE)); this.iterations.val = 10; -let shader = new CGL.Shader(cgl, op.name); +let shader = new CGL.Shader(cgl, op.name, op); // this.onLoaded=shader.compile; let srcFrag = "" diff --git a/src/ops/base/Ops.Deprecated.Gl.TextureEffects.BlurByDepth/Ops.Deprecated.Gl.TextureEffects.BlurByDepth.js b/src/ops/base/Ops.Deprecated.Gl.TextureEffects.BlurByDepth/Ops.Deprecated.Gl.TextureEffects.BlurByDepth.js index 2532c4eb66..9d1e47172e 100644 --- a/src/ops/base/Ops.Deprecated.Gl.TextureEffects.BlurByDepth/Ops.Deprecated.Gl.TextureEffects.BlurByDepth.js +++ b/src/ops/base/Ops.Deprecated.Gl.TextureEffects.BlurByDepth/Ops.Deprecated.Gl.TextureEffects.BlurByDepth.js @@ -16,7 +16,7 @@ let depthEnd = this.addInPort(new CABLES.Port(this, "depth end", CABLES.OP_PORT_ this.iterations = this.addInPort(new CABLES.Port(this, "iterations", CABLES.OP_PORT_TYPE_VALUE)); this.iterations.val = 10; -let shader = new CGL.Shader(cgl, op.name); +let shader = new CGL.Shader(cgl, op.name, op); let srcFrag = "" .endl() + "precision highp float;" diff --git a/src/ops/base/Ops.Deprecated.Gl.TextureEffects.ChromaticAberration/Ops.Deprecated.Gl.TextureEffects.ChromaticAberration.js b/src/ops/base/Ops.Deprecated.Gl.TextureEffects.ChromaticAberration/Ops.Deprecated.Gl.TextureEffects.ChromaticAberration.js index d1ccfdd627..aa086a9b88 100644 --- a/src/ops/base/Ops.Deprecated.Gl.TextureEffects.ChromaticAberration/Ops.Deprecated.Gl.TextureEffects.ChromaticAberration.js +++ b/src/ops/base/Ops.Deprecated.Gl.TextureEffects.ChromaticAberration/Ops.Deprecated.Gl.TextureEffects.ChromaticAberration.js @@ -6,7 +6,7 @@ let amount = op.addInPort(new CABLES.Port(op, "amount", CABLES.OP_PORT_TYPE_VALU let trigger = op.outTrigger("trigger"); let cgl = op.patch.cgl; -let shader = new CGL.Shader(cgl, op.name); +let shader = new CGL.Shader(cgl, op.name, op); let srcFrag = "" diff --git a/src/ops/base/Ops.Deprecated.Gl.TextureEffects.ColorLookup2/Ops.Deprecated.Gl.TextureEffects.ColorLookup2.js b/src/ops/base/Ops.Deprecated.Gl.TextureEffects.ColorLookup2/Ops.Deprecated.Gl.TextureEffects.ColorLookup2.js index e63217ae6f..6c1955a2ba 100644 --- a/src/ops/base/Ops.Deprecated.Gl.TextureEffects.ColorLookup2/Ops.Deprecated.Gl.TextureEffects.ColorLookup2.js +++ b/src/ops/base/Ops.Deprecated.Gl.TextureEffects.ColorLookup2/Ops.Deprecated.Gl.TextureEffects.ColorLookup2.js @@ -11,7 +11,7 @@ let trigger = op.outTrigger("trigger"); let vert = op.inValueBool("vertical", true); let cgl = op.patch.cgl; -let shader = new CGL.Shader(cgl, op.name); +let shader = new CGL.Shader(cgl, op.name, op); amount.set(1); diff --git a/src/ops/base/Ops.Deprecated.Gl.TextureEffects.ColorMapping/Ops.Deprecated.Gl.TextureEffects.ColorMapping.js b/src/ops/base/Ops.Deprecated.Gl.TextureEffects.ColorMapping/Ops.Deprecated.Gl.TextureEffects.ColorMapping.js index 2ca3a0c9cb..0e37cca53a 100644 --- a/src/ops/base/Ops.Deprecated.Gl.TextureEffects.ColorMapping/Ops.Deprecated.Gl.TextureEffects.ColorMapping.js +++ b/src/ops/base/Ops.Deprecated.Gl.TextureEffects.ColorMapping/Ops.Deprecated.Gl.TextureEffects.ColorMapping.js @@ -9,7 +9,7 @@ let axis = op.inValueSelect("Axis", ["hotizontal", "vertical"], "horizontal"); let pos = op.inValueSlider("Position"); let cgl = op.patch.cgl; -let shader = new CGL.Shader(cgl, op.name); +let shader = new CGL.Shader(cgl, op.name, op); axis.onChange = updateAxis; updateAxis(); diff --git a/src/ops/base/Ops.Deprecated.Gl.TextureEffects.ColorMapping2/Ops.Deprecated.Gl.TextureEffects.ColorMapping2.js b/src/ops/base/Ops.Deprecated.Gl.TextureEffects.ColorMapping2/Ops.Deprecated.Gl.TextureEffects.ColorMapping2.js index 9e467d9c8d..ddd27ddd53 100644 --- a/src/ops/base/Ops.Deprecated.Gl.TextureEffects.ColorMapping2/Ops.Deprecated.Gl.TextureEffects.ColorMapping2.js +++ b/src/ops/base/Ops.Deprecated.Gl.TextureEffects.ColorMapping2/Ops.Deprecated.Gl.TextureEffects.ColorMapping2.js @@ -9,7 +9,7 @@ let axis = op.inValueSelect("Axis", ["hotizontal", "vertical"], "horizontal"); let pos = op.inValueSlider("Position"); let cgl = op.patch.cgl; -let shader = new CGL.Shader(cgl, op.name); +let shader = new CGL.Shader(cgl, op.name, op); axis.onChange = updateAxis; updateAxis(); diff --git a/src/ops/base/Ops.Deprecated.Gl.TextureEffects.ColorOverlay/Ops.Deprecated.Gl.TextureEffects.ColorOverlay.js b/src/ops/base/Ops.Deprecated.Gl.TextureEffects.ColorOverlay/Ops.Deprecated.Gl.TextureEffects.ColorOverlay.js index f2c19fa846..24b9e0bf5e 100644 --- a/src/ops/base/Ops.Deprecated.Gl.TextureEffects.ColorOverlay/Ops.Deprecated.Gl.TextureEffects.ColorOverlay.js +++ b/src/ops/base/Ops.Deprecated.Gl.TextureEffects.ColorOverlay/Ops.Deprecated.Gl.TextureEffects.ColorOverlay.js @@ -12,7 +12,7 @@ this.g = this.addInPort(new CABLES.Port(this, "g", CABLES.OP_PORT_TYPE_VALUE, { this.b = this.addInPort(new CABLES.Port(this, "b", CABLES.OP_PORT_TYPE_VALUE, { "display": "range" })); this.a = this.addInPort(new CABLES.Port(this, "a", CABLES.OP_PORT_TYPE_VALUE, { "display": "range" })); -let shader = new CGL.Shader(cgl, op.name); +let shader = new CGL.Shader(cgl, op.name, op); // this.onLoaded=shader.compile; let srcFrag = "" diff --git a/src/ops/base/Ops.Deprecated.Gl.TextureEffects.ColorOverlay2/Ops.Deprecated.Gl.TextureEffects.ColorOverlay2.js b/src/ops/base/Ops.Deprecated.Gl.TextureEffects.ColorOverlay2/Ops.Deprecated.Gl.TextureEffects.ColorOverlay2.js index ca73fec8fd..bd75d46d17 100644 --- a/src/ops/base/Ops.Deprecated.Gl.TextureEffects.ColorOverlay2/Ops.Deprecated.Gl.TextureEffects.ColorOverlay2.js +++ b/src/ops/base/Ops.Deprecated.Gl.TextureEffects.ColorOverlay2/Ops.Deprecated.Gl.TextureEffects.ColorOverlay2.js @@ -12,7 +12,7 @@ this.g = this.addInPort(new CABLES.Port(this, "g", CABLES.OP_PORT_TYPE_VALUE, { this.b = this.addInPort(new CABLES.Port(this, "b", CABLES.OP_PORT_TYPE_VALUE, { "display": "range" })); this.a = this.addInPort(new CABLES.Port(this, "a", CABLES.OP_PORT_TYPE_VALUE, { "display": "range" })); -let shader = new CGL.Shader(cgl, op.name); +let shader = new CGL.Shader(cgl, op.name, op); // this.onLoaded=shader.compile; let srcFrag = "" diff --git a/src/ops/base/Ops.Deprecated.Gl.TextureEffects.CustomTextureEffectShader/Ops.Deprecated.Gl.TextureEffects.CustomTextureEffectShader.js b/src/ops/base/Ops.Deprecated.Gl.TextureEffects.CustomTextureEffectShader/Ops.Deprecated.Gl.TextureEffects.CustomTextureEffectShader.js index 73548ca732..86493b1900 100644 --- a/src/ops/base/Ops.Deprecated.Gl.TextureEffects.CustomTextureEffectShader/Ops.Deprecated.Gl.TextureEffects.CustomTextureEffectShader.js +++ b/src/ops/base/Ops.Deprecated.Gl.TextureEffects.CustomTextureEffectShader/Ops.Deprecated.Gl.TextureEffects.CustomTextureEffectShader.js @@ -5,7 +5,7 @@ const amount = op.inValueSlider("Amount", 0.25); const trigger = op.outTrigger("trigger"); const cgl = op.patch.cgl; -let shader = new CGL.Shader(cgl, op.name); +let shader = new CGL.Shader(cgl, op.name, op); let textureUniform = null; let amountUniform = null; diff --git a/src/ops/base/Ops.Deprecated.Gl.TextureEffects.DepthOfField/Ops.Deprecated.Gl.TextureEffects.DepthOfField.js b/src/ops/base/Ops.Deprecated.Gl.TextureEffects.DepthOfField/Ops.Deprecated.Gl.TextureEffects.DepthOfField.js index eb715e2aaf..33eb976a83 100644 --- a/src/ops/base/Ops.Deprecated.Gl.TextureEffects.DepthOfField/Ops.Deprecated.Gl.TextureEffects.DepthOfField.js +++ b/src/ops/base/Ops.Deprecated.Gl.TextureEffects.DepthOfField/Ops.Deprecated.Gl.TextureEffects.DepthOfField.js @@ -15,7 +15,7 @@ this.showIntensity = this.addInPort(new CABLES.Port(this, "showIntensity", CABLE this.iterations = this.addInPort(new CABLES.Port(this, "iterations", CABLES.OP_PORT_TYPE_VALUE)); this.iterations.val = 10; -let shader = new CGL.Shader(cgl, op.name); +let shader = new CGL.Shader(cgl, op.name, op); // this.onLoaded=shader.compile; let srcFrag = "" diff --git a/src/ops/base/Ops.Deprecated.Gl.TextureEffects.DepthOfField22/Ops.Deprecated.Gl.TextureEffects.DepthOfField22.js b/src/ops/base/Ops.Deprecated.Gl.TextureEffects.DepthOfField22/Ops.Deprecated.Gl.TextureEffects.DepthOfField22.js index 4ac8160686..26e7dc3b69 100644 --- a/src/ops/base/Ops.Deprecated.Gl.TextureEffects.DepthOfField22/Ops.Deprecated.Gl.TextureEffects.DepthOfField22.js +++ b/src/ops/base/Ops.Deprecated.Gl.TextureEffects.DepthOfField22/Ops.Deprecated.Gl.TextureEffects.DepthOfField22.js @@ -23,7 +23,7 @@ let stepWidth = this.addInPort(new CABLES.Port(this, "step width", CABLES.OP_POR let showDistances = this.addInPort(new CABLES.Port(this, "showDistances", CABLES.OP_PORT_TYPE_VALUE, { "display": "bool" })); showDistances.set(false); -let shader = new CGL.Shader(cgl, op.name); +let shader = new CGL.Shader(cgl, op.name, op); // this.onLoaded=shader.compile; let srcFrag = "" diff --git a/src/ops/base/Ops.Deprecated.Gl.TextureEffects.DepthStripes/Ops.Deprecated.Gl.TextureEffects.DepthStripes.js b/src/ops/base/Ops.Deprecated.Gl.TextureEffects.DepthStripes/Ops.Deprecated.Gl.TextureEffects.DepthStripes.js index b9520cc8d6..79d37bfa3d 100644 --- a/src/ops/base/Ops.Deprecated.Gl.TextureEffects.DepthStripes/Ops.Deprecated.Gl.TextureEffects.DepthStripes.js +++ b/src/ops/base/Ops.Deprecated.Gl.TextureEffects.DepthStripes/Ops.Deprecated.Gl.TextureEffects.DepthStripes.js @@ -12,7 +12,7 @@ nearPlane.set(0.1); let cgl = op.patch.cgl; let trigger = op.outTrigger("trigger"); -let shader = new CGL.Shader(cgl, op.name); +let shader = new CGL.Shader(cgl, op.name, op); let srcFrag = "" diff --git a/src/ops/base/Ops.Deprecated.Gl.TextureEffects.DepthTextureIntersect/Ops.Deprecated.Gl.TextureEffects.DepthTextureIntersect.js b/src/ops/base/Ops.Deprecated.Gl.TextureEffects.DepthTextureIntersect/Ops.Deprecated.Gl.TextureEffects.DepthTextureIntersect.js index 5ac507c5b4..4d10a9710e 100644 --- a/src/ops/base/Ops.Deprecated.Gl.TextureEffects.DepthTextureIntersect/Ops.Deprecated.Gl.TextureEffects.DepthTextureIntersect.js +++ b/src/ops/base/Ops.Deprecated.Gl.TextureEffects.DepthTextureIntersect/Ops.Deprecated.Gl.TextureEffects.DepthTextureIntersect.js @@ -12,7 +12,7 @@ nearPlane.set(0.1); const trigger = op.outTrigger("trigger"); -let shader = new CGL.Shader(cgl, op.name); +let shader = new CGL.Shader(cgl, op.name, op); // this.onLoaded=shader.compile; let srcFrag = "" diff --git a/src/ops/base/Ops.Deprecated.Gl.TextureEffects.EdgeDetectionFreiChen/Ops.Deprecated.Gl.TextureEffects.EdgeDetectionFreiChen.js b/src/ops/base/Ops.Deprecated.Gl.TextureEffects.EdgeDetectionFreiChen/Ops.Deprecated.Gl.TextureEffects.EdgeDetectionFreiChen.js index 2513dcfc4d..5cbfd98f52 100644 --- a/src/ops/base/Ops.Deprecated.Gl.TextureEffects.EdgeDetectionFreiChen/Ops.Deprecated.Gl.TextureEffects.EdgeDetectionFreiChen.js +++ b/src/ops/base/Ops.Deprecated.Gl.TextureEffects.EdgeDetectionFreiChen/Ops.Deprecated.Gl.TextureEffects.EdgeDetectionFreiChen.js @@ -6,7 +6,7 @@ let trigger = op.outTrigger("Trigger"); let amount = op.inValueSlider("amount", 1); let cgl = op.patch.cgl; -let shader = new CGL.Shader(cgl, op.name); +let shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.edgeFreiChen_frag); diff --git a/src/ops/base/Ops.Deprecated.Gl.TextureEffects.LumaKeySoft/Ops.Deprecated.Gl.TextureEffects.LumaKeySoft.js b/src/ops/base/Ops.Deprecated.Gl.TextureEffects.LumaKeySoft/Ops.Deprecated.Gl.TextureEffects.LumaKeySoft.js index 5e6c758ea0..121d0723f4 100644 --- a/src/ops/base/Ops.Deprecated.Gl.TextureEffects.LumaKeySoft/Ops.Deprecated.Gl.TextureEffects.LumaKeySoft.js +++ b/src/ops/base/Ops.Deprecated.Gl.TextureEffects.LumaKeySoft/Ops.Deprecated.Gl.TextureEffects.LumaKeySoft.js @@ -9,7 +9,7 @@ let mul = op.inValue("Amount", 2.0); threshold.set(0.5); -let shader = new CGL.Shader(cgl, op.name); +let shader = new CGL.Shader(cgl, op.name, op); let srcFrag = "" diff --git a/src/ops/base/Ops.Deprecated.Gl.TextureEffects.LumaToAlpha/Ops.Deprecated.Gl.TextureEffects.LumaToAlpha.js b/src/ops/base/Ops.Deprecated.Gl.TextureEffects.LumaToAlpha/Ops.Deprecated.Gl.TextureEffects.LumaToAlpha.js index 95baceae23..2481d432bf 100644 --- a/src/ops/base/Ops.Deprecated.Gl.TextureEffects.LumaToAlpha/Ops.Deprecated.Gl.TextureEffects.LumaToAlpha.js +++ b/src/ops/base/Ops.Deprecated.Gl.TextureEffects.LumaToAlpha/Ops.Deprecated.Gl.TextureEffects.LumaToAlpha.js @@ -4,7 +4,7 @@ let trigger = op.outTrigger("trigger"); let amount = op.inValueSlider("amount", 1); let cgl = op.patch.cgl; -let shader = new CGL.Shader(cgl, op.name); +let shader = new CGL.Shader(cgl, op.name, op); let srcFrag = "" diff --git a/src/ops/base/Ops.Deprecated.Gl.TextureEffects.MixImage/Ops.Deprecated.Gl.TextureEffects.MixImage.js b/src/ops/base/Ops.Deprecated.Gl.TextureEffects.MixImage/Ops.Deprecated.Gl.TextureEffects.MixImage.js index 32299fb8c5..4cb42c5112 100644 --- a/src/ops/base/Ops.Deprecated.Gl.TextureEffects.MixImage/Ops.Deprecated.Gl.TextureEffects.MixImage.js +++ b/src/ops/base/Ops.Deprecated.Gl.TextureEffects.MixImage/Ops.Deprecated.Gl.TextureEffects.MixImage.js @@ -9,7 +9,7 @@ this.amount = this.addInPort(new CABLES.Port(this, "amount", CABLES.OP_PORT_TYPE this.image = this.addInPort(new CABLES.Port(this, "image", CABLES.OP_PORT_TYPE_TEXTURE)); this.trigger = this.addOutPort(new CABLES.Port(this, "trigger", CABLES.OP_PORT_TYPE_FUNCTION)); -let shader = new CGL.Shader(cgl, op.name); +let shader = new CGL.Shader(cgl, op.name, op); // this.onLoaded=shader.compile; let srcFrag = "" diff --git a/src/ops/base/Ops.Deprecated.Gl.TextureEffects.Noise.RectangularNoise/Ops.Deprecated.Gl.TextureEffects.Noise.RectangularNoise.js b/src/ops/base/Ops.Deprecated.Gl.TextureEffects.Noise.RectangularNoise/Ops.Deprecated.Gl.TextureEffects.Noise.RectangularNoise.js index 0a3e5b211c..c7b3d749cc 100644 --- a/src/ops/base/Ops.Deprecated.Gl.TextureEffects.Noise.RectangularNoise/Ops.Deprecated.Gl.TextureEffects.Noise.RectangularNoise.js +++ b/src/ops/base/Ops.Deprecated.Gl.TextureEffects.Noise.RectangularNoise/Ops.Deprecated.Gl.TextureEffects.Noise.RectangularNoise.js @@ -17,7 +17,7 @@ let scale = op.inValue("Scale", 22); let trigger = op.outTrigger("trigger"); let cgl = op.patch.cgl; -let shader = new CGL.Shader(cgl, op.name); +let shader = new CGL.Shader(cgl, op.name, op); let srcFrag = attachments.movingrectnoise_frag.replace("{{BLENDCODE}}", CGL.TextureEffect.getBlendCode()); diff --git a/src/ops/base/Ops.Deprecated.Gl.TextureEffects.Noise/Ops.Deprecated.Gl.TextureEffects.Noise.js b/src/ops/base/Ops.Deprecated.Gl.TextureEffects.Noise/Ops.Deprecated.Gl.TextureEffects.Noise.js index edef1ae7ca..4ca3a85152 100644 --- a/src/ops/base/Ops.Deprecated.Gl.TextureEffects.Noise/Ops.Deprecated.Gl.TextureEffects.Noise.js +++ b/src/ops/base/Ops.Deprecated.Gl.TextureEffects.Noise/Ops.Deprecated.Gl.TextureEffects.Noise.js @@ -6,7 +6,7 @@ let amount = op.addInPort(new CABLES.Port(op, "amount", CABLES.OP_PORT_TYPE_VALU let trigger = op.outTrigger("trigger"); let cgl = op.patch.cgl; -let shader = new CGL.Shader(cgl, op.name); +let shader = new CGL.Shader(cgl, op.name, op); let amountUniform = new CGL.Uniform(shader, "f", "amount", 1.0); diff --git a/src/ops/base/Ops.Deprecated.Gl.TextureEffects.PixelDisplacement/Ops.Deprecated.Gl.TextureEffects.PixelDisplacement.js b/src/ops/base/Ops.Deprecated.Gl.TextureEffects.PixelDisplacement/Ops.Deprecated.Gl.TextureEffects.PixelDisplacement.js index 66df2d0665..e40e813b4a 100644 --- a/src/ops/base/Ops.Deprecated.Gl.TextureEffects.PixelDisplacement/Ops.Deprecated.Gl.TextureEffects.PixelDisplacement.js +++ b/src/ops/base/Ops.Deprecated.Gl.TextureEffects.PixelDisplacement/Ops.Deprecated.Gl.TextureEffects.PixelDisplacement.js @@ -8,7 +8,7 @@ let trigger = op.outTrigger("trigger"); let cgl = op.patch.cgl; -let shader = new CGL.Shader(cgl, op.name); +let shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.pixeldisplace_frag); let textureUniform = new CGL.Uniform(shader, "t", "tex", 0); diff --git a/src/ops/base/Ops.Deprecated.Gl.TextureEffects.PixelDisplacementCenter/Ops.Deprecated.Gl.TextureEffects.PixelDisplacementCenter.js b/src/ops/base/Ops.Deprecated.Gl.TextureEffects.PixelDisplacementCenter/Ops.Deprecated.Gl.TextureEffects.PixelDisplacementCenter.js index ad6e12edff..b04b830d9d 100644 --- a/src/ops/base/Ops.Deprecated.Gl.TextureEffects.PixelDisplacementCenter/Ops.Deprecated.Gl.TextureEffects.PixelDisplacementCenter.js +++ b/src/ops/base/Ops.Deprecated.Gl.TextureEffects.PixelDisplacementCenter/Ops.Deprecated.Gl.TextureEffects.PixelDisplacementCenter.js @@ -10,7 +10,7 @@ let trigger = op.outTrigger("trigger"); let cgl = op.patch.cgl; -let shader = new CGL.Shader(cgl, op.name); +let shader = new CGL.Shader(cgl, op.name, op); let srcFrag = "" diff --git a/src/ops/base/Ops.Deprecated.Gl.TextureEffects.PixelSort/Ops.Deprecated.Gl.TextureEffects.PixelSort.js b/src/ops/base/Ops.Deprecated.Gl.TextureEffects.PixelSort/Ops.Deprecated.Gl.TextureEffects.PixelSort.js index 886ea72db4..40417b75cd 100644 --- a/src/ops/base/Ops.Deprecated.Gl.TextureEffects.PixelSort/Ops.Deprecated.Gl.TextureEffects.PixelSort.js +++ b/src/ops/base/Ops.Deprecated.Gl.TextureEffects.PixelSort/Ops.Deprecated.Gl.TextureEffects.PixelSort.js @@ -5,7 +5,7 @@ let trigger = op.outTrigger("Trigger"); let amount = op.inValueSlider("amount", 0.5); let cgl = op.patch.cgl; -let shader = new CGL.Shader(cgl, op.name); +let shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.pixelsort_frag); diff --git a/src/ops/base/Ops.Deprecated.Gl.TextureEffects.SSAO/Ops.Deprecated.Gl.TextureEffects.SSAO.js b/src/ops/base/Ops.Deprecated.Gl.TextureEffects.SSAO/Ops.Deprecated.Gl.TextureEffects.SSAO.js index 7f34902162..23c58aba9b 100644 --- a/src/ops/base/Ops.Deprecated.Gl.TextureEffects.SSAO/Ops.Deprecated.Gl.TextureEffects.SSAO.js +++ b/src/ops/base/Ops.Deprecated.Gl.TextureEffects.SSAO/Ops.Deprecated.Gl.TextureEffects.SSAO.js @@ -14,7 +14,7 @@ this.dist = this.addInPort(new CABLES.Port(this, "dist", CABLES.OP_PORT_TYPE_VAL this.image = this.addInPort(new CABLES.Port(this, "image", CABLES.OP_PORT_TYPE_TEXTURE)); this.trigger = this.addOutPort(new CABLES.Port(this, "trigger", CABLES.OP_PORT_TYPE_FUNCTION)); -let shader = new CGL.Shader(cgl, op.name); +let shader = new CGL.Shader(cgl, op.name, op); // this.onLoaded=shader.compile; let srcFrag = "" diff --git a/src/ops/base/Ops.Deprecated.Gl.TextureEffects.SSAO_v1/Ops.Deprecated.Gl.TextureEffects.SSAO_v1.js b/src/ops/base/Ops.Deprecated.Gl.TextureEffects.SSAO_v1/Ops.Deprecated.Gl.TextureEffects.SSAO_v1.js index 684834e50c..5c587bea00 100644 --- a/src/ops/base/Ops.Deprecated.Gl.TextureEffects.SSAO_v1/Ops.Deprecated.Gl.TextureEffects.SSAO_v1.js +++ b/src/ops/base/Ops.Deprecated.Gl.TextureEffects.SSAO_v1/Ops.Deprecated.Gl.TextureEffects.SSAO_v1.js @@ -12,7 +12,7 @@ const noiseamount = op.inValueFloat("Noise amount", 0.0008); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.ssao_frag); let textureUniform = new CGL.Uniform(shader, "t", "tex", 0); diff --git a/src/ops/base/Ops.Deprecated.Gl.TextureEffects.SSAO_v2/Ops.Deprecated.Gl.TextureEffects.SSAO_v2.js b/src/ops/base/Ops.Deprecated.Gl.TextureEffects.SSAO_v2/Ops.Deprecated.Gl.TextureEffects.SSAO_v2.js index 33d1cd235e..5fe7e6623c 100644 --- a/src/ops/base/Ops.Deprecated.Gl.TextureEffects.SSAO_v2/Ops.Deprecated.Gl.TextureEffects.SSAO_v2.js +++ b/src/ops/base/Ops.Deprecated.Gl.TextureEffects.SSAO_v2/Ops.Deprecated.Gl.TextureEffects.SSAO_v2.js @@ -16,7 +16,7 @@ const noiseamount = op.inValueFloat("Noise amount", 0.0008); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); op.toWorkPortsNeedToBeLinked(depth, render); op.setPortGroup("Noise", [noise, noiseamount]); diff --git a/src/ops/base/Ops.Deprecated.Gl.TextureEffects.SineCurve/Ops.Deprecated.Gl.TextureEffects.SineCurve.js b/src/ops/base/Ops.Deprecated.Gl.TextureEffects.SineCurve/Ops.Deprecated.Gl.TextureEffects.SineCurve.js index 6963c2e4fa..91c00d49fb 100644 --- a/src/ops/base/Ops.Deprecated.Gl.TextureEffects.SineCurve/Ops.Deprecated.Gl.TextureEffects.SineCurve.js +++ b/src/ops/base/Ops.Deprecated.Gl.TextureEffects.SineCurve/Ops.Deprecated.Gl.TextureEffects.SineCurve.js @@ -15,7 +15,7 @@ let flip = op.inValueBool("Flip", false); let trigger = op.outTrigger("trigger"); let cgl = op.patch.cgl; -let shader = new CGL.Shader(cgl, op.name); +let shader = new CGL.Shader(cgl, op.name, op); let tsize = [128, 128]; let srcFrag = attachments.sinecurve_frag; diff --git a/src/ops/base/Ops.Deprecated.Gl.TextureEffects.SubstractColor/Ops.Deprecated.Gl.TextureEffects.SubstractColor.js b/src/ops/base/Ops.Deprecated.Gl.TextureEffects.SubstractColor/Ops.Deprecated.Gl.TextureEffects.SubstractColor.js index b1df383b3e..de3c624627 100644 --- a/src/ops/base/Ops.Deprecated.Gl.TextureEffects.SubstractColor/Ops.Deprecated.Gl.TextureEffects.SubstractColor.js +++ b/src/ops/base/Ops.Deprecated.Gl.TextureEffects.SubstractColor/Ops.Deprecated.Gl.TextureEffects.SubstractColor.js @@ -6,7 +6,7 @@ let trigger = op.outTrigger("trigger"); let amount = op.inValueSlider("amount", 0.1); let cgl = op.patch.cgl; -let shader = new CGL.Shader(cgl, op.name); +let shader = new CGL.Shader(cgl, op.name, op); let srcFrag = "" diff --git a/src/ops/base/Ops.Deprecated.Gl.TextureEffects.ToneMap/Ops.Deprecated.Gl.TextureEffects.ToneMap.js b/src/ops/base/Ops.Deprecated.Gl.TextureEffects.ToneMap/Ops.Deprecated.Gl.TextureEffects.ToneMap.js index 18d8d0996d..23d473833e 100644 --- a/src/ops/base/Ops.Deprecated.Gl.TextureEffects.ToneMap/Ops.Deprecated.Gl.TextureEffects.ToneMap.js +++ b/src/ops/base/Ops.Deprecated.Gl.TextureEffects.ToneMap/Ops.Deprecated.Gl.TextureEffects.ToneMap.js @@ -6,7 +6,7 @@ let method = op.inValueSelect("Method", ["Linear", "Reinhard", "Hejl Dawson", "U let exposure = op.inValue("Exposure", 3); let cgl = op.patch.cgl; -let shader = new CGL.Shader(cgl, op.name); +let shader = new CGL.Shader(cgl, op.name, op); method.onChange = function () diff --git a/src/ops/base/Ops.Deprecated.Gl.TextureEffects.Twirl/Ops.Deprecated.Gl.TextureEffects.Twirl.js b/src/ops/base/Ops.Deprecated.Gl.TextureEffects.Twirl/Ops.Deprecated.Gl.TextureEffects.Twirl.js index 7c38e98a8a..8a705aa812 100644 --- a/src/ops/base/Ops.Deprecated.Gl.TextureEffects.Twirl/Ops.Deprecated.Gl.TextureEffects.Twirl.js +++ b/src/ops/base/Ops.Deprecated.Gl.TextureEffects.Twirl/Ops.Deprecated.Gl.TextureEffects.Twirl.js @@ -8,7 +8,7 @@ let times = op.inValue("times", 1); let trigger = op.outTrigger("trigger"); let cgl = op.patch.cgl; -let shader = new CGL.Shader(cgl, op.name); +let shader = new CGL.Shader(cgl, op.name, op); let srcFrag = "" diff --git a/src/ops/base/Ops.Deprecated.Gl.TextureEffects.VignetteOld/Ops.Deprecated.Gl.TextureEffects.VignetteOld.js b/src/ops/base/Ops.Deprecated.Gl.TextureEffects.VignetteOld/Ops.Deprecated.Gl.TextureEffects.VignetteOld.js index dd97bb05c9..7d9ba971ab 100644 --- a/src/ops/base/Ops.Deprecated.Gl.TextureEffects.VignetteOld/Ops.Deprecated.Gl.TextureEffects.VignetteOld.js +++ b/src/ops/base/Ops.Deprecated.Gl.TextureEffects.VignetteOld/Ops.Deprecated.Gl.TextureEffects.VignetteOld.js @@ -9,7 +9,7 @@ let lensRadius2 = op.inValue("lensRadius2", 0.4); let ratio = op.inValue("Ratio", 1); let cgl = op.patch.cgl; -let shader = new CGL.Shader(cgl, op.name); +let shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.vignette_frag); diff --git a/src/ops/base/Ops.Dev.Debug.GlTextureStack/Ops.Dev.Debug.GlTextureStack.js b/src/ops/base/Ops.Dev.Debug.GlTextureStack/Ops.Dev.Debug.GlTextureStack.js index a553c11a5e..79006a8e58 100644 --- a/src/ops/base/Ops.Dev.Debug.GlTextureStack/Ops.Dev.Debug.GlTextureStack.js +++ b/src/ops/base/Ops.Dev.Debug.GlTextureStack/Ops.Dev.Debug.GlTextureStack.js @@ -4,7 +4,7 @@ let m = null; const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); const num = cgl.maxTextureUnits; diff --git a/src/ops/base/Ops.Dev.Gl.ImageCompose.ToneMap/Ops.Dev.Gl.ImageCompose.ToneMap.js b/src/ops/base/Ops.Dev.Gl.ImageCompose.ToneMap/Ops.Dev.Gl.ImageCompose.ToneMap.js index 0e4f942188..413f55c15c 100644 --- a/src/ops/base/Ops.Dev.Gl.ImageCompose.ToneMap/Ops.Dev.Gl.ImageCompose.ToneMap.js +++ b/src/ops/base/Ops.Dev.Gl.ImageCompose.ToneMap/Ops.Dev.Gl.ImageCompose.ToneMap.js @@ -12,7 +12,7 @@ const outSelected = op.outString("Selected Mapping"); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.map_frag); const textureUniform = new CGL.Uniform(shader, "t", "tex", 0); diff --git a/src/ops/base/Ops.Dev.Gl.TextureEffects.ChromaKeyAlpha/Ops.Dev.Gl.TextureEffects.ChromaKeyAlpha.js b/src/ops/base/Ops.Dev.Gl.TextureEffects.ChromaKeyAlpha/Ops.Dev.Gl.TextureEffects.ChromaKeyAlpha.js index cbb21df32f..d73c8401df 100644 --- a/src/ops/base/Ops.Dev.Gl.TextureEffects.ChromaKeyAlpha/Ops.Dev.Gl.TextureEffects.ChromaKeyAlpha.js +++ b/src/ops/base/Ops.Dev.Gl.TextureEffects.ChromaKeyAlpha/Ops.Dev.Gl.TextureEffects.ChromaKeyAlpha.js @@ -11,7 +11,7 @@ inR.setUiAttribs({ "colorPick": true }); const cgl = op.patch.cgl, - shader = new CGL.Shader(cgl, op.name); + shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.chromakey_frag); diff --git a/src/ops/base/Ops.Dev.GlArrayCurlNoise/Ops.Dev.GlArrayCurlNoise.js b/src/ops/base/Ops.Dev.GlArrayCurlNoise/Ops.Dev.GlArrayCurlNoise.js index 49551fe18f..2a7424730a 100644 --- a/src/ops/base/Ops.Dev.GlArrayCurlNoise/Ops.Dev.GlArrayCurlNoise.js +++ b/src/ops/base/Ops.Dev.GlArrayCurlNoise/Ops.Dev.GlArrayCurlNoise.js @@ -19,7 +19,7 @@ let lastTime = time.get(); render.onTriggered = dorender; const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); const texMath = new CGL.ShaderTextureMath(cgl, op.objName, { "texturePort": inTex }); shader.setSource(shader.getDefaultVertexShader(), attachments.curlnoise_frag); diff --git a/src/ops/base/Ops.Dev.GlArrayMath/Ops.Dev.GlArrayMath.js b/src/ops/base/Ops.Dev.GlArrayMath/Ops.Dev.GlArrayMath.js index 37aa2aa9b3..e1dd34c272 100644 --- a/src/ops/base/Ops.Dev.GlArrayMath/Ops.Dev.GlArrayMath.js +++ b/src/ops/base/Ops.Dev.GlArrayMath/Ops.Dev.GlArrayMath.js @@ -17,7 +17,7 @@ const render.onTriggered = dorender; const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); const texMath = new CGL.ShaderTextureMath(cgl, op.objName, { "texturePort": inTex }); shader.setSource(shader.getDefaultVertexShader(), attachments.rgbMath_frag); diff --git a/src/ops/base/Ops.Dev.GlArrayModulo/Ops.Dev.GlArrayModulo.js b/src/ops/base/Ops.Dev.GlArrayModulo/Ops.Dev.GlArrayModulo.js index 99c9e284f1..80d594e396 100644 --- a/src/ops/base/Ops.Dev.GlArrayModulo/Ops.Dev.GlArrayModulo.js +++ b/src/ops/base/Ops.Dev.GlArrayModulo/Ops.Dev.GlArrayModulo.js @@ -2,13 +2,13 @@ const render = op.inTrigger("Render"), inTex = op.inTexture("GlArray"), - inDoModX = op.inBool("X",true), + inDoModX = op.inBool("X", true), inModX = op.inValue("Modulo X", 1), - inDoModY = op.inBool("Y",true), + inDoModY = op.inBool("Y", true), inModY = op.inValue("Modulo Y", 1), - inDoModZ = op.inBool("Z",true), + inDoModZ = op.inBool("Z", true), inModZ = op.inValue("Modulo Z", 1), trigger = op.outTrigger("trigger"), @@ -17,7 +17,7 @@ const render.onTriggered = dorender; const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); const texMath = new CGL.ShaderTextureMath(cgl, op.objName, { "texturePort": inTex }); shader.setSource(shader.getDefaultVertexShader(), attachments.rgbMath_frag); diff --git a/src/ops/base/Ops.Dev.GlArrayNormalize/Ops.Dev.GlArrayNormalize.js b/src/ops/base/Ops.Dev.GlArrayNormalize/Ops.Dev.GlArrayNormalize.js index cb73a95234..5820812f74 100644 --- a/src/ops/base/Ops.Dev.GlArrayNormalize/Ops.Dev.GlArrayNormalize.js +++ b/src/ops/base/Ops.Dev.GlArrayNormalize/Ops.Dev.GlArrayNormalize.js @@ -9,7 +9,7 @@ const render.onTriggered = dorender; const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); const texMath = new CGL.ShaderTextureMath(cgl, op.objName, { "texturePort": inTex }); shader.setSource(shader.getDefaultVertexShader(), attachments.rgbMath_frag); diff --git a/src/ops/base/Ops.Dev.GlArrayRandom/Ops.Dev.GlArrayRandom.js b/src/ops/base/Ops.Dev.GlArrayRandom/Ops.Dev.GlArrayRandom.js index 9df11ca6ff..c47114074f 100644 --- a/src/ops/base/Ops.Dev.GlArrayRandom/Ops.Dev.GlArrayRandom.js +++ b/src/ops/base/Ops.Dev.GlArrayRandom/Ops.Dev.GlArrayRandom.js @@ -20,7 +20,7 @@ const render.onTriggered = dorender; const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); let texMath = null;// = new CGL.ShaderTextureMath(cgl, op.objName, { "width":100,"height":100 }); updateSize(); diff --git a/src/ops/base/Ops.Dev.InstancedModulo/Ops.Dev.InstancedModulo.js b/src/ops/base/Ops.Dev.InstancedModulo/Ops.Dev.InstancedModulo.js index dcf41d8692..82793948f0 100644 --- a/src/ops/base/Ops.Dev.InstancedModulo/Ops.Dev.InstancedModulo.js +++ b/src/ops/base/Ops.Dev.InstancedModulo/Ops.Dev.InstancedModulo.js @@ -10,7 +10,7 @@ inTrigger.onTriggered = render; const cgl = op.patch.cgl; -const mod = new CGL.ShaderModifier(cgl, op.name); +const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); mod.addModule({ "title": op.name, "name": "MODULE_VERTEX_POSITION", diff --git a/src/ops/base/Ops.Dev.LinesArrayFromTexture/Ops.Dev.LinesArrayFromTexture.js b/src/ops/base/Ops.Dev.LinesArrayFromTexture/Ops.Dev.LinesArrayFromTexture.js index 650a40c1f0..544f2907c5 100644 --- a/src/ops/base/Ops.Dev.LinesArrayFromTexture/Ops.Dev.LinesArrayFromTexture.js +++ b/src/ops/base/Ops.Dev.LinesArrayFromTexture/Ops.Dev.LinesArrayFromTexture.js @@ -12,7 +12,7 @@ const cgl = op.patch.cgl; let mesh = null; let numVerts = 0; -const mod = new CGL.ShaderModifier(cgl, op.name); +const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); mod.addModule({ "priority": 0, "title": op.name, diff --git a/src/ops/base/Ops.Dev.VertexTexture.RgbCurlNoise/Ops.Dev.VertexTexture.RgbCurlNoise.js b/src/ops/base/Ops.Dev.VertexTexture.RgbCurlNoise/Ops.Dev.VertexTexture.RgbCurlNoise.js index 14d30195cc..dcecac52c9 100644 --- a/src/ops/base/Ops.Dev.VertexTexture.RgbCurlNoise/Ops.Dev.VertexTexture.RgbCurlNoise.js +++ b/src/ops/base/Ops.Dev.VertexTexture.RgbCurlNoise/Ops.Dev.VertexTexture.RgbCurlNoise.js @@ -9,7 +9,7 @@ const trigger = op.outTrigger("trigger"); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.curl_frag); const diff --git a/src/ops/base/Ops.Gl.GLTF.GltfMorphTargets/Ops.Gl.GLTF.GltfMorphTargets.js b/src/ops/base/Ops.Gl.GLTF.GltfMorphTargets/Ops.Gl.GLTF.GltfMorphTargets.js index b13578ff3b..be151e8a9c 100644 --- a/src/ops/base/Ops.Gl.GLTF.GltfMorphTargets/Ops.Gl.GLTF.GltfMorphTargets.js +++ b/src/ops/base/Ops.Gl.GLTF.GltfMorphTargets/Ops.Gl.GLTF.GltfMorphTargets.js @@ -13,7 +13,7 @@ const exec.onTriggered = update; const cgl = op.patch.cgl; -const mod = new CGL.ShaderModifier(cgl, op.name); +const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); let arr = []; let node = null; const tr = vec3.create(); diff --git a/src/ops/base/Ops.Gl.GLTF.GltfSkin/Ops.Gl.GLTF.GltfSkin.js b/src/ops/base/Ops.Gl.GLTF.GltfSkin/Ops.Gl.GLTF.GltfSkin.js index 115c309034..3fd0e2a377 100644 --- a/src/ops/base/Ops.Gl.GLTF.GltfSkin/Ops.Gl.GLTF.GltfSkin.js +++ b/src/ops/base/Ops.Gl.GLTF.GltfSkin/Ops.Gl.GLTF.GltfSkin.js @@ -10,7 +10,7 @@ const exec.onTriggered = update; const cgl = op.patch.cgl; -const mod = new CGL.ShaderModifier(cgl, op.name); +const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); let arr = []; let node = null; const tr = vec3.create(); diff --git a/src/ops/base/Ops.Gl.ImageCompose.AlphaMask/Ops.Gl.ImageCompose.AlphaMask.js b/src/ops/base/Ops.Gl.ImageCompose.AlphaMask/Ops.Gl.ImageCompose.AlphaMask.js index 130a4b8eb4..c6049f73e2 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.AlphaMask/Ops.Gl.ImageCompose.AlphaMask.js +++ b/src/ops/base/Ops.Gl.ImageCompose.AlphaMask/Ops.Gl.ImageCompose.AlphaMask.js @@ -4,7 +4,7 @@ const image = op.inTexture("image"); const next = op.outTrigger("trigger"); const cgl = this.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.alphamask_frag); const textureUniform = new CGL.Uniform(shader, "t", "tex", 0); diff --git a/src/ops/base/Ops.Gl.ImageCompose.AlphaMask_v2/Ops.Gl.ImageCompose.AlphaMask_v2.js b/src/ops/base/Ops.Gl.ImageCompose.AlphaMask_v2/Ops.Gl.ImageCompose.AlphaMask_v2.js index b5f604ead0..96be385800 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.AlphaMask_v2/Ops.Gl.ImageCompose.AlphaMask_v2.js +++ b/src/ops/base/Ops.Gl.ImageCompose.AlphaMask_v2/Ops.Gl.ImageCompose.AlphaMask_v2.js @@ -7,7 +7,7 @@ const next = op.outTrigger("trigger"); const cgl = this.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.alphamask_frag); const textureUniform = new CGL.Uniform(shader, "t", "tex", 0); diff --git a/src/ops/base/Ops.Gl.ImageCompose.BarrelDistortion/Ops.Gl.ImageCompose.BarrelDistortion.js b/src/ops/base/Ops.Gl.ImageCompose.BarrelDistortion/Ops.Gl.ImageCompose.BarrelDistortion.js index ca51652ba1..18a2433234 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.BarrelDistortion/Ops.Gl.ImageCompose.BarrelDistortion.js +++ b/src/ops/base/Ops.Gl.ImageCompose.BarrelDistortion/Ops.Gl.ImageCompose.BarrelDistortion.js @@ -4,7 +4,7 @@ let amount = op.inValue("amount"); let trigger = op.outTrigger("trigger"); let cgl = op.patch.cgl; -let shader = new CGL.Shader(cgl, op.name); +let shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.barreldistort_frag); let textureUniform = new CGL.Uniform(shader, "t", "tex", 0); diff --git a/src/ops/base/Ops.Gl.ImageCompose.BarrelDistortion_v2/Ops.Gl.ImageCompose.BarrelDistortion_v2.js b/src/ops/base/Ops.Gl.ImageCompose.BarrelDistortion_v2/Ops.Gl.ImageCompose.BarrelDistortion_v2.js index 91dc0b042e..39ef80ede8 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.BarrelDistortion_v2/Ops.Gl.ImageCompose.BarrelDistortion_v2.js +++ b/src/ops/base/Ops.Gl.ImageCompose.BarrelDistortion_v2/Ops.Gl.ImageCompose.BarrelDistortion_v2.js @@ -6,7 +6,7 @@ const trigger = op.outTrigger("Trigger"); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.barreldistort_frag); diff --git a/src/ops/base/Ops.Gl.ImageCompose.BarrelDistortion_v3/Ops.Gl.ImageCompose.BarrelDistortion_v3.js b/src/ops/base/Ops.Gl.ImageCompose.BarrelDistortion_v3/Ops.Gl.ImageCompose.BarrelDistortion_v3.js index e06228c384..606abe89e7 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.BarrelDistortion_v3/Ops.Gl.ImageCompose.BarrelDistortion_v3.js +++ b/src/ops/base/Ops.Gl.ImageCompose.BarrelDistortion_v3/Ops.Gl.ImageCompose.BarrelDistortion_v3.js @@ -6,7 +6,7 @@ const trigger = op.outTrigger("Trigger"); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.barreldistort_frag); diff --git a/src/ops/base/Ops.Gl.ImageCompose.ClampTexture/Ops.Gl.ImageCompose.ClampTexture.js b/src/ops/base/Ops.Gl.ImageCompose.ClampTexture/Ops.Gl.ImageCompose.ClampTexture.js index c387e6b2f8..4da8585504 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.ClampTexture/Ops.Gl.ImageCompose.ClampTexture.js +++ b/src/ops/base/Ops.Gl.ImageCompose.ClampTexture/Ops.Gl.ImageCompose.ClampTexture.js @@ -8,7 +8,7 @@ const trigger = op.outTrigger("trigger"); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.clampShader_frag); diff --git a/src/ops/base/Ops.Gl.ImageCompose.Clarity/Ops.Gl.ImageCompose.Clarity.js b/src/ops/base/Ops.Gl.ImageCompose.Clarity/Ops.Gl.ImageCompose.Clarity.js index f5e0ac30fa..fea0e6fdce 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.Clarity/Ops.Gl.ImageCompose.Clarity.js +++ b/src/ops/base/Ops.Gl.ImageCompose.Clarity/Ops.Gl.ImageCompose.Clarity.js @@ -3,7 +3,7 @@ const trigger = op.outTrigger("Trigger"); const amount = op.inFloat("amount", 0.5); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.clarity_frag); const textureUniform = new CGL.Uniform(shader, "t", "tex", 0); diff --git a/src/ops/base/Ops.Gl.ImageCompose.ColorBalance/Ops.Gl.ImageCompose.ColorBalance.js b/src/ops/base/Ops.Gl.ImageCompose.ColorBalance/Ops.Gl.ImageCompose.ColorBalance.js index b97e4d204a..d1be962536 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.ColorBalance/Ops.Gl.ImageCompose.ColorBalance.js +++ b/src/ops/base/Ops.Gl.ImageCompose.ColorBalance/Ops.Gl.ImageCompose.ColorBalance.js @@ -6,7 +6,7 @@ const g = op.inValue("g"); const b = op.inValue("b"); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.colorbalance_frag); const textureUniform = new CGL.Uniform(shader, "t", "tex", 0); diff --git a/src/ops/base/Ops.Gl.ImageCompose.ColorBalance_v2/Ops.Gl.ImageCompose.ColorBalance_v2.js b/src/ops/base/Ops.Gl.ImageCompose.ColorBalance_v2/Ops.Gl.ImageCompose.ColorBalance_v2.js index 155f0f277f..04b5e6d6a6 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.ColorBalance_v2/Ops.Gl.ImageCompose.ColorBalance_v2.js +++ b/src/ops/base/Ops.Gl.ImageCompose.ColorBalance_v2/Ops.Gl.ImageCompose.ColorBalance_v2.js @@ -7,7 +7,7 @@ const b = op.inValue("b"); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.colorbalance_frag); const diff --git a/src/ops/base/Ops.Gl.ImageCompose.ColorChannel/Ops.Gl.ImageCompose.ColorChannel.js b/src/ops/base/Ops.Gl.ImageCompose.ColorChannel/Ops.Gl.ImageCompose.ColorChannel.js index ce883af388..88823b4bab 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.ColorChannel/Ops.Gl.ImageCompose.ColorChannel.js +++ b/src/ops/base/Ops.Gl.ImageCompose.ColorChannel/Ops.Gl.ImageCompose.ColorChannel.js @@ -2,7 +2,7 @@ const render = op.inTrigger("render"); const trigger = op.outTrigger("trigger"); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.colorchannel_frag || ""); let textureUniform = new CGL.Uniform(shader, "t", "tex", 0); diff --git a/src/ops/base/Ops.Gl.ImageCompose.ColorChannel_v2/Ops.Gl.ImageCompose.ColorChannel_v2.js b/src/ops/base/Ops.Gl.ImageCompose.ColorChannel_v2/Ops.Gl.ImageCompose.ColorChannel_v2.js index d823bb8acc..843ead8e9e 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.ColorChannel_v2/Ops.Gl.ImageCompose.ColorChannel_v2.js +++ b/src/ops/base/Ops.Gl.ImageCompose.ColorChannel_v2/Ops.Gl.ImageCompose.ColorChannel_v2.js @@ -8,7 +8,7 @@ const trigger = op.outTrigger("trigger"); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.colorchannel_frag || ""); let textureUniform = new CGL.Uniform(shader, "t", "tex", 0); diff --git a/src/ops/base/Ops.Gl.ImageCompose.ColorMap/Ops.Gl.ImageCompose.ColorMap.js b/src/ops/base/Ops.Gl.ImageCompose.ColorMap/Ops.Gl.ImageCompose.ColorMap.js index 48dd30a70f..f6339b7680 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.ColorMap/Ops.Gl.ImageCompose.ColorMap.js +++ b/src/ops/base/Ops.Gl.ImageCompose.ColorMap/Ops.Gl.ImageCompose.ColorMap.js @@ -15,7 +15,7 @@ let inPos = op.inValueSlider("Position", 0.5); op.setPortGroup("Vertical Position", [inMin, inMax, inPos]); let cgl = op.patch.cgl; -let shader = new CGL.Shader(cgl, op.name); +let shader = new CGL.Shader(cgl, op.name, op); shader.define("METH_LUMI"); shader.setSource(shader.getDefaultVertexShader(), attachments.colormap_frag); diff --git a/src/ops/base/Ops.Gl.ImageCompose.ColorMap_v2/Ops.Gl.ImageCompose.ColorMap_v2.js b/src/ops/base/Ops.Gl.ImageCompose.ColorMap_v2/Ops.Gl.ImageCompose.ColorMap_v2.js index 4ea05eefa5..7dcbb82743 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.ColorMap_v2/Ops.Gl.ImageCompose.ColorMap_v2.js +++ b/src/ops/base/Ops.Gl.ImageCompose.ColorMap_v2/Ops.Gl.ImageCompose.ColorMap_v2.js @@ -15,7 +15,7 @@ let inPos = op.inValueSlider("Position", 0.5); op.setPortGroup("Vertical Position", [inMin, inMax, inPos]); let cgl = op.patch.cgl; -let shader = new CGL.Shader(cgl, op.name); +let shader = new CGL.Shader(cgl, op.name, op); shader.define("METH_LUMI"); shader.setSource(shader.getDefaultVertexShader(), attachments.colormap_frag); diff --git a/src/ops/base/Ops.Gl.ImageCompose.Denoise/Ops.Gl.ImageCompose.Denoise.js b/src/ops/base/Ops.Gl.ImageCompose.Denoise/Ops.Gl.ImageCompose.Denoise.js index 665f8d044a..766f607fd9 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.Denoise/Ops.Gl.ImageCompose.Denoise.js +++ b/src/ops/base/Ops.Gl.ImageCompose.Denoise/Ops.Gl.ImageCompose.Denoise.js @@ -4,7 +4,7 @@ let strength = op.inValueSlider("Exponent", 0.6); let trigger = op.outTrigger("trigger"); let cgl = op.patch.cgl; -let shader = new CGL.Shader(cgl, op.name); +let shader = new CGL.Shader(cgl, op.name, op); let tsize = [128, 128]; let srcFrag = attachments.denoise_frag; diff --git a/src/ops/base/Ops.Gl.ImageCompose.DepthTexture/Ops.Gl.ImageCompose.DepthTexture.js b/src/ops/base/Ops.Gl.ImageCompose.DepthTexture/Ops.Gl.ImageCompose.DepthTexture.js index ce7e6d4062..3afdc29603 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.DepthTexture/Ops.Gl.ImageCompose.DepthTexture.js +++ b/src/ops/base/Ops.Gl.ImageCompose.DepthTexture/Ops.Gl.ImageCompose.DepthTexture.js @@ -11,7 +11,7 @@ const op.setPortGroup("Frustum", [farPlane, nearPlane]); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.depthtexture_frag); diff --git a/src/ops/base/Ops.Gl.ImageCompose.DepthTextureFocus/Ops.Gl.ImageCompose.DepthTextureFocus.js b/src/ops/base/Ops.Gl.ImageCompose.DepthTextureFocus/Ops.Gl.ImageCompose.DepthTextureFocus.js index 971960c55c..baf5a533f2 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.DepthTextureFocus/Ops.Gl.ImageCompose.DepthTextureFocus.js +++ b/src/ops/base/Ops.Gl.ImageCompose.DepthTextureFocus/Ops.Gl.ImageCompose.DepthTextureFocus.js @@ -9,7 +9,7 @@ const trigger = op.outTrigger("trigger"); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); const srcFrag = attachments.depth_focus_frag || ""; shader.setSource(shader.getDefaultVertexShader(), srcFrag); diff --git a/src/ops/base/Ops.Gl.ImageCompose.DepthTextureFocus_v2/Ops.Gl.ImageCompose.DepthTextureFocus_v2.js b/src/ops/base/Ops.Gl.ImageCompose.DepthTextureFocus_v2/Ops.Gl.ImageCompose.DepthTextureFocus_v2.js index 7364135936..ba21092c01 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.DepthTextureFocus_v2/Ops.Gl.ImageCompose.DepthTextureFocus_v2.js +++ b/src/ops/base/Ops.Gl.ImageCompose.DepthTextureFocus_v2/Ops.Gl.ImageCompose.DepthTextureFocus_v2.js @@ -14,7 +14,7 @@ op.setPortGroup("Focus Settings", [inInv, inFocus, inWidth]); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); const srcFrag = attachments.depth_focus_frag || ""; shader.setSource(shader.getDefaultVertexShader(), srcFrag); diff --git a/src/ops/base/Ops.Gl.ImageCompose.DepthTexture_v2/Ops.Gl.ImageCompose.DepthTexture_v2.js b/src/ops/base/Ops.Gl.ImageCompose.DepthTexture_v2/Ops.Gl.ImageCompose.DepthTexture_v2.js index 3baaba4f2a..59ebd78f0a 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.DepthTexture_v2/Ops.Gl.ImageCompose.DepthTexture_v2.js +++ b/src/ops/base/Ops.Gl.ImageCompose.DepthTexture_v2/Ops.Gl.ImageCompose.DepthTexture_v2.js @@ -11,7 +11,7 @@ const op.setPortGroup("Frustum", [farPlane, nearPlane]); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.depthtexture_frag); diff --git a/src/ops/base/Ops.Gl.ImageCompose.Desaturate/Ops.Gl.ImageCompose.Desaturate.js b/src/ops/base/Ops.Gl.ImageCompose.Desaturate/Ops.Gl.ImageCompose.Desaturate.js index fa3f903e56..0ac533c9b3 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.Desaturate/Ops.Gl.ImageCompose.Desaturate.js +++ b/src/ops/base/Ops.Gl.ImageCompose.Desaturate/Ops.Gl.ImageCompose.Desaturate.js @@ -5,7 +5,7 @@ const inMask = op.inTexture("Mask"); const invertMask = op.inValueBool("Invert Mask"); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.desaturate_frag); let textureUniform = new CGL.Uniform(shader, "t", "tex", 0); diff --git a/src/ops/base/Ops.Gl.ImageCompose.Dither/Ops.Gl.ImageCompose.Dither.js b/src/ops/base/Ops.Gl.ImageCompose.Dither/Ops.Gl.ImageCompose.Dither.js index 93d3df90fd..698741e503 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.Dither/Ops.Gl.ImageCompose.Dither.js +++ b/src/ops/base/Ops.Gl.ImageCompose.Dither/Ops.Gl.ImageCompose.Dither.js @@ -8,7 +8,7 @@ const const cgl = op.patch.cgl, - shader = new CGL.Shader(cgl, op.name); + shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.dither_frag); diff --git a/src/ops/base/Ops.Gl.ImageCompose.Dither_v2/Ops.Gl.ImageCompose.Dither_v2.js b/src/ops/base/Ops.Gl.ImageCompose.Dither_v2/Ops.Gl.ImageCompose.Dither_v2.js index 84ce71108b..bf91b2f13b 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.Dither_v2/Ops.Gl.ImageCompose.Dither_v2.js +++ b/src/ops/base/Ops.Gl.ImageCompose.Dither_v2/Ops.Gl.ImageCompose.Dither_v2.js @@ -8,7 +8,7 @@ const const cgl = op.patch.cgl, - shader = new CGL.Shader(cgl, op.name); + shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.dither_frag); diff --git a/src/ops/base/Ops.Gl.ImageCompose.EdgeDetection/Ops.Gl.ImageCompose.EdgeDetection.js b/src/ops/base/Ops.Gl.ImageCompose.EdgeDetection/Ops.Gl.ImageCompose.EdgeDetection.js index e30a6278d9..cdeb489971 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.EdgeDetection/Ops.Gl.ImageCompose.EdgeDetection.js +++ b/src/ops/base/Ops.Gl.ImageCompose.EdgeDetection/Ops.Gl.ImageCompose.EdgeDetection.js @@ -4,7 +4,7 @@ let amount = op.inValueSlider("amount", 1); let mulColor = op.inValueSlider("Mul Color", 0); let cgl = op.patch.cgl; -let shader = new CGL.Shader(cgl, op.name); +let shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.edgedetect_frag); let textureUniform = new CGL.Uniform(shader, "t", "tex", 0); diff --git a/src/ops/base/Ops.Gl.ImageCompose.EdgeDetection_v2/Ops.Gl.ImageCompose.EdgeDetection_v2.js b/src/ops/base/Ops.Gl.ImageCompose.EdgeDetection_v2/Ops.Gl.ImageCompose.EdgeDetection_v2.js index ece735b019..3f56195c42 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.EdgeDetection_v2/Ops.Gl.ImageCompose.EdgeDetection_v2.js +++ b/src/ops/base/Ops.Gl.ImageCompose.EdgeDetection_v2/Ops.Gl.ImageCompose.EdgeDetection_v2.js @@ -7,7 +7,7 @@ const trigger = op.outTrigger("Trigger"); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.edgedetect_frag); diff --git a/src/ops/base/Ops.Gl.ImageCompose.EdgeDetection_v3/Ops.Gl.ImageCompose.EdgeDetection_v3.js b/src/ops/base/Ops.Gl.ImageCompose.EdgeDetection_v3/Ops.Gl.ImageCompose.EdgeDetection_v3.js index 02f2d452b7..727346ee5d 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.EdgeDetection_v3/Ops.Gl.ImageCompose.EdgeDetection_v3.js +++ b/src/ops/base/Ops.Gl.ImageCompose.EdgeDetection_v3/Ops.Gl.ImageCompose.EdgeDetection_v3.js @@ -9,7 +9,7 @@ const trigger = op.outTrigger("Trigger"); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); // offsetPixel.onChange=updateOffsetPixel; shader.setSource(shader.getDefaultVertexShader(), attachments.edgedetect_frag); diff --git a/src/ops/base/Ops.Gl.ImageCompose.EdgeDetection_v4/Ops.Gl.ImageCompose.EdgeDetection_v4.js b/src/ops/base/Ops.Gl.ImageCompose.EdgeDetection_v4/Ops.Gl.ImageCompose.EdgeDetection_v4.js index c1a8c94261..b4285e326f 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.EdgeDetection_v4/Ops.Gl.ImageCompose.EdgeDetection_v4.js +++ b/src/ops/base/Ops.Gl.ImageCompose.EdgeDetection_v4/Ops.Gl.ImageCompose.EdgeDetection_v4.js @@ -8,7 +8,7 @@ const trigger = op.outTrigger("Trigger"); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.edgedetect_frag); diff --git a/src/ops/base/Ops.Gl.ImageCompose.Emboss/Ops.Gl.ImageCompose.Emboss.js b/src/ops/base/Ops.Gl.ImageCompose.Emboss/Ops.Gl.ImageCompose.Emboss.js index 7942697e49..2c0935ee4c 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.Emboss/Ops.Gl.ImageCompose.Emboss.js +++ b/src/ops/base/Ops.Gl.ImageCompose.Emboss/Ops.Gl.ImageCompose.Emboss.js @@ -4,7 +4,7 @@ const strength = op.inValue("Strength", 4), clear = op.inValueBool("Clear", true), cgl = op.patch.cgl, - shader = new CGL.Shader(cgl, op.name); + shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.emboss_frag || ""); let textureUniform = new CGL.Uniform(shader, "t", "tex", 0); diff --git a/src/ops/base/Ops.Gl.ImageCompose.FXAA/Ops.Gl.ImageCompose.FXAA.js b/src/ops/base/Ops.Gl.ImageCompose.FXAA/Ops.Gl.ImageCompose.FXAA.js index 079e1c85ae..2cab995c52 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.FXAA/Ops.Gl.ImageCompose.FXAA.js +++ b/src/ops/base/Ops.Gl.ImageCompose.FXAA/Ops.Gl.ImageCompose.FXAA.js @@ -10,7 +10,7 @@ let texWidth = op.inValueInt("width"); let texHeight = op.inValueInt("height"); let cgl = op.patch.cgl; -let shader = new CGL.Shader(cgl, op.name); +let shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.fxaa_frag); let textureUniform = new CGL.Uniform(shader, "t", "tex", 0); diff --git a/src/ops/base/Ops.Gl.ImageCompose.Flip/Ops.Gl.ImageCompose.Flip.js b/src/ops/base/Ops.Gl.ImageCompose.Flip/Ops.Gl.ImageCompose.Flip.js index 0b18f4a814..9f175a6648 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.Flip/Ops.Gl.ImageCompose.Flip.js +++ b/src/ops/base/Ops.Gl.ImageCompose.Flip/Ops.Gl.ImageCompose.Flip.js @@ -4,7 +4,7 @@ const y = op.inValueBool("Y"); const trigger = op.outTrigger("trigger"); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.flip_frag); diff --git a/src/ops/base/Ops.Gl.ImageCompose.Float32ToRgbeTexture/Ops.Gl.ImageCompose.Float32ToRgbeTexture.js b/src/ops/base/Ops.Gl.ImageCompose.Float32ToRgbeTexture/Ops.Gl.ImageCompose.Float32ToRgbeTexture.js index 1dab0c3422..6d26a41843 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.Float32ToRgbeTexture/Ops.Gl.ImageCompose.Float32ToRgbeTexture.js +++ b/src/ops/base/Ops.Gl.ImageCompose.Float32ToRgbeTexture/Ops.Gl.ImageCompose.Float32ToRgbeTexture.js @@ -3,7 +3,7 @@ const trigger = op.outTrigger("trigger"); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.rgbe2fp_frag); diff --git a/src/ops/base/Ops.Gl.ImageCompose.Fog/Ops.Gl.ImageCompose.Fog.js b/src/ops/base/Ops.Gl.ImageCompose.Fog/Ops.Gl.ImageCompose.Fog.js index f8f5e4336b..63aa28bc56 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.Fog/Ops.Gl.ImageCompose.Fog.js +++ b/src/ops/base/Ops.Gl.ImageCompose.Fog/Ops.Gl.ImageCompose.Fog.js @@ -12,7 +12,7 @@ ignoreInf.onChange = function () }; let cgl = op.patch.cgl; -var shader = new CGL.Shader(cgl, op.name); +var shader = new CGL.Shader(cgl, op.name, op); let srcFrag = attachments.fog_frag; diff --git a/src/ops/base/Ops.Gl.ImageCompose.Fog_v2/Ops.Gl.ImageCompose.Fog_v2.js b/src/ops/base/Ops.Gl.ImageCompose.Fog_v2/Ops.Gl.ImageCompose.Fog_v2.js index bdeb60e353..79f3dfcae3 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.Fog_v2/Ops.Gl.ImageCompose.Fog_v2.js +++ b/src/ops/base/Ops.Gl.ImageCompose.Fog_v2/Ops.Gl.ImageCompose.Fog_v2.js @@ -12,7 +12,7 @@ const trigger = op.outTrigger("trigger"); let cgl = op.patch.cgl; -let shader = new CGL.Shader(cgl, op.name); +let shader = new CGL.Shader(cgl, op.name, op); let srcFrag = attachments.fog_frag; diff --git a/src/ops/base/Ops.Gl.ImageCompose.GammaCorrection/Ops.Gl.ImageCompose.GammaCorrection.js b/src/ops/base/Ops.Gl.ImageCompose.GammaCorrection/Ops.Gl.ImageCompose.GammaCorrection.js index 541684a77b..634e293cdd 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.GammaCorrection/Ops.Gl.ImageCompose.GammaCorrection.js +++ b/src/ops/base/Ops.Gl.ImageCompose.GammaCorrection/Ops.Gl.ImageCompose.GammaCorrection.js @@ -7,7 +7,7 @@ const inGamma = op.inValue("Gamma correction", 2.2); const trigger = op.outTrigger("trigger"); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.gamma_frag); diff --git a/src/ops/base/Ops.Gl.ImageCompose.GammaCorrection_v2/Ops.Gl.ImageCompose.GammaCorrection_v2.js b/src/ops/base/Ops.Gl.ImageCompose.GammaCorrection_v2/Ops.Gl.ImageCompose.GammaCorrection_v2.js index 78fb231c55..f0487c15f1 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.GammaCorrection_v2/Ops.Gl.ImageCompose.GammaCorrection_v2.js +++ b/src/ops/base/Ops.Gl.ImageCompose.GammaCorrection_v2/Ops.Gl.ImageCompose.GammaCorrection_v2.js @@ -7,7 +7,7 @@ const trigger = op.outTrigger("trigger"); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.gamma_frag); diff --git a/src/ops/base/Ops.Gl.ImageCompose.GridTexture/Ops.Gl.ImageCompose.GridTexture.js b/src/ops/base/Ops.Gl.ImageCompose.GridTexture/Ops.Gl.ImageCompose.GridTexture.js index 35dad3e51a..f0aa157a01 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.GridTexture/Ops.Gl.ImageCompose.GridTexture.js +++ b/src/ops/base/Ops.Gl.ImageCompose.GridTexture/Ops.Gl.ImageCompose.GridTexture.js @@ -24,7 +24,7 @@ op.setPortGroup("Position", [inRotate, offsetX, offsetY]); const trigger = op.outTrigger("trigger"); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.grid_frag); diff --git a/src/ops/base/Ops.Gl.ImageCompose.GridTexture_v2/Ops.Gl.ImageCompose.GridTexture_v2.js b/src/ops/base/Ops.Gl.ImageCompose.GridTexture_v2/Ops.Gl.ImageCompose.GridTexture_v2.js index 4b9868a816..fb89d1e68f 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.GridTexture_v2/Ops.Gl.ImageCompose.GridTexture_v2.js +++ b/src/ops/base/Ops.Gl.ImageCompose.GridTexture_v2/Ops.Gl.ImageCompose.GridTexture_v2.js @@ -27,7 +27,7 @@ op.setPortGroup("Position", [inRotate, offsetX, offsetY]); const trigger = op.outTrigger("trigger"); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.grid_frag); diff --git a/src/ops/base/Ops.Gl.ImageCompose.GrowPixels/Ops.Gl.ImageCompose.GrowPixels.js b/src/ops/base/Ops.Gl.ImageCompose.GrowPixels/Ops.Gl.ImageCompose.GrowPixels.js index 7b29f5b3ec..a5d40f1b6f 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.GrowPixels/Ops.Gl.ImageCompose.GrowPixels.js +++ b/src/ops/base/Ops.Gl.ImageCompose.GrowPixels/Ops.Gl.ImageCompose.GrowPixels.js @@ -12,7 +12,7 @@ const op.setPortGroup("Look", strength); r.setUiAttribs({ "colorPick": true }); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.outline_frag); diff --git a/src/ops/base/Ops.Gl.ImageCompose.GrowPixels_v2/Ops.Gl.ImageCompose.GrowPixels_v2.js b/src/ops/base/Ops.Gl.ImageCompose.GrowPixels_v2/Ops.Gl.ImageCompose.GrowPixels_v2.js index 50cb3f1607..cd4edc0ef0 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.GrowPixels_v2/Ops.Gl.ImageCompose.GrowPixels_v2.js +++ b/src/ops/base/Ops.Gl.ImageCompose.GrowPixels_v2/Ops.Gl.ImageCompose.GrowPixels_v2.js @@ -12,7 +12,7 @@ const op.setPortGroup("Look", strength); r.setUiAttribs({ "colorPick": true }); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.outline_frag); diff --git a/src/ops/base/Ops.Gl.ImageCompose.Hue/Ops.Gl.ImageCompose.Hue.js b/src/ops/base/Ops.Gl.ImageCompose.Hue/Ops.Gl.ImageCompose.Hue.js index 6c9b795271..4f62a436fe 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.Hue/Ops.Gl.ImageCompose.Hue.js +++ b/src/ops/base/Ops.Gl.ImageCompose.Hue/Ops.Gl.ImageCompose.Hue.js @@ -6,7 +6,7 @@ const trigger = op.outTrigger("trigger"); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.hue_frag); const textureUniform = new CGL.Uniform(shader, "t", "tex", 0); diff --git a/src/ops/base/Ops.Gl.ImageCompose.Interlace/Ops.Gl.ImageCompose.Interlace.js b/src/ops/base/Ops.Gl.ImageCompose.Interlace/Ops.Gl.ImageCompose.Interlace.js index a3e9a8c67c..4585749de0 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.Interlace/Ops.Gl.ImageCompose.Interlace.js +++ b/src/ops/base/Ops.Gl.ImageCompose.Interlace/Ops.Gl.ImageCompose.Interlace.js @@ -11,7 +11,7 @@ let inScroll = op.inValue("scroll", 0); let trigger = op.outTrigger("trigger"); let cgl = op.patch.cgl; -let shader = new CGL.Shader(cgl, op.name); +let shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.interlace_frag); let textureUniform = new CGL.Uniform(shader, "t", "tex", 0); diff --git a/src/ops/base/Ops.Gl.ImageCompose.Invert/Ops.Gl.ImageCompose.Invert.js b/src/ops/base/Ops.Gl.ImageCompose.Invert/Ops.Gl.ImageCompose.Invert.js index de6c608b70..99930560b8 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.Invert/Ops.Gl.ImageCompose.Invert.js +++ b/src/ops/base/Ops.Gl.ImageCompose.Invert/Ops.Gl.ImageCompose.Invert.js @@ -8,7 +8,7 @@ const amount = op.inValueSlider("Amount", 1); const trigger = op.outTrigger("trigger"); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.invert_frag); const diff --git a/src/ops/base/Ops.Gl.ImageCompose.Invert_v2/Ops.Gl.ImageCompose.Invert_v2.js b/src/ops/base/Ops.Gl.ImageCompose.Invert_v2/Ops.Gl.ImageCompose.Invert_v2.js index 6c0c811916..28780eb115 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.Invert_v2/Ops.Gl.ImageCompose.Invert_v2.js +++ b/src/ops/base/Ops.Gl.ImageCompose.Invert_v2/Ops.Gl.ImageCompose.Invert_v2.js @@ -10,7 +10,7 @@ const trigger = op.outTrigger("trigger"); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.invert_frag); const diff --git a/src/ops/base/Ops.Gl.ImageCompose.Kaleidoscope/Ops.Gl.ImageCompose.Kaleidoscope.js b/src/ops/base/Ops.Gl.ImageCompose.Kaleidoscope/Ops.Gl.ImageCompose.Kaleidoscope.js index eafbb55d55..94dd1775e0 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.Kaleidoscope/Ops.Gl.ImageCompose.Kaleidoscope.js +++ b/src/ops/base/Ops.Gl.ImageCompose.Kaleidoscope/Ops.Gl.ImageCompose.Kaleidoscope.js @@ -12,7 +12,7 @@ let centerY = op.inValueSlider("Center Y", 0.5); let trigger = op.addOutPort(new CABLES.Port(op, "Next", CABLES.OP_PORT_TYPE_FUNCTION)); let cgl = op.patch.cgl; -let shader = new CGL.Shader(cgl, op.name); +let shader = new CGL.Shader(cgl, op.name, op); let unisides = new CGL.Uniform(shader, "f", "sides", sides); let uniangle = new CGL.Uniform(shader, "f", "angle", angle); diff --git a/src/ops/base/Ops.Gl.ImageCompose.Kaleidoscope_v2/Ops.Gl.ImageCompose.Kaleidoscope_v2.js b/src/ops/base/Ops.Gl.ImageCompose.Kaleidoscope_v2/Ops.Gl.ImageCompose.Kaleidoscope_v2.js index 6d81b1e546..0a8e3eb3c1 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.Kaleidoscope_v2/Ops.Gl.ImageCompose.Kaleidoscope_v2.js +++ b/src/ops/base/Ops.Gl.ImageCompose.Kaleidoscope_v2/Ops.Gl.ImageCompose.Kaleidoscope_v2.js @@ -12,7 +12,7 @@ const trigger = op.outTrigger("Next"); let cgl = op.patch.cgl; -let shader = new CGL.Shader(cgl, op.name); +let shader = new CGL.Shader(cgl, op.name, op); const unisides = new CGL.Uniform(shader, "f", "sides", sides), diff --git a/src/ops/base/Ops.Gl.ImageCompose.LUTMap/Ops.Gl.ImageCompose.LUTMap.js b/src/ops/base/Ops.Gl.ImageCompose.LUTMap/Ops.Gl.ImageCompose.LUTMap.js index fc28376825..b8a7e2772e 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.LUTMap/Ops.Gl.ImageCompose.LUTMap.js +++ b/src/ops/base/Ops.Gl.ImageCompose.LUTMap/Ops.Gl.ImageCompose.LUTMap.js @@ -4,7 +4,7 @@ let inLut = op.inTexture("LUT Image"); let inAmount = op.inValueSlider("Amount", 1.0); let cgl = op.patch.cgl; -let shader = new CGL.Shader(cgl, op.name); +let shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.lut_frag); let textureUniform = new CGL.Uniform(shader, "t", "tex", 0); diff --git a/src/ops/base/Ops.Gl.ImageCompose.LensDirt/Ops.Gl.ImageCompose.LensDirt.js b/src/ops/base/Ops.Gl.ImageCompose.LensDirt/Ops.Gl.ImageCompose.LensDirt.js index 40d88481c6..4bf6927b39 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.LensDirt/Ops.Gl.ImageCompose.LensDirt.js +++ b/src/ops/base/Ops.Gl.ImageCompose.LensDirt/Ops.Gl.ImageCompose.LensDirt.js @@ -12,7 +12,7 @@ const trigger = op.outTrigger("trigger"); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.lensDirt_frag); diff --git a/src/ops/base/Ops.Gl.ImageCompose.LensDirt_v2/Ops.Gl.ImageCompose.LensDirt_v2.js b/src/ops/base/Ops.Gl.ImageCompose.LensDirt_v2/Ops.Gl.ImageCompose.LensDirt_v2.js index 9ad9206a6e..18d5b40a99 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.LensDirt_v2/Ops.Gl.ImageCompose.LensDirt_v2.js +++ b/src/ops/base/Ops.Gl.ImageCompose.LensDirt_v2/Ops.Gl.ImageCompose.LensDirt_v2.js @@ -13,7 +13,7 @@ const trigger = op.outTrigger("trigger"); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.lensDirt_frag); diff --git a/src/ops/base/Ops.Gl.ImageCompose.LensScratches/Ops.Gl.ImageCompose.LensScratches.js b/src/ops/base/Ops.Gl.ImageCompose.LensScratches/Ops.Gl.ImageCompose.LensScratches.js index d0c0b8a1f5..e04eb21766 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.LensScratches/Ops.Gl.ImageCompose.LensScratches.js +++ b/src/ops/base/Ops.Gl.ImageCompose.LensScratches/Ops.Gl.ImageCompose.LensScratches.js @@ -14,7 +14,7 @@ const trigger = op.outTrigger("trigger"); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.lensScratches_frag); diff --git a/src/ops/base/Ops.Gl.ImageCompose.LensScratches_v2/Ops.Gl.ImageCompose.LensScratches_v2.js b/src/ops/base/Ops.Gl.ImageCompose.LensScratches_v2/Ops.Gl.ImageCompose.LensScratches_v2.js index 7530bc3d08..44502eff0f 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.LensScratches_v2/Ops.Gl.ImageCompose.LensScratches_v2.js +++ b/src/ops/base/Ops.Gl.ImageCompose.LensScratches_v2/Ops.Gl.ImageCompose.LensScratches_v2.js @@ -15,7 +15,7 @@ const trigger = op.outTrigger("trigger"); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.lensScratches_frag); diff --git a/src/ops/base/Ops.Gl.ImageCompose.Levels/Ops.Gl.ImageCompose.Levels.js b/src/ops/base/Ops.Gl.ImageCompose.Levels/Ops.Gl.ImageCompose.Levels.js index 02399d5ecc..eb704f18d3 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.Levels/Ops.Gl.ImageCompose.Levels.js +++ b/src/ops/base/Ops.Gl.ImageCompose.Levels/Ops.Gl.ImageCompose.Levels.js @@ -10,7 +10,7 @@ let outMax = op.inValueSlider("Out Max", 1); let trigger = op.addOutPort(new CABLES.Port(op, "Next", CABLES.OP_PORT_TYPE_FUNCTION)); let cgl = op.patch.cgl; -let shader = new CGL.Shader(cgl, op.name); +let shader = new CGL.Shader(cgl, op.name, op); let uniInMin = new CGL.Uniform(shader, "f", "inMin", inMin); let uniInMid = new CGL.Uniform(shader, "f", "midPoint", inMid); diff --git a/src/ops/base/Ops.Gl.ImageCompose.Levels_v2/Ops.Gl.ImageCompose.Levels_v2.js b/src/ops/base/Ops.Gl.ImageCompose.Levels_v2/Ops.Gl.ImageCompose.Levels_v2.js index 4232415d00..a547c129a9 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.Levels_v2/Ops.Gl.ImageCompose.Levels_v2.js +++ b/src/ops/base/Ops.Gl.ImageCompose.Levels_v2/Ops.Gl.ImageCompose.Levels_v2.js @@ -11,7 +11,7 @@ const trigger = op.outTrigger("Next"); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); const uniInMin = new CGL.Uniform(shader, "f", "inMin", inMin), diff --git a/src/ops/base/Ops.Gl.ImageCompose.Math.Normalize/Ops.Gl.ImageCompose.Math.Normalize.js b/src/ops/base/Ops.Gl.ImageCompose.Math.Normalize/Ops.Gl.ImageCompose.Math.Normalize.js index f37aad297c..1f0ecb8f4b 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.Math.Normalize/Ops.Gl.ImageCompose.Math.Normalize.js +++ b/src/ops/base/Ops.Gl.ImageCompose.Math.Normalize/Ops.Gl.ImageCompose.Math.Normalize.js @@ -6,7 +6,7 @@ const trigger = op.outTrigger("trigger"); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.rgbmul_frag); const diff --git a/src/ops/base/Ops.Gl.ImageCompose.Math.RgbMath/Ops.Gl.ImageCompose.Math.RgbMath.js b/src/ops/base/Ops.Gl.ImageCompose.Math.RgbMath/Ops.Gl.ImageCompose.Math.RgbMath.js index f70f5c0b5e..19c4add604 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.Math.RgbMath/Ops.Gl.ImageCompose.Math.RgbMath.js +++ b/src/ops/base/Ops.Gl.ImageCompose.Math.RgbMath/Ops.Gl.ImageCompose.Math.RgbMath.js @@ -16,7 +16,7 @@ const trigger = op.outTrigger("trigger"); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.rgbmul_frag); const diff --git a/src/ops/base/Ops.Gl.ImageCompose.Math.RgbMathExpression/Ops.Gl.ImageCompose.Math.RgbMathExpression.js b/src/ops/base/Ops.Gl.ImageCompose.Math.RgbMathExpression/Ops.Gl.ImageCompose.Math.RgbMathExpression.js index 3a512df3a4..4b803643e8 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.Math.RgbMathExpression/Ops.Gl.ImageCompose.Math.RgbMathExpression.js +++ b/src/ops/base/Ops.Gl.ImageCompose.Math.RgbMathExpression/Ops.Gl.ImageCompose.Math.RgbMathExpression.js @@ -17,7 +17,7 @@ const trigger = op.outTrigger("trigger"); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), shader.getDefaultFragmentShader()); const diff --git a/src/ops/base/Ops.Gl.ImageCompose.Math.RgbTransform/Ops.Gl.ImageCompose.Math.RgbTransform.js b/src/ops/base/Ops.Gl.ImageCompose.Math.RgbTransform/Ops.Gl.ImageCompose.Math.RgbTransform.js index e588dd531a..30484e166e 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.Math.RgbTransform/Ops.Gl.ImageCompose.Math.RgbTransform.js +++ b/src/ops/base/Ops.Gl.ImageCompose.Math.RgbTransform/Ops.Gl.ImageCompose.Math.RgbTransform.js @@ -25,7 +25,7 @@ op.setPortGroup("Scale", [inDoScale, scalex, scaley, scalez]); op.setUiAxisPorts(posx, posz, posy); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.rgbmul_frag); const diff --git a/src/ops/base/Ops.Gl.ImageCompose.Math.RgbeToFloat32Texture/Ops.Gl.ImageCompose.Math.RgbeToFloat32Texture.js b/src/ops/base/Ops.Gl.ImageCompose.Math.RgbeToFloat32Texture/Ops.Gl.ImageCompose.Math.RgbeToFloat32Texture.js index 7c435da48c..e13555d7ed 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.Math.RgbeToFloat32Texture/Ops.Gl.ImageCompose.Math.RgbeToFloat32Texture.js +++ b/src/ops/base/Ops.Gl.ImageCompose.Math.RgbeToFloat32Texture/Ops.Gl.ImageCompose.Math.RgbeToFloat32Texture.js @@ -3,7 +3,7 @@ const trigger = op.outTrigger("trigger"); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.rgbe2fp_frag); diff --git a/src/ops/base/Ops.Gl.ImageCompose.Math.TexMathCompare/Ops.Gl.ImageCompose.Math.TexMathCompare.js b/src/ops/base/Ops.Gl.ImageCompose.Math.TexMathCompare/Ops.Gl.ImageCompose.Math.TexMathCompare.js index 5cf9eb1d90..5bf5e2154c 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.Math.TexMathCompare/Ops.Gl.ImageCompose.Math.TexMathCompare.js +++ b/src/ops/base/Ops.Gl.ImageCompose.Math.TexMathCompare/Ops.Gl.ImageCompose.Math.TexMathCompare.js @@ -12,7 +12,7 @@ const trigger = op.outTrigger("trigger"); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.logic_frag); const diff --git a/src/ops/base/Ops.Gl.ImageCompose.Mirror/Ops.Gl.ImageCompose.Mirror.js b/src/ops/base/Ops.Gl.ImageCompose.Mirror/Ops.Gl.ImageCompose.Mirror.js index 4f08b6d477..ea1a92a176 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.Mirror/Ops.Gl.ImageCompose.Mirror.js +++ b/src/ops/base/Ops.Gl.ImageCompose.Mirror/Ops.Gl.ImageCompose.Mirror.js @@ -7,7 +7,7 @@ const flip = op.inValueBool("flip"); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.mirror_frag); diff --git a/src/ops/base/Ops.Gl.ImageCompose.Mix/Ops.Gl.ImageCompose.Mix.js b/src/ops/base/Ops.Gl.ImageCompose.Mix/Ops.Gl.ImageCompose.Mix.js index cb35a68638..61aa8c83ae 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.Mix/Ops.Gl.ImageCompose.Mix.js +++ b/src/ops/base/Ops.Gl.ImageCompose.Mix/Ops.Gl.ImageCompose.Mix.js @@ -6,7 +6,7 @@ const trigger = op.outTrigger("trigger"); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.mix_frag); const diff --git a/src/ops/base/Ops.Gl.ImageCompose.Noise.CellularNoise/Ops.Gl.ImageCompose.Noise.CellularNoise.js b/src/ops/base/Ops.Gl.ImageCompose.Noise.CellularNoise/Ops.Gl.ImageCompose.Noise.CellularNoise.js index b93407d6d3..5c1f05352a 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.Noise.CellularNoise/Ops.Gl.ImageCompose.Noise.CellularNoise.js +++ b/src/ops/base/Ops.Gl.ImageCompose.Noise.CellularNoise/Ops.Gl.ImageCompose.Noise.CellularNoise.js @@ -15,7 +15,7 @@ const trigger = op.outTrigger("trigger"); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.cellularnoise3d_frag); diff --git a/src/ops/base/Ops.Gl.ImageCompose.Noise.CellularNoise_v2/Ops.Gl.ImageCompose.Noise.CellularNoise_v2.js b/src/ops/base/Ops.Gl.ImageCompose.Noise.CellularNoise_v2/Ops.Gl.ImageCompose.Noise.CellularNoise_v2.js index e63f393954..547e7a9b00 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.Noise.CellularNoise_v2/Ops.Gl.ImageCompose.Noise.CellularNoise_v2.js +++ b/src/ops/base/Ops.Gl.ImageCompose.Noise.CellularNoise_v2/Ops.Gl.ImageCompose.Noise.CellularNoise_v2.js @@ -16,7 +16,7 @@ const trigger = op.outTrigger("trigger"); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.cellularnoise3d_frag); diff --git a/src/ops/base/Ops.Gl.ImageCompose.Noise.GlitchNoise/Ops.Gl.ImageCompose.Noise.GlitchNoise.js b/src/ops/base/Ops.Gl.ImageCompose.Noise.GlitchNoise/Ops.Gl.ImageCompose.Noise.GlitchNoise.js index 66632506af..482f2a9fd8 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.Noise.GlitchNoise/Ops.Gl.ImageCompose.Noise.GlitchNoise.js +++ b/src/ops/base/Ops.Gl.ImageCompose.Noise.GlitchNoise/Ops.Gl.ImageCompose.Noise.GlitchNoise.js @@ -15,7 +15,7 @@ const const TEX_SLOT = 0; const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.glitchnoise_frag); const diff --git a/src/ops/base/Ops.Gl.ImageCompose.Noise.GlitchNoise_v2/Ops.Gl.ImageCompose.Noise.GlitchNoise_v2.js b/src/ops/base/Ops.Gl.ImageCompose.Noise.GlitchNoise_v2/Ops.Gl.ImageCompose.Noise.GlitchNoise_v2.js index a406bd7851..4aaceb9b18 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.Noise.GlitchNoise_v2/Ops.Gl.ImageCompose.Noise.GlitchNoise_v2.js +++ b/src/ops/base/Ops.Gl.ImageCompose.Noise.GlitchNoise_v2/Ops.Gl.ImageCompose.Noise.GlitchNoise_v2.js @@ -17,7 +17,7 @@ const const TEX_SLOT = 0; const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.glitchnoise_frag); const diff --git a/src/ops/base/Ops.Gl.ImageCompose.Noise.HexagonNoise/Ops.Gl.ImageCompose.Noise.HexagonNoise.js b/src/ops/base/Ops.Gl.ImageCompose.Noise.HexagonNoise/Ops.Gl.ImageCompose.Noise.HexagonNoise.js index b24e921dcc..ce17cdaf34 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.Noise.HexagonNoise/Ops.Gl.ImageCompose.Noise.HexagonNoise.js +++ b/src/ops/base/Ops.Gl.ImageCompose.Noise.HexagonNoise/Ops.Gl.ImageCompose.Noise.HexagonNoise.js @@ -21,7 +21,7 @@ op.setPortGroup("Position", [addX, addY, addZ]); op.setPortGroup("", [scale, inAsp, orientation]); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.hexnoise_frag); const diff --git a/src/ops/base/Ops.Gl.ImageCompose.Noise.HexagonNoise_v2/Ops.Gl.ImageCompose.Noise.HexagonNoise_v2.js b/src/ops/base/Ops.Gl.ImageCompose.Noise.HexagonNoise_v2/Ops.Gl.ImageCompose.Noise.HexagonNoise_v2.js index 9e50f6b233..9995865139 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.Noise.HexagonNoise_v2/Ops.Gl.ImageCompose.Noise.HexagonNoise_v2.js +++ b/src/ops/base/Ops.Gl.ImageCompose.Noise.HexagonNoise_v2/Ops.Gl.ImageCompose.Noise.HexagonNoise_v2.js @@ -21,7 +21,7 @@ op.setPortGroup("Position", [addX, addY, addZ]); op.setPortGroup("", [scale, orientation]); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.hexnoise_frag); const diff --git a/src/ops/base/Ops.Gl.ImageCompose.Noise.PixelNoise/Ops.Gl.ImageCompose.Noise.PixelNoise.js b/src/ops/base/Ops.Gl.ImageCompose.Noise.PixelNoise/Ops.Gl.ImageCompose.Noise.PixelNoise.js index b5a9a0f7c3..48054f8014 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.Noise.PixelNoise/Ops.Gl.ImageCompose.Noise.PixelNoise.js +++ b/src/ops/base/Ops.Gl.ImageCompose.Noise.PixelNoise/Ops.Gl.ImageCompose.Noise.PixelNoise.js @@ -11,7 +11,7 @@ const render = op.inTrigger("Render"), const trigger = op.outTrigger("Next"); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); const amountUniform = new CGL.Uniform(shader, "f", "amount", amount); const timeUniform = new CGL.Uniform(shader, "f", "time", 1.0); diff --git a/src/ops/base/Ops.Gl.ImageCompose.Noise.PixelNoise_v2/Ops.Gl.ImageCompose.Noise.PixelNoise_v2.js b/src/ops/base/Ops.Gl.ImageCompose.Noise.PixelNoise_v2/Ops.Gl.ImageCompose.Noise.PixelNoise_v2.js index 8f8985e87b..02debdebe6 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.Noise.PixelNoise_v2/Ops.Gl.ImageCompose.Noise.PixelNoise_v2.js +++ b/src/ops/base/Ops.Gl.ImageCompose.Noise.PixelNoise_v2/Ops.Gl.ImageCompose.Noise.PixelNoise_v2.js @@ -20,7 +20,7 @@ op.setPortGroup("Position", [addX, addY, addZ]); op.setPortGroup("Scaling", [numX, numY]); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.pixelnoise2_frag); const diff --git a/src/ops/base/Ops.Gl.ImageCompose.Noise.PixelNoise_v3/Ops.Gl.ImageCompose.Noise.PixelNoise_v3.js b/src/ops/base/Ops.Gl.ImageCompose.Noise.PixelNoise_v3/Ops.Gl.ImageCompose.Noise.PixelNoise_v3.js index e7b0ecc1fe..402f790931 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.Noise.PixelNoise_v3/Ops.Gl.ImageCompose.Noise.PixelNoise_v3.js +++ b/src/ops/base/Ops.Gl.ImageCompose.Noise.PixelNoise_v3/Ops.Gl.ImageCompose.Noise.PixelNoise_v3.js @@ -21,7 +21,7 @@ op.setPortGroup("Position", [addX, addY, addZ]); op.setPortGroup("Scaling", [numX, numY]); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.pixelnoise2_frag); const diff --git a/src/ops/base/Ops.Gl.ImageCompose.Noise.PolkaDotNoise/Ops.Gl.ImageCompose.Noise.PolkaDotNoise.js b/src/ops/base/Ops.Gl.ImageCompose.Noise.PolkaDotNoise/Ops.Gl.ImageCompose.Noise.PolkaDotNoise.js index 1350ca7069..6012d6cb89 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.Noise.PolkaDotNoise/Ops.Gl.ImageCompose.Noise.PolkaDotNoise.js +++ b/src/ops/base/Ops.Gl.ImageCompose.Noise.PolkaDotNoise/Ops.Gl.ImageCompose.Noise.PolkaDotNoise.js @@ -13,7 +13,7 @@ let Z = op.inValue("Z", 0); let trigger = op.outTrigger("Next"); let cgl = op.patch.cgl; -let shader = new CGL.Shader(cgl, op.name); +let shader = new CGL.Shader(cgl, op.name, op); let amountUniform = new CGL.Uniform(shader, "f", "amount", amount); let timeUniform = new CGL.Uniform(shader, "f", "time", 1.0); diff --git a/src/ops/base/Ops.Gl.ImageCompose.Noise.PolkaDotNoise_v2/Ops.Gl.ImageCompose.Noise.PolkaDotNoise_v2.js b/src/ops/base/Ops.Gl.ImageCompose.Noise.PolkaDotNoise_v2/Ops.Gl.ImageCompose.Noise.PolkaDotNoise_v2.js index 94203ce90f..c4b315eb26 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.Noise.PolkaDotNoise_v2/Ops.Gl.ImageCompose.Noise.PolkaDotNoise_v2.js +++ b/src/ops/base/Ops.Gl.ImageCompose.Noise.PolkaDotNoise_v2/Ops.Gl.ImageCompose.Noise.PolkaDotNoise_v2.js @@ -14,7 +14,7 @@ const trigger = op.outTrigger("Next"); let cgl = op.patch.cgl; -let shader = new CGL.Shader(cgl, op.name); +let shader = new CGL.Shader(cgl, op.name, op); let amountUniform = new CGL.Uniform(shader, "f", "amount", amount); let timeUniform = new CGL.Uniform(shader, "f", "time", 1.0); diff --git a/src/ops/base/Ops.Gl.ImageCompose.Noise.SimplexNoise/Ops.Gl.ImageCompose.Noise.SimplexNoise.js b/src/ops/base/Ops.Gl.ImageCompose.Noise.SimplexNoise/Ops.Gl.ImageCompose.Noise.SimplexNoise.js index 3b81d3afcf..5bfa62bcd2 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.Noise.SimplexNoise/Ops.Gl.ImageCompose.Noise.SimplexNoise.js +++ b/src/ops/base/Ops.Gl.ImageCompose.Noise.SimplexNoise/Ops.Gl.ImageCompose.Noise.SimplexNoise.js @@ -22,7 +22,7 @@ const op.setPortGroup("Offset Map", [inTexOffsetZ, offsetZ, offsetY, offsetX, inOffsetMul]); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.simplexnoise_frag); diff --git a/src/ops/base/Ops.Gl.ImageCompose.Noise.SimplexNoise_v2/Ops.Gl.ImageCompose.Noise.SimplexNoise_v2.js b/src/ops/base/Ops.Gl.ImageCompose.Noise.SimplexNoise_v2/Ops.Gl.ImageCompose.Noise.SimplexNoise_v2.js index a74de4db87..173f3e3fe8 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.Noise.SimplexNoise_v2/Ops.Gl.ImageCompose.Noise.SimplexNoise_v2.js +++ b/src/ops/base/Ops.Gl.ImageCompose.Noise.SimplexNoise_v2/Ops.Gl.ImageCompose.Noise.SimplexNoise_v2.js @@ -22,7 +22,7 @@ const op.setPortGroup("Offset Map", [inTexOffsetZ, offsetZ, offsetY, offsetX, inOffsetMul]); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.simplexnoise_frag); diff --git a/src/ops/base/Ops.Gl.ImageCompose.Noise.TriangleNoise/Ops.Gl.ImageCompose.Noise.TriangleNoise.js b/src/ops/base/Ops.Gl.ImageCompose.Noise.TriangleNoise/Ops.Gl.ImageCompose.Noise.TriangleNoise.js index e72150f2eb..1e4c9144bc 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.Noise.TriangleNoise/Ops.Gl.ImageCompose.Noise.TriangleNoise.js +++ b/src/ops/base/Ops.Gl.ImageCompose.Noise.TriangleNoise/Ops.Gl.ImageCompose.Noise.TriangleNoise.js @@ -6,7 +6,7 @@ const angle = op.inValue("angle"); const add = op.inValue("Add"); const trigger = op.outTrigger("Next"); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.trianglenoise_frag); diff --git a/src/ops/base/Ops.Gl.ImageCompose.Noise.TriangleNoise_v2/Ops.Gl.ImageCompose.Noise.TriangleNoise_v2.js b/src/ops/base/Ops.Gl.ImageCompose.Noise.TriangleNoise_v2/Ops.Gl.ImageCompose.Noise.TriangleNoise_v2.js index edaf86a5e1..c7170d95e1 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.Noise.TriangleNoise_v2/Ops.Gl.ImageCompose.Noise.TriangleNoise_v2.js +++ b/src/ops/base/Ops.Gl.ImageCompose.Noise.TriangleNoise_v2/Ops.Gl.ImageCompose.Noise.TriangleNoise_v2.js @@ -10,7 +10,7 @@ const const cgl = op.patch.cgl, - shader = new CGL.Shader(cgl, op.name); + shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.trianglenoise_frag); diff --git a/src/ops/base/Ops.Gl.ImageCompose.Noise.ValueNoise/Ops.Gl.ImageCompose.Noise.ValueNoise.js b/src/ops/base/Ops.Gl.ImageCompose.Noise.ValueNoise/Ops.Gl.ImageCompose.Noise.ValueNoise.js index eead8dbe48..7ef5f74ca2 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.Noise.ValueNoise/Ops.Gl.ImageCompose.Noise.ValueNoise.js +++ b/src/ops/base/Ops.Gl.ImageCompose.Noise.ValueNoise/Ops.Gl.ImageCompose.Noise.ValueNoise.js @@ -13,7 +13,7 @@ op.setPortGroup("Position", [x, y, z]); op.setPortGroup("Look", [scale]); let cgl = op.patch.cgl; -let shader = new CGL.Shader(cgl, op.name); +let shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.valuenoise3d_frag); let textureUniform = new CGL.Uniform(shader, "t", "tex", 0); diff --git a/src/ops/base/Ops.Gl.ImageCompose.Noise.ValueNoise_v2/Ops.Gl.ImageCompose.Noise.ValueNoise_v2.js b/src/ops/base/Ops.Gl.ImageCompose.Noise.ValueNoise_v2/Ops.Gl.ImageCompose.Noise.ValueNoise_v2.js index 4af0ca6f29..c6fec963be 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.Noise.ValueNoise_v2/Ops.Gl.ImageCompose.Noise.ValueNoise_v2.js +++ b/src/ops/base/Ops.Gl.ImageCompose.Noise.ValueNoise_v2/Ops.Gl.ImageCompose.Noise.ValueNoise_v2.js @@ -12,7 +12,7 @@ op.setPortGroup("Position", [x, y, z]); op.setPortGroup("Look", [scale]); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(CGL.Shader.getDefaultVertexShader(), attachments.valuenoise3d_frag); diff --git a/src/ops/base/Ops.Gl.ImageCompose.Noise.Voronoise/Ops.Gl.ImageCompose.Noise.Voronoise.js b/src/ops/base/Ops.Gl.ImageCompose.Noise.Voronoise/Ops.Gl.ImageCompose.Noise.Voronoise.js index 82d0add3a3..697f0387d8 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.Noise.Voronoise/Ops.Gl.ImageCompose.Noise.Voronoise.js +++ b/src/ops/base/Ops.Gl.ImageCompose.Noise.Voronoise/Ops.Gl.ImageCompose.Noise.Voronoise.js @@ -13,7 +13,7 @@ const centerSize = op.inValueSlider("Draw Center", 0); const cgl = op.patch.cgl; -let shader = new CGL.Shader(cgl, op.name); +let shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.voronoise_frag); diff --git a/src/ops/base/Ops.Gl.ImageCompose.Noise.Voronoise_v2/Ops.Gl.ImageCompose.Noise.Voronoise_v2.js b/src/ops/base/Ops.Gl.ImageCompose.Noise.Voronoise_v2/Ops.Gl.ImageCompose.Noise.Voronoise_v2.js index 5b8afc3956..727ee7fcf1 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.Noise.Voronoise_v2/Ops.Gl.ImageCompose.Noise.Voronoise_v2.js +++ b/src/ops/base/Ops.Gl.ImageCompose.Noise.Voronoise_v2/Ops.Gl.ImageCompose.Noise.Voronoise_v2.js @@ -14,7 +14,7 @@ const centerSize = op.inValueSlider("Draw Center", 0); const cgl = op.patch.cgl; -let shader = new CGL.Shader(cgl, op.name); +let shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.voronoise_frag); diff --git a/src/ops/base/Ops.Gl.ImageCompose.Noise.WorleyNoise/Ops.Gl.ImageCompose.Noise.WorleyNoise.js b/src/ops/base/Ops.Gl.ImageCompose.Noise.WorleyNoise/Ops.Gl.ImageCompose.Noise.WorleyNoise.js index 5e8585d0a5..7fbb9d7b7d 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.Noise.WorleyNoise/Ops.Gl.ImageCompose.Noise.WorleyNoise.js +++ b/src/ops/base/Ops.Gl.ImageCompose.Noise.WorleyNoise/Ops.Gl.ImageCompose.Noise.WorleyNoise.js @@ -15,7 +15,7 @@ let rangeB = op.inValueSlider("RangeB", 0.5); let trigger = op.outTrigger("trigger"); let cgl = op.patch.cgl; -let shader = new CGL.Shader(cgl, op.name); +let shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.worleynoise_frag); const textureUniform = new CGL.Uniform(shader, "t", "tex", 0); diff --git a/src/ops/base/Ops.Gl.ImageCompose.Noise.WorleyNoise_v2/Ops.Gl.ImageCompose.Noise.WorleyNoise_v2.js b/src/ops/base/Ops.Gl.ImageCompose.Noise.WorleyNoise_v2/Ops.Gl.ImageCompose.Noise.WorleyNoise_v2.js index f06c5b1402..d70c14ba16 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.Noise.WorleyNoise_v2/Ops.Gl.ImageCompose.Noise.WorleyNoise_v2.js +++ b/src/ops/base/Ops.Gl.ImageCompose.Noise.WorleyNoise_v2/Ops.Gl.ImageCompose.Noise.WorleyNoise_v2.js @@ -15,7 +15,7 @@ const trigger = op.outTrigger("trigger"); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.worleynoise_frag); const textureUniform = new CGL.Uniform(shader, "t", "tex", 0), diff --git a/src/ops/base/Ops.Gl.ImageCompose.PatternLookup/Ops.Gl.ImageCompose.PatternLookup.js b/src/ops/base/Ops.Gl.ImageCompose.PatternLookup/Ops.Gl.ImageCompose.PatternLookup.js index 7d42d70685..dbefce698e 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.PatternLookup/Ops.Gl.ImageCompose.PatternLookup.js +++ b/src/ops/base/Ops.Gl.ImageCompose.PatternLookup/Ops.Gl.ImageCompose.PatternLookup.js @@ -8,7 +8,7 @@ const patternWidth = op.inValueSlider("Width", 0.1); const patternHeight = op.inValueSlider("Height", 0.1); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); op.toWorkPortsNeedToBeLinked(multiplierTex); diff --git a/src/ops/base/Ops.Gl.ImageCompose.PixelColor/Ops.Gl.ImageCompose.PixelColor.js b/src/ops/base/Ops.Gl.ImageCompose.PixelColor/Ops.Gl.ImageCompose.PixelColor.js index 6b42a3e6a8..461a8ceed2 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.PixelColor/Ops.Gl.ImageCompose.PixelColor.js +++ b/src/ops/base/Ops.Gl.ImageCompose.PixelColor/Ops.Gl.ImageCompose.PixelColor.js @@ -7,7 +7,7 @@ const render = op.inTrigger("render"), trigger = op.outTrigger("trigger"); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.pixelate_frag); diff --git a/src/ops/base/Ops.Gl.ImageCompose.PixelDifference/Ops.Gl.ImageCompose.PixelDifference.js b/src/ops/base/Ops.Gl.ImageCompose.PixelDifference/Ops.Gl.ImageCompose.PixelDifference.js index 87fdae378f..e5e79b3e6a 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.PixelDifference/Ops.Gl.ImageCompose.PixelDifference.js +++ b/src/ops/base/Ops.Gl.ImageCompose.PixelDifference/Ops.Gl.ImageCompose.PixelDifference.js @@ -29,7 +29,7 @@ rMeth.onChange = bMeth.onChange = updateDefines; const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.slope_frag); const diff --git a/src/ops/base/Ops.Gl.ImageCompose.PixelDisplacement_v2/Ops.Gl.ImageCompose.PixelDisplacement_v2.js b/src/ops/base/Ops.Gl.ImageCompose.PixelDisplacement_v2/Ops.Gl.ImageCompose.PixelDisplacement_v2.js index f9053ffdb9..02371cfc33 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.PixelDisplacement_v2/Ops.Gl.ImageCompose.PixelDisplacement_v2.js +++ b/src/ops/base/Ops.Gl.ImageCompose.PixelDisplacement_v2/Ops.Gl.ImageCompose.PixelDisplacement_v2.js @@ -6,7 +6,7 @@ const displaceTex = op.inTexture("displaceTex"); const trigger = op.outTrigger("trigger"); const cgl = op.patch.cgl; -let shader = new CGL.Shader(cgl, op.name); +let shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.pixeldisplace_frag); let textureUniform = new CGL.Uniform(shader, "t", "tex", 0); diff --git a/src/ops/base/Ops.Gl.ImageCompose.PixelDisplacement_v3/Ops.Gl.ImageCompose.PixelDisplacement_v3.js b/src/ops/base/Ops.Gl.ImageCompose.PixelDisplacement_v3/Ops.Gl.ImageCompose.PixelDisplacement_v3.js index 344c0b7b7d..8d8bf2dc1f 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.PixelDisplacement_v3/Ops.Gl.ImageCompose.PixelDisplacement_v3.js +++ b/src/ops/base/Ops.Gl.ImageCompose.PixelDisplacement_v3/Ops.Gl.ImageCompose.PixelDisplacement_v3.js @@ -17,7 +17,7 @@ op.toWorkPortsNeedToBeLinked(displaceTex); const cgl = op.patch.cgl, - shader = new CGL.Shader(cgl, op.name); + shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.pixeldisplace3_frag); diff --git a/src/ops/base/Ops.Gl.ImageCompose.PixelDisplacement_v4/Ops.Gl.ImageCompose.PixelDisplacement_v4.js b/src/ops/base/Ops.Gl.ImageCompose.PixelDisplacement_v4/Ops.Gl.ImageCompose.PixelDisplacement_v4.js index f4e8e956aa..cf0491c2d0 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.PixelDisplacement_v4/Ops.Gl.ImageCompose.PixelDisplacement_v4.js +++ b/src/ops/base/Ops.Gl.ImageCompose.PixelDisplacement_v4/Ops.Gl.ImageCompose.PixelDisplacement_v4.js @@ -17,7 +17,7 @@ op.toWorkPortsNeedToBeLinked(displaceTex); const cgl = op.patch.cgl, - shader = new CGL.Shader(cgl, op.name); + shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.pixeldisplace3_frag); diff --git a/src/ops/base/Ops.Gl.ImageCompose.Pixelate/Ops.Gl.ImageCompose.Pixelate.js b/src/ops/base/Ops.Gl.ImageCompose.Pixelate/Ops.Gl.ImageCompose.Pixelate.js index d202c2f2f1..0ab8a2ae6c 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.Pixelate/Ops.Gl.ImageCompose.Pixelate.js +++ b/src/ops/base/Ops.Gl.ImageCompose.Pixelate/Ops.Gl.ImageCompose.Pixelate.js @@ -7,7 +7,7 @@ const render = op.inTrigger("render"), trigger = op.outTrigger("trigger"); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.pixelate_frag); diff --git a/src/ops/base/Ops.Gl.ImageCompose.Pixelate_v2/Ops.Gl.ImageCompose.Pixelate_v2.js b/src/ops/base/Ops.Gl.ImageCompose.Pixelate_v2/Ops.Gl.ImageCompose.Pixelate_v2.js index 44ae0a9dc3..bb179a1481 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.Pixelate_v2/Ops.Gl.ImageCompose.Pixelate_v2.js +++ b/src/ops/base/Ops.Gl.ImageCompose.Pixelate_v2/Ops.Gl.ImageCompose.Pixelate_v2.js @@ -7,7 +7,7 @@ const render = op.inTrigger("render"), trigger = op.outTrigger("trigger"); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.pixelate_frag); diff --git a/src/ops/base/Ops.Gl.ImageCompose.Plasma/Ops.Gl.ImageCompose.Plasma.js b/src/ops/base/Ops.Gl.ImageCompose.Plasma/Ops.Gl.ImageCompose.Plasma.js index 3815a20ce9..eef40d1b8e 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.Plasma/Ops.Gl.ImageCompose.Plasma.js +++ b/src/ops/base/Ops.Gl.ImageCompose.Plasma/Ops.Gl.ImageCompose.Plasma.js @@ -12,7 +12,7 @@ const trigger = op.outTrigger("trigger"); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.plasma_frag); shader.define("GREY"); diff --git a/src/ops/base/Ops.Gl.ImageCompose.Plasma_v2/Ops.Gl.ImageCompose.Plasma_v2.js b/src/ops/base/Ops.Gl.ImageCompose.Plasma_v2/Ops.Gl.ImageCompose.Plasma_v2.js index 0734c2d696..ea03529542 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.Plasma_v2/Ops.Gl.ImageCompose.Plasma_v2.js +++ b/src/ops/base/Ops.Gl.ImageCompose.Plasma_v2/Ops.Gl.ImageCompose.Plasma_v2.js @@ -25,7 +25,7 @@ const op.setPortGroup("Offset Map", [inTexOffsetZ, offsetZ, offsetY, offsetX, inOffsetMul]); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.plasma_frag); CGL.TextureEffect.setupBlending(op, shader, blendMode, amount, maskAlpha); diff --git a/src/ops/base/Ops.Gl.ImageCompose.PolarCoords/Ops.Gl.ImageCompose.PolarCoords.js b/src/ops/base/Ops.Gl.ImageCompose.PolarCoords/Ops.Gl.ImageCompose.PolarCoords.js index 9550c381f1..f187814d75 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.PolarCoords/Ops.Gl.ImageCompose.PolarCoords.js +++ b/src/ops/base/Ops.Gl.ImageCompose.PolarCoords/Ops.Gl.ImageCompose.PolarCoords.js @@ -6,7 +6,7 @@ const trigger = op.outTrigger("trigger"), cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.polarcoords_frag); const diff --git a/src/ops/base/Ops.Gl.ImageCompose.Posterize/Ops.Gl.ImageCompose.Posterize.js b/src/ops/base/Ops.Gl.ImageCompose.Posterize/Ops.Gl.ImageCompose.Posterize.js index 70c651f39c..7431fa0b22 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.Posterize/Ops.Gl.ImageCompose.Posterize.js +++ b/src/ops/base/Ops.Gl.ImageCompose.Posterize/Ops.Gl.ImageCompose.Posterize.js @@ -7,7 +7,7 @@ const const cgl = op.patch.cgl, - shader = new CGL.Shader(cgl, op.name); + shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.posterize_frag); diff --git a/src/ops/base/Ops.Gl.ImageCompose.Posterize_v2/Ops.Gl.ImageCompose.Posterize_v2.js b/src/ops/base/Ops.Gl.ImageCompose.Posterize_v2/Ops.Gl.ImageCompose.Posterize_v2.js index 92e586908c..a59038434e 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.Posterize_v2/Ops.Gl.ImageCompose.Posterize_v2.js +++ b/src/ops/base/Ops.Gl.ImageCompose.Posterize_v2/Ops.Gl.ImageCompose.Posterize_v2.js @@ -7,7 +7,7 @@ const const cgl = op.patch.cgl, - shader = new CGL.Shader(cgl, op.name); + shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.posterize_frag); diff --git a/src/ops/base/Ops.Gl.ImageCompose.PseudoLensFlares/Ops.Gl.ImageCompose.PseudoLensFlares.js b/src/ops/base/Ops.Gl.ImageCompose.PseudoLensFlares/Ops.Gl.ImageCompose.PseudoLensFlares.js index 2f8c635fb3..243e7b7dc8 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.PseudoLensFlares/Ops.Gl.ImageCompose.PseudoLensFlares.js +++ b/src/ops/base/Ops.Gl.ImageCompose.PseudoLensFlares/Ops.Gl.ImageCompose.PseudoLensFlares.js @@ -11,7 +11,7 @@ const render = op.inTrigger("render"), const cgl = op.patch.cgl, - shader = new CGL.Shader(cgl, op.name); + shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.lensflares_frag || ""); diff --git a/src/ops/base/Ops.Gl.ImageCompose.RemoveAlpha/Ops.Gl.ImageCompose.RemoveAlpha.js b/src/ops/base/Ops.Gl.ImageCompose.RemoveAlpha/Ops.Gl.ImageCompose.RemoveAlpha.js index 4904040c24..e658edcde7 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.RemoveAlpha/Ops.Gl.ImageCompose.RemoveAlpha.js +++ b/src/ops/base/Ops.Gl.ImageCompose.RemoveAlpha/Ops.Gl.ImageCompose.RemoveAlpha.js @@ -2,7 +2,7 @@ const render = op.inTrigger("render"); const trigger = op.outTrigger("trigger"); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); const srcFrag = "" diff --git a/src/ops/base/Ops.Gl.ImageCompose.RepeatTexture/Ops.Gl.ImageCompose.RepeatTexture.js b/src/ops/base/Ops.Gl.ImageCompose.RepeatTexture/Ops.Gl.ImageCompose.RepeatTexture.js index c68791838c..9fb3373b27 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.RepeatTexture/Ops.Gl.ImageCompose.RepeatTexture.js +++ b/src/ops/base/Ops.Gl.ImageCompose.RepeatTexture/Ops.Gl.ImageCompose.RepeatTexture.js @@ -7,7 +7,7 @@ const trigger = op.outTrigger("trigger"); const mulTex = op.inTexture("Multiply"); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.repeat_frag); diff --git a/src/ops/base/Ops.Gl.ImageCompose.RepeatTexture_v2/Ops.Gl.ImageCompose.RepeatTexture_v2.js b/src/ops/base/Ops.Gl.ImageCompose.RepeatTexture_v2/Ops.Gl.ImageCompose.RepeatTexture_v2.js index 3c22e42b73..2930037c39 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.RepeatTexture_v2/Ops.Gl.ImageCompose.RepeatTexture_v2.js +++ b/src/ops/base/Ops.Gl.ImageCompose.RepeatTexture_v2/Ops.Gl.ImageCompose.RepeatTexture_v2.js @@ -9,7 +9,7 @@ const mulTex = op.inTexture("Multiply"); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.repeat_frag); diff --git a/src/ops/base/Ops.Gl.ImageCompose.RgbMultiply/Ops.Gl.ImageCompose.RgbMultiply.js b/src/ops/base/Ops.Gl.ImageCompose.RgbMultiply/Ops.Gl.ImageCompose.RgbMultiply.js index e86c5345a7..bd131b46ab 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.RgbMultiply/Ops.Gl.ImageCompose.RgbMultiply.js +++ b/src/ops/base/Ops.Gl.ImageCompose.RgbMultiply/Ops.Gl.ImageCompose.RgbMultiply.js @@ -5,7 +5,7 @@ const b = op.inValue("b", 1); const trigger = op.outTrigger("trigger"); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.rgbmul_frag); const textureUniform = new CGL.Uniform(shader, "t", "tex", 0); diff --git a/src/ops/base/Ops.Gl.ImageCompose.RgbToHsvTexture/Ops.Gl.ImageCompose.RgbToHsvTexture.js b/src/ops/base/Ops.Gl.ImageCompose.RgbToHsvTexture/Ops.Gl.ImageCompose.RgbToHsvTexture.js index 0e645f2ed5..b2108deb39 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.RgbToHsvTexture/Ops.Gl.ImageCompose.RgbToHsvTexture.js +++ b/src/ops/base/Ops.Gl.ImageCompose.RgbToHsvTexture/Ops.Gl.ImageCompose.RgbToHsvTexture.js @@ -3,7 +3,7 @@ const inMeth = op.inSwitch("Output RGB", ["HSB", "Hue", "Sat", "Bright", "Sat*Bright"], "HSB"), trigger = op.outTrigger("trigger"), cgl = op.patch.cgl, - shader = new CGL.Shader(cgl, op.name); + shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.tonormal_frag); let textureUniform = new CGL.Uniform(shader, "t", "tex", 0); diff --git a/src/ops/base/Ops.Gl.ImageCompose.RotateTexture/Ops.Gl.ImageCompose.RotateTexture.js b/src/ops/base/Ops.Gl.ImageCompose.RotateTexture/Ops.Gl.ImageCompose.RotateTexture.js index 2ae2d7ec87..58a70b4420 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.RotateTexture/Ops.Gl.ImageCompose.RotateTexture.js +++ b/src/ops/base/Ops.Gl.ImageCompose.RotateTexture/Ops.Gl.ImageCompose.RotateTexture.js @@ -7,7 +7,7 @@ const render = op.inTrigger("render"), trigger = op.outTrigger("trigger"); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, "rotatetexture"); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.rotate_frag); diff --git a/src/ops/base/Ops.Gl.ImageCompose.RotateTexture_v2/Ops.Gl.ImageCompose.RotateTexture_v2.js b/src/ops/base/Ops.Gl.ImageCompose.RotateTexture_v2/Ops.Gl.ImageCompose.RotateTexture_v2.js index 706147d925..462dbbd0a4 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.RotateTexture_v2/Ops.Gl.ImageCompose.RotateTexture_v2.js +++ b/src/ops/base/Ops.Gl.ImageCompose.RotateTexture_v2/Ops.Gl.ImageCompose.RotateTexture_v2.js @@ -8,7 +8,7 @@ const render = op.inTrigger("render"), trigger = op.outTrigger("trigger"); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, "rotatetexture"); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.rotate_frag); diff --git a/src/ops/base/Ops.Gl.ImageCompose.RoundCorners/Ops.Gl.ImageCompose.RoundCorners.js b/src/ops/base/Ops.Gl.ImageCompose.RoundCorners/Ops.Gl.ImageCompose.RoundCorners.js index c6771faf9e..4ad5a06ba3 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.RoundCorners/Ops.Gl.ImageCompose.RoundCorners.js +++ b/src/ops/base/Ops.Gl.ImageCompose.RoundCorners/Ops.Gl.ImageCompose.RoundCorners.js @@ -8,7 +8,7 @@ const next = op.outTrigger("next"); let cgl = op.patch.cgl; -let shader = new CGL.Shader(cgl, op.name); +let shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.roundcorners_frag); let textureUniform = new CGL.Uniform(shader, "t", "tex", 0); radius.uniform = new CGL.Uniform(shader, "f", "radius", radius); diff --git a/src/ops/base/Ops.Gl.ImageCompose.ScaleTexture/Ops.Gl.ImageCompose.ScaleTexture.js b/src/ops/base/Ops.Gl.ImageCompose.ScaleTexture/Ops.Gl.ImageCompose.ScaleTexture.js index 3adf24e978..b691e5ef2f 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.ScaleTexture/Ops.Gl.ImageCompose.ScaleTexture.js +++ b/src/ops/base/Ops.Gl.ImageCompose.ScaleTexture/Ops.Gl.ImageCompose.ScaleTexture.js @@ -12,7 +12,7 @@ const trigger = op.outTrigger("trigger"); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.scale_frag); diff --git a/src/ops/base/Ops.Gl.ImageCompose.ScaleTexture_v2/Ops.Gl.ImageCompose.ScaleTexture_v2.js b/src/ops/base/Ops.Gl.ImageCompose.ScaleTexture_v2/Ops.Gl.ImageCompose.ScaleTexture_v2.js index d3320ee1b3..63316eb4fe 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.ScaleTexture_v2/Ops.Gl.ImageCompose.ScaleTexture_v2.js +++ b/src/ops/base/Ops.Gl.ImageCompose.ScaleTexture_v2/Ops.Gl.ImageCompose.ScaleTexture_v2.js @@ -13,7 +13,7 @@ const trigger = op.outTrigger("trigger"); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.scale_frag); diff --git a/src/ops/base/Ops.Gl.ImageCompose.ScrollTexture/Ops.Gl.ImageCompose.ScrollTexture.js b/src/ops/base/Ops.Gl.ImageCompose.ScrollTexture/Ops.Gl.ImageCompose.ScrollTexture.js index 008c19b26a..41629b0930 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.ScrollTexture/Ops.Gl.ImageCompose.ScrollTexture.js +++ b/src/ops/base/Ops.Gl.ImageCompose.ScrollTexture/Ops.Gl.ImageCompose.ScrollTexture.js @@ -9,7 +9,7 @@ const repeat.onChange = updateRepeat; const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.scroll_frag); const diff --git a/src/ops/base/Ops.Gl.ImageCompose.Shapes2d/Ops.Gl.ImageCompose.Shapes2d.js b/src/ops/base/Ops.Gl.ImageCompose.Shapes2d/Ops.Gl.ImageCompose.Shapes2d.js index 688b3d584a..a5d6cd1773 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.Shapes2d/Ops.Gl.ImageCompose.Shapes2d.js +++ b/src/ops/base/Ops.Gl.ImageCompose.Shapes2d/Ops.Gl.ImageCompose.Shapes2d.js @@ -78,7 +78,7 @@ op.init = shapeSelect.onChange = function () }; const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.shapes_frag); diff --git a/src/ops/base/Ops.Gl.ImageCompose.Shapes2d_v2/Ops.Gl.ImageCompose.Shapes2d_v2.js b/src/ops/base/Ops.Gl.ImageCompose.Shapes2d_v2/Ops.Gl.ImageCompose.Shapes2d_v2.js index c7807104ef..28fb56e2f8 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.Shapes2d_v2/Ops.Gl.ImageCompose.Shapes2d_v2.js +++ b/src/ops/base/Ops.Gl.ImageCompose.Shapes2d_v2/Ops.Gl.ImageCompose.Shapes2d_v2.js @@ -80,7 +80,7 @@ op.init = shapeSelect.onChange = function () }; const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.shapes_frag); diff --git a/src/ops/base/Ops.Gl.ImageCompose.Sharpen/Ops.Gl.ImageCompose.Sharpen.js b/src/ops/base/Ops.Gl.ImageCompose.Sharpen/Ops.Gl.ImageCompose.Sharpen.js index d4606e50c4..8ca2a0232a 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.Sharpen/Ops.Gl.ImageCompose.Sharpen.js +++ b/src/ops/base/Ops.Gl.ImageCompose.Sharpen/Ops.Gl.ImageCompose.Sharpen.js @@ -3,7 +3,7 @@ const trigger = op.outTrigger("Trigger"); const amount = op.inValueSlider("amount", 0.5); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.sharpen_frag); const textureUniform = new CGL.Uniform(shader, "t", "tex", 0); diff --git a/src/ops/base/Ops.Gl.ImageCompose.TextureDifference/Ops.Gl.ImageCompose.TextureDifference.js b/src/ops/base/Ops.Gl.ImageCompose.TextureDifference/Ops.Gl.ImageCompose.TextureDifference.js index 8794f950b7..5f3b59f8fe 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.TextureDifference/Ops.Gl.ImageCompose.TextureDifference.js +++ b/src/ops/base/Ops.Gl.ImageCompose.TextureDifference/Ops.Gl.ImageCompose.TextureDifference.js @@ -5,7 +5,7 @@ const texture2 = op.inTexture("Texture 2"); const trigger = op.outTrigger("Next"); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.tex_difference_frag); const textureUniform = new CGL.Uniform(shader, "t", "tex", 0); diff --git a/src/ops/base/Ops.Gl.ImageCompose.ToNormalMap/Ops.Gl.ImageCompose.ToNormalMap.js b/src/ops/base/Ops.Gl.ImageCompose.ToNormalMap/Ops.Gl.ImageCompose.ToNormalMap.js index ea83665a56..63f5172c43 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.ToNormalMap/Ops.Gl.ImageCompose.ToNormalMap.js +++ b/src/ops/base/Ops.Gl.ImageCompose.ToNormalMap/Ops.Gl.ImageCompose.ToNormalMap.js @@ -2,7 +2,7 @@ let render = op.inTrigger("render"); let trigger = op.outTrigger("trigger"); let strength = op.inValue("Strength", 4); let cgl = op.patch.cgl; -let shader = new CGL.Shader(cgl, op.name); +let shader = new CGL.Shader(cgl, op.name, op); // from: https://forum.openframeworks.cc/t/compute-normal-map-from-image/1400/11 diff --git a/src/ops/base/Ops.Gl.ImageCompose.ToNormalMap_v2/Ops.Gl.ImageCompose.ToNormalMap_v2.js b/src/ops/base/Ops.Gl.ImageCompose.ToNormalMap_v2/Ops.Gl.ImageCompose.ToNormalMap_v2.js index b2a6c4e73e..6a458f39f1 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.ToNormalMap_v2/Ops.Gl.ImageCompose.ToNormalMap_v2.js +++ b/src/ops/base/Ops.Gl.ImageCompose.ToNormalMap_v2/Ops.Gl.ImageCompose.ToNormalMap_v2.js @@ -6,7 +6,7 @@ const const cgl = op.patch.cgl, - shader = new CGL.Shader(cgl, op.name); + shader = new CGL.Shader(cgl, op.name, op); // from: https://forum.openframeworks.cc/t/compute-normal-map-from-image/1400/11 shader.setSource(shader.getDefaultVertexShader(), attachments.tonormal_frag); diff --git a/src/ops/base/Ops.Gl.ImageCompose.Twirl_v2/Ops.Gl.ImageCompose.Twirl_v2.js b/src/ops/base/Ops.Gl.ImageCompose.Twirl_v2/Ops.Gl.ImageCompose.Twirl_v2.js index 89da2d3aab..a23760d931 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.Twirl_v2/Ops.Gl.ImageCompose.Twirl_v2.js +++ b/src/ops/base/Ops.Gl.ImageCompose.Twirl_v2/Ops.Gl.ImageCompose.Twirl_v2.js @@ -6,7 +6,7 @@ let centerY = op.inValue("Center Y", 0.5); let trigger = op.outTrigger("Next"); let cgl = op.patch.cgl; -let shader = new CGL.Shader(cgl, op.name); +let shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.twirl_frag); let textureUniform = new CGL.Uniform(shader, "t", "tex", 0); diff --git a/src/ops/base/Ops.Gl.ImageCompose.Twirl_v3/Ops.Gl.ImageCompose.Twirl_v3.js b/src/ops/base/Ops.Gl.ImageCompose.Twirl_v3/Ops.Gl.ImageCompose.Twirl_v3.js index cc2f7b931c..33d8fe2d95 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.Twirl_v3/Ops.Gl.ImageCompose.Twirl_v3.js +++ b/src/ops/base/Ops.Gl.ImageCompose.Twirl_v3/Ops.Gl.ImageCompose.Twirl_v3.js @@ -8,7 +8,7 @@ const render = op.inTrigger("Render"), trigger = op.outTrigger("Next"); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.twirl_frag); diff --git a/src/ops/base/Ops.Gl.ImageCompose.Twirl_v4/Ops.Gl.ImageCompose.Twirl_v4.js b/src/ops/base/Ops.Gl.ImageCompose.Twirl_v4/Ops.Gl.ImageCompose.Twirl_v4.js index 68c44cd926..5047d514ab 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.Twirl_v4/Ops.Gl.ImageCompose.Twirl_v4.js +++ b/src/ops/base/Ops.Gl.ImageCompose.Twirl_v4/Ops.Gl.ImageCompose.Twirl_v4.js @@ -8,7 +8,7 @@ const render = op.inTrigger("Render"), trigger = op.outTrigger("Next"); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.twirl_frag); diff --git a/src/ops/base/Ops.Gl.ImageCompose.Vibrance/Ops.Gl.ImageCompose.Vibrance.js b/src/ops/base/Ops.Gl.ImageCompose.Vibrance/Ops.Gl.ImageCompose.Vibrance.js index fb83f22a88..3c13323841 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.Vibrance/Ops.Gl.ImageCompose.Vibrance.js +++ b/src/ops/base/Ops.Gl.ImageCompose.Vibrance/Ops.Gl.ImageCompose.Vibrance.js @@ -3,7 +3,7 @@ const trigger = op.outTrigger("Trigger"); const amount = op.inValue("amount", 2); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.vibrance_frag); const textureUniform = new CGL.Uniform(shader, "t", "tex", 0); diff --git a/src/ops/base/Ops.Gl.ImageCompose.Vignette/Ops.Gl.ImageCompose.Vignette.js b/src/ops/base/Ops.Gl.ImageCompose.Vignette/Ops.Gl.ImageCompose.Vignette.js index 7a2e604037..97ef5bdb2f 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.Vignette/Ops.Gl.ImageCompose.Vignette.js +++ b/src/ops/base/Ops.Gl.ImageCompose.Vignette/Ops.Gl.ImageCompose.Vignette.js @@ -13,7 +13,7 @@ const b = op.inValueSlider("b", Math.random()); r.setUiAttribs({ "colorPick": true }); let cgl = op.patch.cgl; -let shader = new CGL.Shader(cgl, op.name); +let shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.vignette_frag); let textureUniform = new CGL.Uniform(shader, "t", "tex", 0); diff --git a/src/ops/base/Ops.Gl.ImageCompose.WaveformGradient/Ops.Gl.ImageCompose.WaveformGradient.js b/src/ops/base/Ops.Gl.ImageCompose.WaveformGradient/Ops.Gl.ImageCompose.WaveformGradient.js index e5a05d0f54..5eb8f0bb3f 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.WaveformGradient/Ops.Gl.ImageCompose.WaveformGradient.js +++ b/src/ops/base/Ops.Gl.ImageCompose.WaveformGradient/Ops.Gl.ImageCompose.WaveformGradient.js @@ -18,7 +18,7 @@ op.setPortGroup("Color", [r, g, b]); r.setUiAttribs({ "colorPick": true }); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.waveform_frag); diff --git a/src/ops/base/Ops.Gl.ImageCompose.WaveformGradient_v2/Ops.Gl.ImageCompose.WaveformGradient_v2.js b/src/ops/base/Ops.Gl.ImageCompose.WaveformGradient_v2/Ops.Gl.ImageCompose.WaveformGradient_v2.js index df793c7125..d4a137d534 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.WaveformGradient_v2/Ops.Gl.ImageCompose.WaveformGradient_v2.js +++ b/src/ops/base/Ops.Gl.ImageCompose.WaveformGradient_v2/Ops.Gl.ImageCompose.WaveformGradient_v2.js @@ -18,7 +18,7 @@ op.setPortGroup("Color", [r, g, b]); r.setUiAttribs({ "colorPick": true }); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.waveform_v2_frag); diff --git a/src/ops/base/Ops.Gl.ImageCompose.WaveformGradient_v3/Ops.Gl.ImageCompose.WaveformGradient_v3.js b/src/ops/base/Ops.Gl.ImageCompose.WaveformGradient_v3/Ops.Gl.ImageCompose.WaveformGradient_v3.js index f8b8cb9400..eacbe2c057 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.WaveformGradient_v3/Ops.Gl.ImageCompose.WaveformGradient_v3.js +++ b/src/ops/base/Ops.Gl.ImageCompose.WaveformGradient_v3/Ops.Gl.ImageCompose.WaveformGradient_v3.js @@ -18,7 +18,7 @@ op.setPortGroup("Color", [r, g, b]); r.setUiAttribs({ "colorPick": true }); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.waveform_v2_frag); diff --git a/src/ops/base/Ops.Gl.ImageCompose.WaveformGradient_v4/Ops.Gl.ImageCompose.WaveformGradient_v4.js b/src/ops/base/Ops.Gl.ImageCompose.WaveformGradient_v4/Ops.Gl.ImageCompose.WaveformGradient_v4.js index f8b8cb9400..eacbe2c057 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.WaveformGradient_v4/Ops.Gl.ImageCompose.WaveformGradient_v4.js +++ b/src/ops/base/Ops.Gl.ImageCompose.WaveformGradient_v4/Ops.Gl.ImageCompose.WaveformGradient_v4.js @@ -18,7 +18,7 @@ op.setPortGroup("Color", [r, g, b]); r.setUiAttribs({ "colorPick": true }); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.waveform_v2_frag); diff --git a/src/ops/base/Ops.Gl.ImageCompose.Waveform_v2/Ops.Gl.ImageCompose.Waveform_v2.js b/src/ops/base/Ops.Gl.ImageCompose.Waveform_v2/Ops.Gl.ImageCompose.Waveform_v2.js index b63adf17b6..bcd3647cfc 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.Waveform_v2/Ops.Gl.ImageCompose.Waveform_v2.js +++ b/src/ops/base/Ops.Gl.ImageCompose.Waveform_v2/Ops.Gl.ImageCompose.Waveform_v2.js @@ -21,7 +21,7 @@ const trigger = op.outTrigger("trigger"); r.setUiAttribs({ "colorPick": true }); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.wave_v2_frag); diff --git a/src/ops/base/Ops.Gl.ImageCompose.Waveform_v3/Ops.Gl.ImageCompose.Waveform_v3.js b/src/ops/base/Ops.Gl.ImageCompose.Waveform_v3/Ops.Gl.ImageCompose.Waveform_v3.js index 46ab427502..fc35e546b6 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.Waveform_v3/Ops.Gl.ImageCompose.Waveform_v3.js +++ b/src/ops/base/Ops.Gl.ImageCompose.Waveform_v3/Ops.Gl.ImageCompose.Waveform_v3.js @@ -22,7 +22,7 @@ const trigger = op.outTrigger("trigger"); r.setUiAttribs({ "colorPick": true }); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.wave_v2_frag); diff --git a/src/ops/base/Ops.Gl.ImageCompose.Wobble/Ops.Gl.ImageCompose.Wobble.js b/src/ops/base/Ops.Gl.ImageCompose.Wobble/Ops.Gl.ImageCompose.Wobble.js index 9f64b8082f..d93c1f8470 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.Wobble/Ops.Gl.ImageCompose.Wobble.js +++ b/src/ops/base/Ops.Gl.ImageCompose.Wobble/Ops.Gl.ImageCompose.Wobble.js @@ -12,7 +12,7 @@ const trigger = op.outTrigger("Trigger"); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.wobble_frag); const textureUniform = new CGL.Uniform(shader, "t", "tex", 0); diff --git a/src/ops/base/Ops.Gl.ImageCompose.Wobble_v2/Ops.Gl.ImageCompose.Wobble_v2.js b/src/ops/base/Ops.Gl.ImageCompose.Wobble_v2/Ops.Gl.ImageCompose.Wobble_v2.js index 151e6da864..43bfe486cf 100644 --- a/src/ops/base/Ops.Gl.ImageCompose.Wobble_v2/Ops.Gl.ImageCompose.Wobble_v2.js +++ b/src/ops/base/Ops.Gl.ImageCompose.Wobble_v2/Ops.Gl.ImageCompose.Wobble_v2.js @@ -17,7 +17,7 @@ const op.setPortGroup("Amount Map", [inMaskTex, inMaskSource, inMaskInv]); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(shader.getDefaultVertexShader(), attachments.wobble_frag); const textureUniform = new CGL.Uniform(shader, "t", "tex", 0), diff --git a/src/ops/base/Ops.Gl.Matrix.ArrayPathFollowParticles_v2/Ops.Gl.Matrix.ArrayPathFollowParticles_v2.js b/src/ops/base/Ops.Gl.Matrix.ArrayPathFollowParticles_v2/Ops.Gl.Matrix.ArrayPathFollowParticles_v2.js index 368c222fdf..db046646da 100644 --- a/src/ops/base/Ops.Gl.Matrix.ArrayPathFollowParticles_v2/Ops.Gl.Matrix.ArrayPathFollowParticles_v2.js +++ b/src/ops/base/Ops.Gl.Matrix.ArrayPathFollowParticles_v2/Ops.Gl.Matrix.ArrayPathFollowParticles_v2.js @@ -17,7 +17,7 @@ let needsRebuild = true; let geom = null; let updateUniformPoints = false; -const mod = new CGL.ShaderModifier(cgl, op.name); +const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); mod.addModule({ "title": op.objName, "name": "MODULE_VERTEX_POSITION", diff --git a/src/ops/base/Ops.Gl.MeshInstancer_v4/Ops.Gl.MeshInstancer_v4.js b/src/ops/base/Ops.Gl.MeshInstancer_v4/Ops.Gl.MeshInstancer_v4.js index 1914936c5f..18ffafcdf0 100644 --- a/src/ops/base/Ops.Gl.MeshInstancer_v4/Ops.Gl.MeshInstancer_v4.js +++ b/src/ops/base/Ops.Gl.MeshInstancer_v4/Ops.Gl.MeshInstancer_v4.js @@ -34,7 +34,7 @@ let arrayChangedTexcoords = true, arrayChangedTrans = true; -const mod = new CGL.ShaderModifier(cgl, op.name); +const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); mod.addModule({ "name": "MODULE_VERTEX_POSITION", "title": op.name, @@ -166,12 +166,11 @@ function setupArray() { mat4.identity(m); - mat4.translate(m, m, - [ - transforms[i * 3], - transforms[i * 3 + 1], - transforms[i * 3 + 2] - ]); + mat4.translate(m, m, [ + transforms[i * 3], + transforms[i * 3 + 1], + transforms[i * 3 + 2] + ]); if (rotArr) { diff --git a/src/ops/base/Ops.Gl.MeshMorph/Ops.Gl.MeshMorph.js b/src/ops/base/Ops.Gl.MeshMorph/Ops.Gl.MeshMorph.js index 15f07a1bc5..c7591c994e 100644 --- a/src/ops/base/Ops.Gl.MeshMorph/Ops.Gl.MeshMorph.js +++ b/src/ops/base/Ops.Gl.MeshMorph/Ops.Gl.MeshMorph.js @@ -37,7 +37,7 @@ const srcBodyVert = "" .endl(); -const mod = new CGL.ShaderModifier(cgl, op.name); +const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); mod.addUniform("f", "MOD_fade", 1); mod.addUniform("f", "MOD_doMorph", 1); mod.addModule({ @@ -131,12 +131,11 @@ function updateGeom() anim.clear(); anim.setValue(op.patch.freeTimer.get(), 0); - anim.setValue(op.patch.freeTimer.get() + duration.get(), 1, - function () - { - oldGeom = getGeom; - finished.set(true); - }); + anim.setValue(op.patch.freeTimer.get() + duration.get(), 1, function () + { + oldGeom = getGeom; + finished.set(true); + }); finished.set(false); geom1 = inGeoms[oldGeom].get(); diff --git a/src/ops/base/Ops.Gl.Meshes.FloorGrid/Ops.Gl.Meshes.FloorGrid.js b/src/ops/base/Ops.Gl.Meshes.FloorGrid/Ops.Gl.Meshes.FloorGrid.js index 560766fbf7..ff0ee0a67d 100644 --- a/src/ops/base/Ops.Gl.Meshes.FloorGrid/Ops.Gl.Meshes.FloorGrid.js +++ b/src/ops/base/Ops.Gl.Meshes.FloorGrid/Ops.Gl.Meshes.FloorGrid.js @@ -8,7 +8,7 @@ const num = 100; const cgl = op.patch.cgl; let mesh = null; -const shader = new CGL.Shader(cgl, "gridMaterial"); +const shader = new CGL.Shader(cgl, "gridMaterial", this); shader.setSource(attachments.grid_vert, attachments.grid_frag); function init() diff --git a/src/ops/base/Ops.Gl.Meshes.FullscreenRectangle/Ops.Gl.Meshes.FullscreenRectangle.js b/src/ops/base/Ops.Gl.Meshes.FullscreenRectangle/Ops.Gl.Meshes.FullscreenRectangle.js index b204964829..dee6639e3b 100644 --- a/src/ops/base/Ops.Gl.Meshes.FullscreenRectangle/Ops.Gl.Meshes.FullscreenRectangle.js +++ b/src/ops/base/Ops.Gl.Meshes.FullscreenRectangle/Ops.Gl.Meshes.FullscreenRectangle.js @@ -20,7 +20,7 @@ render.onTriggered = doRender; inTexture.onLinkChanged = updateUi; inScale.onChange = updateScale; -const shader = new CGL.Shader(cgl, "fullscreenrectangle"); +const shader = new CGL.Shader(cgl, "fullscreenrectangle", this); shader.setModules(["MODULE_VERTEX_POSITION", "MODULE_COLOR", "MODULE_BEGIN_FRAG"]); shader.setSource(attachments.shader_vert, attachments.shader_frag); diff --git a/src/ops/base/Ops.Gl.Meshes.FullscreenRectangle_v2/Ops.Gl.Meshes.FullscreenRectangle_v2.js b/src/ops/base/Ops.Gl.Meshes.FullscreenRectangle_v2/Ops.Gl.Meshes.FullscreenRectangle_v2.js index 8c7a5f01aa..db3cbe1fb1 100644 --- a/src/ops/base/Ops.Gl.Meshes.FullscreenRectangle_v2/Ops.Gl.Meshes.FullscreenRectangle_v2.js +++ b/src/ops/base/Ops.Gl.Meshes.FullscreenRectangle_v2/Ops.Gl.Meshes.FullscreenRectangle_v2.js @@ -20,7 +20,7 @@ render.onTriggered = doRender; inTexture.onLinkChanged = updateUi; inScale.onChange = updateScale; -const shader = new CGL.Shader(cgl, "fullscreenrectangle"); +const shader = new CGL.Shader(cgl, "fullscreenrectangle", this); shader.setModules(["MODULE_VERTEX_POSITION", "MODULE_COLOR", "MODULE_BEGIN_FRAG"]); shader.setSource(attachments.shader_vert, attachments.shader_frag); diff --git a/src/ops/base/Ops.Gl.Meshes.GeometryToTexture/Ops.Gl.Meshes.GeometryToTexture.js b/src/ops/base/Ops.Gl.Meshes.GeometryToTexture/Ops.Gl.Meshes.GeometryToTexture.js index 22a182889c..dd7437d962 100644 --- a/src/ops/base/Ops.Gl.Meshes.GeometryToTexture/Ops.Gl.Meshes.GeometryToTexture.js +++ b/src/ops/base/Ops.Gl.Meshes.GeometryToTexture/Ops.Gl.Meshes.GeometryToTexture.js @@ -34,7 +34,7 @@ updateUI(); const drawBuffArr = [true, true]; const vertModTitle = "vert_" + op.name; -const mod = new CGL.ShaderModifier(cgl, op.name); +const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); mod.addModule({ "priority": 200, "title": vertModTitle, @@ -135,25 +135,23 @@ function initFb() if (cgl.glVersion >= 2) { - fb = new CGL.Framebuffer2(cgl, w, h, - { - "isFloatingPointTexture": true, - "multisampling": false, - "wrap": selectedWrap, - "filter": filter, - "depth": true, - "multisamplingSamples": 0, - "clear": true - }); + fb = new CGL.Framebuffer2(cgl, w, h, { + "isFloatingPointTexture": true, + "multisampling": false, + "wrap": selectedWrap, + "filter": filter, + "depth": true, + "multisamplingSamples": 0, + "clear": true + }); } else { - fb = new CGL.Framebuffer(cgl, inWidth.get(), inWidth.get(), - { - "isFloatingPointTexture": true, - "filter": filter, - "wrap": selectedWrap - }); + fb = new CGL.Framebuffer(cgl, inWidth.get(), inWidth.get(), { + "isFloatingPointTexture": true, + "filter": filter, + "wrap": selectedWrap + }); } } @@ -187,9 +185,12 @@ exec.onTriggered = function () mat4.ortho( cgl.pMatrix, - 0, inWidth.get(), - 0, inWidth.get(), - -1.00, 100); + 0, + inWidth.get(), + 0, + inWidth.get(), + -1.00, + 100); mod.bind(); diff --git a/src/ops/base/Ops.Gl.Meshes.GeometryToTexture_v2/Ops.Gl.Meshes.GeometryToTexture_v2.js b/src/ops/base/Ops.Gl.Meshes.GeometryToTexture_v2/Ops.Gl.Meshes.GeometryToTexture_v2.js index d125c238a6..22a1ad16ce 100644 --- a/src/ops/base/Ops.Gl.Meshes.GeometryToTexture_v2/Ops.Gl.Meshes.GeometryToTexture_v2.js +++ b/src/ops/base/Ops.Gl.Meshes.GeometryToTexture_v2/Ops.Gl.Meshes.GeometryToTexture_v2.js @@ -50,7 +50,7 @@ inAttrib.onChange = updateAttrib; updateUI(); const vertModTitle = "vert_" + op.name; -const mod = new CGL.ShaderModifier(cgl, op.name); +const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); mod.addModule({ "priority": 200, "title": vertModTitle, @@ -189,27 +189,25 @@ function initFb() if (cgl.glVersion >= 2) { - fb = new CGL.Framebuffer2(cgl, size, size, - { - "name": "geom2tex", - "pixelFormat": inPixelFormat.get(), - "multisampling": false, - "wrap": selectedWrap, - "filter": filter, - "depth": true, - "multisamplingSamples": 0, - "clear": true - }); + fb = new CGL.Framebuffer2(cgl, size, size, { + "name": "geom2tex", + "pixelFormat": inPixelFormat.get(), + "multisampling": false, + "wrap": selectedWrap, + "filter": filter, + "depth": true, + "multisamplingSamples": 0, + "clear": true + }); } else { - fb = new CGL.Framebuffer(cgl, size, size, - { - "name": "geom2tex", - "isFloatingPointTexture": true, - "filter": filter, - "wrap": selectedWrap - }); + fb = new CGL.Framebuffer(cgl, size, size, { + "name": "geom2tex", + "isFloatingPointTexture": true, + "filter": filter, + "wrap": selectedWrap + }); } needInitFb = false; } @@ -304,9 +302,12 @@ function render() mat4.ortho( cgl.pMatrix, - 0, size, - 0, size, - -1.00, 100); + 0, + size, + 0, + size, + -1.00, + 100); mod.bind(); if (!gotBounds) updateRescale(); diff --git a/src/ops/base/Ops.Gl.Meshes.MeshInstancerFromTexture/Ops.Gl.Meshes.MeshInstancerFromTexture.js b/src/ops/base/Ops.Gl.Meshes.MeshInstancerFromTexture/Ops.Gl.Meshes.MeshInstancerFromTexture.js index 4e25e025ba..b1ff8f9490 100644 --- a/src/ops/base/Ops.Gl.Meshes.MeshInstancerFromTexture/Ops.Gl.Meshes.MeshInstancerFromTexture.js +++ b/src/ops/base/Ops.Gl.Meshes.MeshInstancerFromTexture/Ops.Gl.Meshes.MeshInstancerFromTexture.js @@ -28,7 +28,7 @@ let arrayChangedColor = true, arrayChangedTrans = true; -const mod = new CGL.ShaderModifier(cgl, op.name); +const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); mod.addModule({ "name": "MODULE_VERTEX_POSITION", "title": op.name, diff --git a/src/ops/base/Ops.Gl.Meshes.MeshInstancerFromTexture_v2/Ops.Gl.Meshes.MeshInstancerFromTexture_v2.js b/src/ops/base/Ops.Gl.Meshes.MeshInstancerFromTexture_v2/Ops.Gl.Meshes.MeshInstancerFromTexture_v2.js index 4b940b5ed1..808131479d 100644 --- a/src/ops/base/Ops.Gl.Meshes.MeshInstancerFromTexture_v2/Ops.Gl.Meshes.MeshInstancerFromTexture_v2.js +++ b/src/ops/base/Ops.Gl.Meshes.MeshInstancerFromTexture_v2/Ops.Gl.Meshes.MeshInstancerFromTexture_v2.js @@ -33,7 +33,7 @@ let num = 0, arrayChangedTrans = true; -const mod = new CGL.ShaderModifier(cgl, op.name); +const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); mod.addModule({ "name": "MODULE_VERTEX_POSITION", "title": op.name, diff --git a/src/ops/base/Ops.Gl.Meshes.MeshInstancerFromTexture_v3/Ops.Gl.Meshes.MeshInstancerFromTexture_v3.js b/src/ops/base/Ops.Gl.Meshes.MeshInstancerFromTexture_v3/Ops.Gl.Meshes.MeshInstancerFromTexture_v3.js index c03d0d78a1..6bc65143fa 100644 --- a/src/ops/base/Ops.Gl.Meshes.MeshInstancerFromTexture_v3/Ops.Gl.Meshes.MeshInstancerFromTexture_v3.js +++ b/src/ops/base/Ops.Gl.Meshes.MeshInstancerFromTexture_v3/Ops.Gl.Meshes.MeshInstancerFromTexture_v3.js @@ -32,7 +32,7 @@ let num = 0, arrayChangedTrans = true; -const mod = new CGL.ShaderModifier(cgl, op.name); +const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); mod.addModule({ "name": "MODULE_VERTEX_POSITION", "title": op.name, diff --git a/src/ops/base/Ops.Gl.Meshes.PointCloudFromTexture/Ops.Gl.Meshes.PointCloudFromTexture.js b/src/ops/base/Ops.Gl.Meshes.PointCloudFromTexture/Ops.Gl.Meshes.PointCloudFromTexture.js index d65b19f6c9..5dd89d07b5 100644 --- a/src/ops/base/Ops.Gl.Meshes.PointCloudFromTexture/Ops.Gl.Meshes.PointCloudFromTexture.js +++ b/src/ops/base/Ops.Gl.Meshes.PointCloudFromTexture/Ops.Gl.Meshes.PointCloudFromTexture.js @@ -16,7 +16,7 @@ let currentNum = 0; op.toWorkPortsNeedToBeLinked(render, inTex); -const mod = new CGL.ShaderModifier(cgl, op.name); +const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); mod.addModule({ "priority": -10, "title": op.name, diff --git a/src/ops/base/Ops.Gl.Meshes.QuadWarpTexture/Ops.Gl.Meshes.QuadWarpTexture.js b/src/ops/base/Ops.Gl.Meshes.QuadWarpTexture/Ops.Gl.Meshes.QuadWarpTexture.js index 17ffaa27da..4552e4ea41 100644 --- a/src/ops/base/Ops.Gl.Meshes.QuadWarpTexture/Ops.Gl.Meshes.QuadWarpTexture.js +++ b/src/ops/base/Ops.Gl.Meshes.QuadWarpTexture/Ops.Gl.Meshes.QuadWarpTexture.js @@ -21,7 +21,7 @@ let updateShaderLater = true; flipX.onChange = flipY.onChange = rebuildFlip; -const shader = new CGL.Shader(cgl, "fullscreenrectangle"); +const shader = new CGL.Shader(cgl, "fullscreenrectangle", this); shader.setModules(["MODULE_VERTEX_POSITION", "MODULE_COLOR", "MODULE_BEGIN_FRAG"]); shader.setSource(attachments.shader_vert, attachments.shader_frag); shader.fullscreenRectUniform = new CGL.Uniform(shader, "t", "tex", 0); diff --git a/src/ops/base/Ops.Gl.Meshes.SplineMeshMaterial_v2/Ops.Gl.Meshes.SplineMeshMaterial_v2.js b/src/ops/base/Ops.Gl.Meshes.SplineMeshMaterial_v2/Ops.Gl.Meshes.SplineMeshMaterial_v2.js index b84db33f9a..fe69362f2d 100644 --- a/src/ops/base/Ops.Gl.Meshes.SplineMeshMaterial_v2/Ops.Gl.Meshes.SplineMeshMaterial_v2.js +++ b/src/ops/base/Ops.Gl.Meshes.SplineMeshMaterial_v2/Ops.Gl.Meshes.SplineMeshMaterial_v2.js @@ -23,7 +23,7 @@ op.toWorkPortsNeedToBeLinked(render); op.setPortGroup("Color", [r, g, b, a]); op.setPortGroup("Texture", [inTexture, inTexMap, inTexColorize]); -const shader = new CGL.Shader(cgl, "splinemesh_material"); +const shader = new CGL.Shader(cgl, "splinemesh_material", this); shader.setModules(["MODULE_VERTEX_POSITION", "MODULE_COLOR", "MODULE_BEGIN_FRAG"]); shader.setSource(attachments.splinemat_vert, attachments.splinemat_frag); shaderOut.set(shader); diff --git a/src/ops/base/Ops.Gl.Meshes.TextMesh/Ops.Gl.Meshes.TextMesh.js b/src/ops/base/Ops.Gl.Meshes.TextMesh/Ops.Gl.Meshes.TextMesh.js index 1ff895d213..f299e5e562 100644 --- a/src/ops/base/Ops.Gl.Meshes.TextMesh/Ops.Gl.Meshes.TextMesh.js +++ b/src/ops/base/Ops.Gl.Meshes.TextMesh/Ops.Gl.Meshes.TextMesh.js @@ -106,7 +106,7 @@ op.onDelete = function () CABLES.OpTextureMeshCanvas[canvasid].canvas.remove(); }; -const shader = new CGL.Shader(cgl, "TextMesh"); +const shader = new CGL.Shader(cgl, "TextMesh", this); shader.setSource(attachments.textmesh_vert, attachments.textmesh_frag); const uniTex = new CGL.Uniform(shader, "t", "tex", 0); const uniScale = new CGL.Uniform(shader, "f", "scale", scale); @@ -364,10 +364,9 @@ function generateTexture() font.canvas.width = font.canvas.height = textureSize; if (!font.texture) - font.texture = CGL.Texture.createFromImage(cgl, font.canvas, - { - "filter": CGL.Texture.FILTER_MIPMAP - }); + font.texture = CGL.Texture.createFromImage(cgl, font.canvas, { + "filter": CGL.Texture.FILTER_MIPMAP + }); font.texture.setSize(textureSize, textureSize); diff --git a/src/ops/base/Ops.Gl.Meshes.TextMesh_v2/Ops.Gl.Meshes.TextMesh_v2.js b/src/ops/base/Ops.Gl.Meshes.TextMesh_v2/Ops.Gl.Meshes.TextMesh_v2.js index d4210cf78c..295323e937 100644 --- a/src/ops/base/Ops.Gl.Meshes.TextMesh_v2/Ops.Gl.Meshes.TextMesh_v2.js +++ b/src/ops/base/Ops.Gl.Meshes.TextMesh_v2/Ops.Gl.Meshes.TextMesh_v2.js @@ -138,7 +138,7 @@ op.onDelete = function () CABLES.OpTextureMeshCanvas[canvasid].canvas.remove(); }; -const shader = new CGL.Shader(cgl, "TextMesh"); +const shader = new CGL.Shader(cgl, "TextMesh", this); shader.setSource(attachments.textmesh_vert, attachments.textmesh_frag); const uniTex = new CGL.Uniform(shader, "t", "tex", 0); const uniTexMul = new CGL.Uniform(shader, "t", "texMul", 1); @@ -425,11 +425,10 @@ function generateTexture() font.canvas.width = font.canvas.height = textureSize; if (!font.texture) - font.texture = CGL.Texture.createFromImage(cgl, font.canvas, - { - "filter": filter, - "anisotropic": parseFloat(aniso.get()) - }); + font.texture = CGL.Texture.createFromImage(cgl, font.canvas, { + "filter": filter, + "anisotropic": parseFloat(aniso.get()) + }); font.texture.setSize(textureSize, textureSize); diff --git a/src/ops/base/Ops.Gl.Pbr.PbrMaterial/Ops.Gl.Pbr.PbrMaterial.js b/src/ops/base/Ops.Gl.Pbr.PbrMaterial/Ops.Gl.Pbr.PbrMaterial.js index aa547a78ea..08b6d33ed2 100644 --- a/src/ops/base/Ops.Gl.Pbr.PbrMaterial/Ops.Gl.Pbr.PbrMaterial.js +++ b/src/ops/base/Ops.Gl.Pbr.PbrMaterial/Ops.Gl.Pbr.PbrMaterial.js @@ -77,7 +77,7 @@ op.setPortGroup("Tonemapping", [inTonemapping, inTonemappingExposure]); op.setPortGroup("Clear Coat", [inUseClearCoat, inClearCoatIntensity, inClearCoatRoughness, inUseNormalMapForCC, inTexClearCoatNormal]); op.setPortGroup("Thin Film Iridescence", [inUseThinFilm, inThinFilmIntensity, inThinFilmIOR, inThinFilmThickness, inTFThicknessTexMin, inTFThicknessTexMax]); // globals -const PBRShader = new CGL.Shader(cgl, "PBRShader"); +const PBRShader = new CGL.Shader(cgl, "PBRShader", this); PBRShader.setModules(["MODULE_VERTEX_POSITION", "MODULE_COLOR", "MODULE_BEGIN_FRAG"]); // light sources (except IBL) let PBRLightStack = []; diff --git a/src/ops/base/Ops.Gl.Phong.PhongMaterial_v6/Ops.Gl.Phong.PhongMaterial_v6.js b/src/ops/base/Ops.Gl.Phong.PhongMaterial_v6/Ops.Gl.Phong.PhongMaterial_v6.js index 3298b11779..59b8a70430 100644 --- a/src/ops/base/Ops.Gl.Phong.PhongMaterial_v6/Ops.Gl.Phong.PhongMaterial_v6.js +++ b/src/ops/base/Ops.Gl.Phong.PhongMaterial_v6/Ops.Gl.Phong.PhongMaterial_v6.js @@ -242,7 +242,7 @@ const outTrigger = op.outTrigger("Trigger Out"); const shaderOut = op.outObject("Shader", null, "shader"); shaderOut.ignoreValueSerialize = true; -const shader = new CGL.Shader(cgl, "phongmaterial_" + op.id); +const shader = new CGL.Shader(cgl, "phongmaterial_" + op.id, this); shader.op = this; shader.setModules(["MODULE_VERTEX_POSITION", "MODULE_COLOR", "MODULE_BEGIN_FRAG", "MODULE_BASE_COLOR"]); shader.setSource(attachments.simosphong_vert, attachments.simosphong_frag); diff --git a/src/ops/base/Ops.Gl.Shader.AttributeAsColorMaterial/Ops.Gl.Shader.AttributeAsColorMaterial.js b/src/ops/base/Ops.Gl.Shader.AttributeAsColorMaterial/Ops.Gl.Shader.AttributeAsColorMaterial.js index 83f66dd042..89730c2920 100644 --- a/src/ops/base/Ops.Gl.Shader.AttributeAsColorMaterial/Ops.Gl.Shader.AttributeAsColorMaterial.js +++ b/src/ops/base/Ops.Gl.Shader.AttributeAsColorMaterial/Ops.Gl.Shader.AttributeAsColorMaterial.js @@ -7,7 +7,7 @@ const outShader = op.outObject("Shader"); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setSource(attachments.normalsmaterial_vert, attachments.normalsmaterial_frag); outShader.set(shader); diff --git a/src/ops/base/Ops.Gl.Shader.BasicMaterial_v3/Ops.Gl.Shader.BasicMaterial_v3.js b/src/ops/base/Ops.Gl.Shader.BasicMaterial_v3/Ops.Gl.Shader.BasicMaterial_v3.js index 153870d1db..4587b57c00 100644 --- a/src/ops/base/Ops.Gl.Shader.BasicMaterial_v3/Ops.Gl.Shader.BasicMaterial_v3.js +++ b/src/ops/base/Ops.Gl.Shader.BasicMaterial_v3/Ops.Gl.Shader.BasicMaterial_v3.js @@ -9,7 +9,7 @@ op.toWorkPortsNeedToBeLinked(render); op.toWorkShouldNotBeChild("Ops.Gl.TextureEffects.ImageCompose", CABLES.OP_PORT_TYPE_FUNCTION); const cgl = op.patch.cgl; -const shader = new CGL.Shader(cgl, "basicmaterialnew"); +const shader = new CGL.Shader(cgl, "basicmaterialnew", this); shader.addAttribute({ "type": "vec3", "name": "vPosition" }); shader.addAttribute({ "type": "vec2", "name": "attrTexCoord" }); shader.addAttribute({ "type": "vec3", "name": "attrVertNormal", "nameFrag": "norm" }); diff --git a/src/ops/base/Ops.Gl.Shader.CustomShader_v2/Ops.Gl.Shader.CustomShader_v2.js b/src/ops/base/Ops.Gl.Shader.CustomShader_v2/Ops.Gl.Shader.CustomShader_v2.js index 94a52cd7f3..a67c10ee87 100644 --- a/src/ops/base/Ops.Gl.Shader.CustomShader_v2/Ops.Gl.Shader.CustomShader_v2.js +++ b/src/ops/base/Ops.Gl.Shader.CustomShader_v2/Ops.Gl.Shader.CustomShader_v2.js @@ -17,7 +17,7 @@ op.toWorkPortsNeedToBeLinked(render); fragmentShader.setUiAttribs({ "editorSyntax": "glsl" }); vertexShader.setUiAttribs({ "editorSyntax": "glsl" }); -const shader = new CGL.Shader(cgl, op.name); +const shader = new CGL.Shader(cgl, op.name, op); shader.setModules(["MODULE_VERTEX_POSITION", "MODULE_COLOR", "MODULE_BEGIN_FRAG"]); diff --git a/src/ops/base/Ops.Gl.Shader.GetShader/Ops.Gl.Shader.GetShader.js b/src/ops/base/Ops.Gl.Shader.GetShader/Ops.Gl.Shader.GetShader.js index a49fe5bab1..c5522486ec 100644 --- a/src/ops/base/Ops.Gl.Shader.GetShader/Ops.Gl.Shader.GetShader.js +++ b/src/ops/base/Ops.Gl.Shader.GetShader/Ops.Gl.Shader.GetShader.js @@ -4,7 +4,7 @@ const outShader = op.outObject("Shader"); const cgl = op.patch.cgl; -const mod = new CGL.ShaderModifier(cgl, op.name); +const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); mod.addModule({ "priority": 2, diff --git a/src/ops/base/Ops.Gl.Shader.PointMaterial_v3/Ops.Gl.Shader.PointMaterial_v3.js b/src/ops/base/Ops.Gl.Shader.PointMaterial_v3/Ops.Gl.Shader.PointMaterial_v3.js index e64872b3f6..f0a984649f 100644 --- a/src/ops/base/Ops.Gl.Shader.PointMaterial_v3/Ops.Gl.Shader.PointMaterial_v3.js +++ b/src/ops/base/Ops.Gl.Shader.PointMaterial_v3/Ops.Gl.Shader.PointMaterial_v3.js @@ -35,7 +35,7 @@ op.setPortGroup("Color", [r, g, b, a, vertCols]); op.setPortGroup("Size", [pointSize, randomSize, makeRound, makeRoundAA, doScale, inPixelSize, texturePointSize, texturePointSizeMul, texturePointSizeChannel]); r.setUiAttribs({ "colorPick": true }); -const shader = new CGL.Shader(cgl, "PointMaterial"); +const shader = new CGL.Shader(cgl, "PointMaterial", this); shader.setModules(["MODULE_VERTEX_POSITION", "MODULE_COLOR", "MODULE_BEGIN_FRAG"]); shader.define("MAKE_ROUND"); diff --git a/src/ops/base/Ops.Gl.Shader.PointMaterial_v5/Ops.Gl.Shader.PointMaterial_v5.js b/src/ops/base/Ops.Gl.Shader.PointMaterial_v5/Ops.Gl.Shader.PointMaterial_v5.js index a587c88009..0ae7feeddb 100644 --- a/src/ops/base/Ops.Gl.Shader.PointMaterial_v5/Ops.Gl.Shader.PointMaterial_v5.js +++ b/src/ops/base/Ops.Gl.Shader.PointMaterial_v5/Ops.Gl.Shader.PointMaterial_v5.js @@ -41,7 +41,7 @@ op.setPortGroup("Atlas", [inAtlasRepeatX, inAtlasLookupTex, inAtlasXFade]); r.setUiAttribs({ "colorPick": true }); -const shader = new CGL.Shader(cgl, "PointMaterial"); +const shader = new CGL.Shader(cgl, "PointMaterial", this); shader.setModules(["MODULE_VERTEX_POSITION", "MODULE_COLOR", "MODULE_BEGIN_FRAG"]); shader.define("MAKE_ROUND"); diff --git a/src/ops/base/Ops.Gl.ShaderEffects.AreaDiscardPixel_v2/Ops.Gl.ShaderEffects.AreaDiscardPixel_v2.js b/src/ops/base/Ops.Gl.ShaderEffects.AreaDiscardPixel_v2/Ops.Gl.ShaderEffects.AreaDiscardPixel_v2.js index 92d8fced6e..75d448c075 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.AreaDiscardPixel_v2/Ops.Gl.ShaderEffects.AreaDiscardPixel_v2.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.AreaDiscardPixel_v2/Ops.Gl.ShaderEffects.AreaDiscardPixel_v2.js @@ -38,7 +38,7 @@ inInvert.onChange = inRepeat.onChange = inArea.onChange = updateDefines; -const mod = new CGL.ShaderModifier(cgl, op.name); +const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); mod.addModule({ "priority": 2, diff --git a/src/ops/base/Ops.Gl.ShaderEffects.AreaRotate_v2/Ops.Gl.ShaderEffects.AreaRotate_v2.js b/src/ops/base/Ops.Gl.ShaderEffects.AreaRotate_v2/Ops.Gl.ShaderEffects.AreaRotate_v2.js index c74dfb2e06..703238bf60 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.AreaRotate_v2/Ops.Gl.ShaderEffects.AreaRotate_v2.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.AreaRotate_v2/Ops.Gl.ShaderEffects.AreaRotate_v2.js @@ -1,23 +1,23 @@ const - render=op.inTrigger("render"), - inSize=op.inValue("Size",1), - inStrength=op.inValue("Strength",1), - inSmooth=op.inValueBool("Smooth",true), - x=op.inValue("x"), - y=op.inValue("y"), - z=op.inValue("z"), - next=op.outTrigger("trigger"); - -const cgl=op.patch.cgl; -const srcBodyVert='' - .endl()+'pos=MOD_scaler(pos,mMatrix);' + render = op.inTrigger("render"), + inSize = op.inValue("Size", 1), + inStrength = op.inValue("Strength", 1), + inSmooth = op.inValueBool("Smooth", true), + x = op.inValue("x"), + y = op.inValue("y"), + z = op.inValue("z"), + next = op.outTrigger("trigger"); + +const cgl = op.patch.cgl; +const srcBodyVert = "" + .endl() + "pos=MOD_scaler(pos,mMatrix);" .endl(); -const mod = new CGL.ShaderModifier(cgl, op.name); +const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); mod.addModule({ "priority": 2, - "title": "vert"+op.name, + "title": "vert" + op.name, "name": "MODULE_VERTEX_POSITION", "srcHeadVert": attachments.area_rotate_vert, "srcBodyVert": srcBodyVert @@ -32,15 +32,15 @@ mod.addUniform("f", "MOD_strength", inStrength); mod.addUniform("b", "MOD_smooth", inSmooth); -render.onTriggered=function() +render.onTriggered = function () { - if(!cgl.getShader()) + if (!cgl.getShader()) { next.trigger(); return; } - if(op.isCurrentUiOp()) gui.setTransformGizmo( {posX:x,posY:y,posZ:z }); + if (op.isCurrentUiOp()) gui.setTransformGizmo({ "posX": x, "posY": y, "posZ": z }); mod.bind(); next.trigger(); diff --git a/src/ops/base/Ops.Gl.ShaderEffects.AreaScaler_v3/Ops.Gl.ShaderEffects.AreaScaler_v3.js b/src/ops/base/Ops.Gl.ShaderEffects.AreaScaler_v3/Ops.Gl.ShaderEffects.AreaScaler_v3.js index 558abf91b7..cbdbe04207 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.AreaScaler_v3/Ops.Gl.ShaderEffects.AreaScaler_v3.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.AreaScaler_v3/Ops.Gl.ShaderEffects.AreaScaler_v3.js @@ -30,7 +30,7 @@ let moduleVert = null; // op.onDelete = exec.onLinkChanged = removeModule; inToZero.onChange = inSrc.onChange = inClampBool.onChange = updateToZero; -const mod = new CGL.ShaderModifier(cgl, op.name); +const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); mod.addModule({ "priority": 2, "title": "vert_" + op.name, diff --git a/src/ops/base/Ops.Gl.ShaderEffects.AreaTranslateMeshes_v2/Ops.Gl.ShaderEffects.AreaTranslateMeshes_v2.js b/src/ops/base/Ops.Gl.ShaderEffects.AreaTranslateMeshes_v2/Ops.Gl.ShaderEffects.AreaTranslateMeshes_v2.js index a104dad3a5..4d95a15beb 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.AreaTranslateMeshes_v2/Ops.Gl.ShaderEffects.AreaTranslateMeshes_v2.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.AreaTranslateMeshes_v2/Ops.Gl.ShaderEffects.AreaTranslateMeshes_v2.js @@ -27,7 +27,7 @@ const srcBodyVert = "" let moduleVert = null; -const mod = new CGL.ShaderModifier(cgl, op.name); +const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); mod.addModule({ "title": op.name, "name": "MODULE_VERTEX_POSITION", diff --git a/src/ops/base/Ops.Gl.ShaderEffects.AreaTranslateMeshes_v3/Ops.Gl.ShaderEffects.AreaTranslateMeshes_v3.js b/src/ops/base/Ops.Gl.ShaderEffects.AreaTranslateMeshes_v3/Ops.Gl.ShaderEffects.AreaTranslateMeshes_v3.js index 6bf63ae22f..f428fc3bab 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.AreaTranslateMeshes_v3/Ops.Gl.ShaderEffects.AreaTranslateMeshes_v3.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.AreaTranslateMeshes_v3/Ops.Gl.ShaderEffects.AreaTranslateMeshes_v3.js @@ -26,7 +26,7 @@ const srcBodyVert = "" let moduleVert = null; -const mod = new CGL.ShaderModifier(cgl, op.name); +const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); mod.addModule({ "title": op.name, "name": "MODULE_VERTEX_POSITION", diff --git a/src/ops/base/Ops.Gl.ShaderEffects.Bend_v2/Ops.Gl.ShaderEffects.Bend_v2.js b/src/ops/base/Ops.Gl.ShaderEffects.Bend_v2/Ops.Gl.ShaderEffects.Bend_v2.js index bc9ac5a6d7..9fb0669d82 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.Bend_v2/Ops.Gl.ShaderEffects.Bend_v2.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.Bend_v2/Ops.Gl.ShaderEffects.Bend_v2.js @@ -36,7 +36,7 @@ rotZ.onChange = invalidateMatrices; scale.onChange = invalidateMatrices; offset.onChange = invalidateMatrices; -const mod = new CGL.ShaderModifier(cgl, op.name); +const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); mod.addModule({ "name": "MODULE_VERTEX_POSITION", "srcHeadVert": attachments.bend_vert, diff --git a/src/ops/base/Ops.Gl.ShaderEffects.ClampVertexPosition_v2/Ops.Gl.ShaderEffects.ClampVertexPosition_v2.js b/src/ops/base/Ops.Gl.ShaderEffects.ClampVertexPosition_v2/Ops.Gl.ShaderEffects.ClampVertexPosition_v2.js index 492a1650c9..df0e403088 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.ClampVertexPosition_v2/Ops.Gl.ShaderEffects.ClampVertexPosition_v2.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.ClampVertexPosition_v2/Ops.Gl.ShaderEffects.ClampVertexPosition_v2.js @@ -12,7 +12,7 @@ let shader = null; let moduleVert = null; const vertModTitle = "vert_" + op.name; -const mod = new CGL.ShaderModifier(cgl, op.name); +const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); mod.addModule({ "priority": 2, "title": vertModTitle, diff --git a/src/ops/base/Ops.Gl.ShaderEffects.ColorArea_v3/Ops.Gl.ShaderEffects.ColorArea_v3.js b/src/ops/base/Ops.Gl.ShaderEffects.ColorArea_v3/Ops.Gl.ShaderEffects.ColorArea_v3.js index c0bac581c9..0e5b4db1d8 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.ColorArea_v3/Ops.Gl.ShaderEffects.ColorArea_v3.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.ColorArea_v3/Ops.Gl.ShaderEffects.ColorArea_v3.js @@ -56,7 +56,7 @@ inWorldSpace.onChange = render.onTriggered = doRender; const vertModTitle = "vert_" + op.name; -const mod = new CGL.ShaderModifier(cgl, op.name); +const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); mod.addModule({ "priority": 2, "title": vertModTitle, diff --git a/src/ops/base/Ops.Gl.ShaderEffects.ColorArea_v4/Ops.Gl.ShaderEffects.ColorArea_v4.js b/src/ops/base/Ops.Gl.ShaderEffects.ColorArea_v4/Ops.Gl.ShaderEffects.ColorArea_v4.js index 17c8243ecf..193bfc5e79 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.ColorArea_v4/Ops.Gl.ShaderEffects.ColorArea_v4.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.ColorArea_v4/Ops.Gl.ShaderEffects.ColorArea_v4.js @@ -53,7 +53,7 @@ inWorldSpace.onChange = render.onTriggered = doRender; const vertModTitle = "vert_" + op.name; -const mod = new CGL.ShaderModifier(cgl, op.name); +const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); mod.addModule({ "priority": 2, "title": vertModTitle, diff --git a/src/ops/base/Ops.Gl.ShaderEffects.ColorArea_v5/Ops.Gl.ShaderEffects.ColorArea_v5.js b/src/ops/base/Ops.Gl.ShaderEffects.ColorArea_v5/Ops.Gl.ShaderEffects.ColorArea_v5.js index 7b24942da1..20b3a7388d 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.ColorArea_v5/Ops.Gl.ShaderEffects.ColorArea_v5.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.ColorArea_v5/Ops.Gl.ShaderEffects.ColorArea_v5.js @@ -62,7 +62,7 @@ inSpace.onChange = render.onTriggered = doRender; const vertModTitle = "vert_" + op.name; -const mod = new CGL.ShaderModifier(cgl, op.name); +const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); mod.addModule({ "priority": 2, "title": vertModTitle, diff --git a/src/ops/base/Ops.Gl.ShaderEffects.DeformArea/Ops.Gl.ShaderEffects.DeformArea.js b/src/ops/base/Ops.Gl.ShaderEffects.DeformArea/Ops.Gl.ShaderEffects.DeformArea.js index a5304db115..00e65c1490 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.DeformArea/Ops.Gl.ShaderEffects.DeformArea.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.DeformArea/Ops.Gl.ShaderEffects.DeformArea.js @@ -22,7 +22,7 @@ const srcBodyVert = "" // let moduleVert = null; -const mod = new CGL.ShaderModifier(cgl, op.name); +const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); mod.addModule({ "title": op.name, "name": "MODULE_VERTEX_POSITION", diff --git a/src/ops/base/Ops.Gl.ShaderEffects.DiscardMaterialAlpha/Ops.Gl.ShaderEffects.DiscardMaterialAlpha.js b/src/ops/base/Ops.Gl.ShaderEffects.DiscardMaterialAlpha/Ops.Gl.ShaderEffects.DiscardMaterialAlpha.js index 5771a0ea9d..8487abe68c 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.DiscardMaterialAlpha/Ops.Gl.ShaderEffects.DiscardMaterialAlpha.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.DiscardMaterialAlpha/Ops.Gl.ShaderEffects.DiscardMaterialAlpha.js @@ -5,7 +5,7 @@ const inThresh = op.inValueSlider("Threshold", 0.3); const cgl = op.patch.cgl; -const mod = new CGL.ShaderModifier(cgl, op.name); +const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); let atc = false; diff --git a/src/ops/base/Ops.Gl.ShaderEffects.ExplodeDividedMesh_v2/Ops.Gl.ShaderEffects.ExplodeDividedMesh_v2.js b/src/ops/base/Ops.Gl.ShaderEffects.ExplodeDividedMesh_v2/Ops.Gl.ShaderEffects.ExplodeDividedMesh_v2.js index f2bed9298a..e2d6c0c429 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.ExplodeDividedMesh_v2/Ops.Gl.ShaderEffects.ExplodeDividedMesh_v2.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.ExplodeDividedMesh_v2/Ops.Gl.ShaderEffects.ExplodeDividedMesh_v2.js @@ -1,71 +1,71 @@ const - render=op.inTrigger("Render"), - inDistance=op.inValue("Distance",1), - inSize=op.inValue("Size",1), + render = op.inTrigger("Render"), + inDistance = op.inValue("Distance", 1), + inSize = op.inValue("Size", 1), - inAbsolute=op.inValueBool("Absolute",false), - x=op.inValue("add x"), - y=op.inValue("add y"), - z=op.inValue("add z"), + inAbsolute = op.inValueBool("Absolute", false), + x = op.inValue("add x"), + y = op.inValue("add y"), + z = op.inValue("add z"), - mulx=op.inValue("mul x",1), - muly=op.inValue("mul y",1), - mulz=op.inValue("mul z",1), + mulx = op.inValue("mul x", 1), + muly = op.inValue("mul y", 1), + mulz = op.inValue("mul z", 1), - posx=op.inValue("x"), - posy=op.inValue("y"), - posz=op.inValue("z"), + posx = op.inValue("x"), + posy = op.inValue("y"), + posz = op.inValue("z"), - next=op.outTrigger("Next"); + next = op.outTrigger("Next"); -op.setPortGroup("Add",[x,z,y]); -op.setPortGroup("Multiply",[mulx,mulz,muly]); -op.setPortGroup("Position",[posx,posz,posy]); +op.setPortGroup("Add", [x, z, y]); +op.setPortGroup("Multiply", [mulx, mulz, muly]); +op.setPortGroup("Position", [posx, posz, posy]); -const cgl=op.patch.cgl; -const srcHeadVert=attachments.explode_divided_mesh_vert; +const cgl = op.patch.cgl; +const srcHeadVert = attachments.explode_divided_mesh_vert; -const srcBodyVert='' - .endl()+'pos=MOD_deform(pos,attrVertNormal,attrVertIndex);' +const srcBodyVert = "" + .endl() + "pos=MOD_deform(pos,attrVertNormal,attrVertIndex);" .endl(); -inAbsolute.onChange=function() +inAbsolute.onChange = function () { - mod.toggleDefine("MOD_ABSOLUTE",inAbsolute.get()); + mod.toggleDefine("MOD_ABSOLUTE", inAbsolute.get()); }; -const mod = new CGL.ShaderModifier(cgl, op.name); +const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); mod.addModule({ - title:op.objName, - name:'MODULE_VERTEX_POSITION', - srcHeadVert:srcHeadVert, - srcBodyVert:srcBodyVert + "title": op.objName, + "name": "MODULE_VERTEX_POSITION", + "srcHeadVert": srcHeadVert, + "srcBodyVert": srcBodyVert }); -mod.addUniform('f','MOD_dist',inDistance); +mod.addUniform("f", "MOD_dist", inDistance); -mod.addUniform('f','MOD_x',x); -mod.addUniform('f','MOD_y',y); -mod.addUniform('f','MOD_z',z); +mod.addUniform("f", "MOD_x", x); +mod.addUniform("f", "MOD_y", y); +mod.addUniform("f", "MOD_z", z); -mod.addUniform('f','MOD_mulx',mulx); -mod.addUniform('f','MOD_muly',muly); -mod.addUniform('f','MOD_mulz',mulz); +mod.addUniform("f", "MOD_mulx", mulx); +mod.addUniform("f", "MOD_muly", muly); +mod.addUniform("f", "MOD_mulz", mulz); -mod.addUniform('f','MOD_posx',posx); -mod.addUniform('f','MOD_posy',posy); -mod.addUniform('f','MOD_posz',posz); +mod.addUniform("f", "MOD_posx", posx); +mod.addUniform("f", "MOD_posy", posy); +mod.addUniform("f", "MOD_posz", posz); -mod.addUniform('f','MOD_size',inSize); +mod.addUniform("f", "MOD_size", inSize); -render.onTriggered=function() +render.onTriggered = function () { - if(op.isCurrentUiOp()) + if (op.isCurrentUiOp()) gui.setTransformGizmo( { - posX:posx, - posY:posy, - posZ:posz + "posX": posx, + "posY": posy, + "posZ": posz }); mod.bind(); diff --git a/src/ops/base/Ops.Gl.ShaderEffects.FogEffect/Ops.Gl.ShaderEffects.FogEffect.js b/src/ops/base/Ops.Gl.ShaderEffects.FogEffect/Ops.Gl.ShaderEffects.FogEffect.js index 87f0014877..3066504331 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.FogEffect/Ops.Gl.ShaderEffects.FogEffect.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.FogEffect/Ops.Gl.ShaderEffects.FogEffect.js @@ -47,7 +47,7 @@ const srcBodyFrag = "" const moduleFrag = null; const moduleVert = null; -const mod = new CGL.ShaderModifier(cgl, op.name); +const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); mod.addModule( { diff --git a/src/ops/base/Ops.Gl.ShaderEffects.InstancedDisplacementMap/Ops.Gl.ShaderEffects.InstancedDisplacementMap.js b/src/ops/base/Ops.Gl.ShaderEffects.InstancedDisplacementMap/Ops.Gl.ShaderEffects.InstancedDisplacementMap.js index 8c14836b8e..e943f2b735 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.InstancedDisplacementMap/Ops.Gl.ShaderEffects.InstancedDisplacementMap.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.InstancedDisplacementMap/Ops.Gl.ShaderEffects.InstancedDisplacementMap.js @@ -36,7 +36,7 @@ inTrigger.onTriggered = render; const cgl = op.patch.cgl; -const mod = new CGL.ShaderModifier(cgl, op.name); +const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); mod.addModule({ "title": op.name, "name": "MODULE_VERTEX_POSITION", diff --git a/src/ops/base/Ops.Gl.ShaderEffects.InstancedDisplacementMap_v2/Ops.Gl.ShaderEffects.InstancedDisplacementMap_v2.js b/src/ops/base/Ops.Gl.ShaderEffects.InstancedDisplacementMap_v2/Ops.Gl.ShaderEffects.InstancedDisplacementMap_v2.js index 8c14836b8e..e943f2b735 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.InstancedDisplacementMap_v2/Ops.Gl.ShaderEffects.InstancedDisplacementMap_v2.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.InstancedDisplacementMap_v2/Ops.Gl.ShaderEffects.InstancedDisplacementMap_v2.js @@ -36,7 +36,7 @@ inTrigger.onTriggered = render; const cgl = op.patch.cgl; -const mod = new CGL.ShaderModifier(cgl, op.name); +const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); mod.addModule({ "title": op.name, "name": "MODULE_VERTEX_POSITION", diff --git a/src/ops/base/Ops.Gl.ShaderEffects.InstancedPerlinPosition_v2/Ops.Gl.ShaderEffects.InstancedPerlinPosition_v2.js b/src/ops/base/Ops.Gl.ShaderEffects.InstancedPerlinPosition_v2/Ops.Gl.ShaderEffects.InstancedPerlinPosition_v2.js index 200927a92b..93858a836b 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.InstancedPerlinPosition_v2/Ops.Gl.ShaderEffects.InstancedPerlinPosition_v2.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.InstancedPerlinPosition_v2/Ops.Gl.ShaderEffects.InstancedPerlinPosition_v2.js @@ -25,7 +25,7 @@ let srcBodyVert = "" .endl(); -const mod = new CGL.ShaderModifier(cgl, op.name); +const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); mod.addModule({ "name": "MODULE_VERTEX_POSITION", "srcHeadVert": attachments.perlin_instposition_vert, diff --git a/src/ops/base/Ops.Gl.ShaderEffects.InstancedTextureColorize/Ops.Gl.ShaderEffects.InstancedTextureColorize.js b/src/ops/base/Ops.Gl.ShaderEffects.InstancedTextureColorize/Ops.Gl.ShaderEffects.InstancedTextureColorize.js index ba709a5bca..f37ed4c9d7 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.InstancedTextureColorize/Ops.Gl.ShaderEffects.InstancedTextureColorize.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.InstancedTextureColorize/Ops.Gl.ShaderEffects.InstancedTextureColorize.js @@ -18,7 +18,7 @@ inTrigger.onTriggered = render; const cgl = op.patch.cgl; -const mod = new CGL.ShaderModifier(cgl, op.name); +const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); mod.addModule({ "title": op.name, "name": "MODULE_VERTEX_POSITION", diff --git a/src/ops/base/Ops.Gl.ShaderEffects.MeshPixelNoise_v2/Ops.Gl.ShaderEffects.MeshPixelNoise_v2.js b/src/ops/base/Ops.Gl.ShaderEffects.MeshPixelNoise_v2/Ops.Gl.ShaderEffects.MeshPixelNoise_v2.js index b1a1479178..c9937b5875 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.MeshPixelNoise_v2/Ops.Gl.ShaderEffects.MeshPixelNoise_v2.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.MeshPixelNoise_v2/Ops.Gl.ShaderEffects.MeshPixelNoise_v2.js @@ -50,7 +50,7 @@ const srcBodyFrag = "" .endl() + "#endif" .endl(); -const mod = new CGL.ShaderModifier(cgl, op.name); +const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); mod.addModule({ "title": op.name, "name": "MODULE_VERTEX_POSITION", diff --git a/src/ops/base/Ops.Gl.ShaderEffects.ModuloVertexPosition/Ops.Gl.ShaderEffects.ModuloVertexPosition.js b/src/ops/base/Ops.Gl.ShaderEffects.ModuloVertexPosition/Ops.Gl.ShaderEffects.ModuloVertexPosition.js index 3fb7052c10..2312189307 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.ModuloVertexPosition/Ops.Gl.ShaderEffects.ModuloVertexPosition.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.ModuloVertexPosition/Ops.Gl.ShaderEffects.ModuloVertexPosition.js @@ -5,7 +5,7 @@ const trigger = op.outTrigger("Trigger"); const cgl = op.patch.cgl; -const mod = new CGL.ShaderModifier(cgl, op.name); +const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); mod.addModule({ "name": "MODULE_VERTEX_POSITION", diff --git a/src/ops/base/Ops.Gl.ShaderEffects.PerlinAreaDeform_v4/Ops.Gl.ShaderEffects.PerlinAreaDeform_v4.js b/src/ops/base/Ops.Gl.ShaderEffects.PerlinAreaDeform_v4/Ops.Gl.ShaderEffects.PerlinAreaDeform_v4.js index 427964c3c3..054ed78c27 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.PerlinAreaDeform_v4/Ops.Gl.ShaderEffects.PerlinAreaDeform_v4.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.PerlinAreaDeform_v4/Ops.Gl.ShaderEffects.PerlinAreaDeform_v4.js @@ -19,7 +19,7 @@ const scrollz = op.inValueFloat("Scroll Z"); const cgl = op.patch.cgl; -const mod = new CGL.ShaderModifier(cgl, op.name); +const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); inFlipNormals.onChange = inCalcNormals.onChange = updateCalcNormals; diff --git a/src/ops/base/Ops.Gl.ShaderEffects.ScaleByNormal_v2/Ops.Gl.ShaderEffects.ScaleByNormal_v2.js b/src/ops/base/Ops.Gl.ShaderEffects.ScaleByNormal_v2/Ops.Gl.ShaderEffects.ScaleByNormal_v2.js index 19603b8c3e..08c3ad54cd 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.ScaleByNormal_v2/Ops.Gl.ShaderEffects.ScaleByNormal_v2.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.ScaleByNormal_v2/Ops.Gl.ShaderEffects.ScaleByNormal_v2.js @@ -8,7 +8,7 @@ const srcBodyVert = "" .endl() + "pos=MOD_scaler(pos,mat3(modelMatrix)*attrVertNormal);" .endl(); -const mod = new CGL.ShaderModifier(cgl, op.name); +const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); mod.addUniform("f", "MOD_strength", inStrength); mod.addModule({ "title": op.objName, diff --git a/src/ops/base/Ops.Gl.ShaderEffects.SplineDeform_v2/Ops.Gl.ShaderEffects.SplineDeform_v2.js b/src/ops/base/Ops.Gl.ShaderEffects.SplineDeform_v2/Ops.Gl.ShaderEffects.SplineDeform_v2.js index 3830aa5910..5138e27923 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.SplineDeform_v2/Ops.Gl.ShaderEffects.SplineDeform_v2.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.SplineDeform_v2/Ops.Gl.ShaderEffects.SplineDeform_v2.js @@ -11,7 +11,7 @@ const srcBodyVert = attachments.splinedeform_vert || ""; let needsUpdate = true; -const mod = new CGL.ShaderModifier(cgl, op.name); +const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); mod.addModule({ "title": op.name, "name": "MODULE_VERTEX_POSITION", diff --git a/src/ops/base/Ops.Gl.ShaderEffects.TextureProjection/Ops.Gl.ShaderEffects.TextureProjection.js b/src/ops/base/Ops.Gl.ShaderEffects.TextureProjection/Ops.Gl.ShaderEffects.TextureProjection.js index 7dc262edce..8a9369a3ab 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.TextureProjection/Ops.Gl.ShaderEffects.TextureProjection.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.TextureProjection/Ops.Gl.ShaderEffects.TextureProjection.js @@ -32,7 +32,7 @@ inBlend.onChange = inDiscard.onChange = inWorldSpace.onChange = inMethod.onChang op.setPortGroup("Rotation", [inRotX, inRotY, inRotZ]); op.setPortGroup("Position", [inPosX, inPosY]); -const mod = new CGL.ShaderModifier(cgl, op.name); +const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); mod.addModule({ "title": op.name, "name": "MODULE_VERTEX_POSITION", diff --git a/src/ops/base/Ops.Gl.ShaderEffects.TextureProjection_v2/Ops.Gl.ShaderEffects.TextureProjection_v2.js b/src/ops/base/Ops.Gl.ShaderEffects.TextureProjection_v2/Ops.Gl.ShaderEffects.TextureProjection_v2.js index 7baa9d4360..b96fb12b71 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.TextureProjection_v2/Ops.Gl.ShaderEffects.TextureProjection_v2.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.TextureProjection_v2/Ops.Gl.ShaderEffects.TextureProjection_v2.js @@ -34,7 +34,7 @@ inUseTexAlpha.onChange = op.setPortGroup("Rotation", [inRotX, inRotY, inRotZ]); op.setPortGroup("Position", [inPosX, inPosY]); -const mod = new CGL.ShaderModifier(cgl, op.name); +const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); mod.addModule({ "title": op.name, "name": "MODULE_VERTEX_POSITION", diff --git a/src/ops/base/Ops.Gl.ShaderEffects.TransformTextureCoordinates/Ops.Gl.ShaderEffects.TransformTextureCoordinates.js b/src/ops/base/Ops.Gl.ShaderEffects.TransformTextureCoordinates/Ops.Gl.ShaderEffects.TransformTextureCoordinates.js index 25bbb3a720..c38f9ad377 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.TransformTextureCoordinates/Ops.Gl.ShaderEffects.TransformTextureCoordinates.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.TransformTextureCoordinates/Ops.Gl.ShaderEffects.TransformTextureCoordinates.js @@ -13,7 +13,7 @@ const rot = op.inFloat("Rotation", 0); const cgl = op.patch.cgl; -const mod = new CGL.ShaderModifier(cgl, op.name); +const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); mod.addModule({ "priority": -2, diff --git a/src/ops/base/Ops.Gl.ShaderEffects.TransformVertex/Ops.Gl.ShaderEffects.TransformVertex.js b/src/ops/base/Ops.Gl.ShaderEffects.TransformVertex/Ops.Gl.ShaderEffects.TransformVertex.js index 4539aa18e9..cc97a0b302 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.TransformVertex/Ops.Gl.ShaderEffects.TransformVertex.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.TransformVertex/Ops.Gl.ShaderEffects.TransformVertex.js @@ -15,7 +15,7 @@ const transNorm = op.inBool("Transform normals", false); const cgl = op.patch.cgl; -const mod = new CGL.ShaderModifier(cgl, op.name); +const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); mod.addModule({ "priority": -2, diff --git a/src/ops/base/Ops.Gl.ShaderEffects.Twist_v3/Ops.Gl.ShaderEffects.Twist_v3.js b/src/ops/base/Ops.Gl.ShaderEffects.Twist_v3/Ops.Gl.ShaderEffects.Twist_v3.js index 53f95d8b12..e6539c6376 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.Twist_v3/Ops.Gl.ShaderEffects.Twist_v3.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.Twist_v3/Ops.Gl.ShaderEffects.Twist_v3.js @@ -9,7 +9,7 @@ const cgl = op.patch.cgl; axis.onChange = updateAxis; -const mod = new CGL.ShaderModifier(cgl, op.name); +const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); mod.addModule({ "name": "MODULE_VERTEX_POSITION", "srcHeadVert": attachments.twist_head_vert, diff --git a/src/ops/base/Ops.Gl.ShaderEffects.UseVertexColor/Ops.Gl.ShaderEffects.UseVertexColor.js b/src/ops/base/Ops.Gl.ShaderEffects.UseVertexColor/Ops.Gl.ShaderEffects.UseVertexColor.js index 4e538334a6..4b32ed7719 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.UseVertexColor/Ops.Gl.ShaderEffects.UseVertexColor.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.UseVertexColor/Ops.Gl.ShaderEffects.UseVertexColor.js @@ -17,7 +17,7 @@ const srcBodyVert = "" render.onTriggered = doRender; const vertModTitle = "vert_" + op.name; -const mod = new CGL.ShaderModifier(cgl, op.name); +const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); mod.addModule({ "title": vertModTitle, "name": "MODULE_VERTEX_POSITION", diff --git a/src/ops/base/Ops.Gl.ShaderEffects.VertexColorAsAlpha/Ops.Gl.ShaderEffects.VertexColorAsAlpha.js b/src/ops/base/Ops.Gl.ShaderEffects.VertexColorAsAlpha/Ops.Gl.ShaderEffects.VertexColorAsAlpha.js index 0d83fcf4cf..00e44206c1 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.VertexColorAsAlpha/Ops.Gl.ShaderEffects.VertexColorAsAlpha.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.VertexColorAsAlpha/Ops.Gl.ShaderEffects.VertexColorAsAlpha.js @@ -1,7 +1,7 @@ const render = op.inTrigger("Render"), - inInput=op.inSwitch("Input",['Luminance','R','G','B'],'default'), - inInvert=op.inBool("Invert",false), + inInput = op.inSwitch("Input", ["Luminance", "R", "G", "B"], "default"), + inInvert = op.inBool("Invert", false), next = op.outTrigger("Next"); @@ -22,7 +22,7 @@ inInput.onChange = render.onTriggered = doRender; -const mod = new CGL.ShaderModifier(cgl, op.name); +const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); mod.addModule({ "priority": 2, "title": op.name, @@ -43,10 +43,10 @@ updateDefines(); function updateDefines() { - mod.toggleDefine("MOD_INPUT_R", inInput.get()==="R"); - mod.toggleDefine("MOD_INPUT_G", inInput.get()==="G"); - mod.toggleDefine("MOD_INPUT_B", inInput.get()==="B"); - mod.toggleDefine("MOD_INPUT_LUMI", inInput.get()==="Luminance"); + mod.toggleDefine("MOD_INPUT_R", inInput.get() === "R"); + mod.toggleDefine("MOD_INPUT_G", inInput.get() === "G"); + mod.toggleDefine("MOD_INPUT_B", inInput.get() === "B"); + mod.toggleDefine("MOD_INPUT_LUMI", inInput.get() === "Luminance"); mod.toggleDefine("MOD_INVERT", inInvert.get()); } diff --git a/src/ops/base/Ops.Gl.ShaderEffects.VertexDisplacementMap_v3/Ops.Gl.ShaderEffects.VertexDisplacementMap_v3.js b/src/ops/base/Ops.Gl.ShaderEffects.VertexDisplacementMap_v3/Ops.Gl.ShaderEffects.VertexDisplacementMap_v3.js index 9806ca5f88..9e244e53a4 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.VertexDisplacementMap_v3/Ops.Gl.ShaderEffects.VertexDisplacementMap_v3.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.VertexDisplacementMap_v3/Ops.Gl.ShaderEffects.VertexDisplacementMap_v3.js @@ -66,7 +66,7 @@ const srcBodyFrag = "" .endl(); -const mod = new CGL.ShaderModifier(cgl, op.name); +const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); mod.addModule({ "title": op.name, "name": "MODULE_VERTEX_POSITION", diff --git a/src/ops/base/Ops.Gl.ShaderEffects.VertexDisplacementMap_v4/Ops.Gl.ShaderEffects.VertexDisplacementMap_v4.js b/src/ops/base/Ops.Gl.ShaderEffects.VertexDisplacementMap_v4/Ops.Gl.ShaderEffects.VertexDisplacementMap_v4.js index 1a5e030041..0b36e4ad9a 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.VertexDisplacementMap_v4/Ops.Gl.ShaderEffects.VertexDisplacementMap_v4.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.VertexDisplacementMap_v4/Ops.Gl.ShaderEffects.VertexDisplacementMap_v4.js @@ -59,7 +59,7 @@ const srcBodyFrag = "" .endl() + "#endif" .endl(); -const mod = new CGL.ShaderModifier(cgl, op.name); +const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); mod.addModule({ "title": op.name, "name": "MODULE_VERTEX_POSITION", diff --git a/src/ops/base/Ops.Gl.ShaderEffects.VertexNumberLimit_v2/Ops.Gl.ShaderEffects.VertexNumberLimit_v2.js b/src/ops/base/Ops.Gl.ShaderEffects.VertexNumberLimit_v2/Ops.Gl.ShaderEffects.VertexNumberLimit_v2.js index f147b02eb6..9c55f7ae83 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.VertexNumberLimit_v2/Ops.Gl.ShaderEffects.VertexNumberLimit_v2.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.VertexNumberLimit_v2/Ops.Gl.ShaderEffects.VertexNumberLimit_v2.js @@ -2,7 +2,7 @@ const render = op.inTrigger("Render"), limitMin = op.inValueInt("Min", 0), limitMax = op.inValueInt("Max", 1000), - inv=op.inBool("Invert",false); + inv = op.inBool("Invert", false); const trigger = op.outTrigger("Next"); const cgl = op.patch.cgl; @@ -32,7 +32,7 @@ const srcBodyFrag = "" .endl(); -const mod = new CGL.ShaderModifier(cgl, op.name); +const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); mod.addModule({ "title": op.name, @@ -48,13 +48,13 @@ mod.addModule({ "srcBodyFrag": srcBodyFrag }); -mod.addUniform("2f", "MOD_vertLimit", limitMin,limitMax); -inv.onChange=updateDefines; +mod.addUniform("2f", "MOD_vertLimit", limitMin, limitMax); +inv.onChange = updateDefines; function updateDefines() { - mod.toggleDefine("MOD_INVERT",inv.get()); + mod.toggleDefine("MOD_INVERT", inv.get()); } render.onTriggered = function () diff --git a/src/ops/base/Ops.Gl.ShaderEffects.VertexPositionFromTexture_v2/Ops.Gl.ShaderEffects.VertexPositionFromTexture_v2.js b/src/ops/base/Ops.Gl.ShaderEffects.VertexPositionFromTexture_v2/Ops.Gl.ShaderEffects.VertexPositionFromTexture_v2.js index 9ad6230bff..21af9d77de 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.VertexPositionFromTexture_v2/Ops.Gl.ShaderEffects.VertexPositionFromTexture_v2.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.VertexPositionFromTexture_v2/Ops.Gl.ShaderEffects.VertexPositionFromTexture_v2.js @@ -6,7 +6,7 @@ const const cgl = op.patch.cgl; -const mod = new CGL.ShaderModifier(cgl, op.name); +const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); mod.addModule({ "priority": 2, "title": op.name, diff --git a/src/ops/base/Ops.Gl.ShaderEffects.VertexWobble/Ops.Gl.ShaderEffects.VertexWobble.js b/src/ops/base/Ops.Gl.ShaderEffects.VertexWobble/Ops.Gl.ShaderEffects.VertexWobble.js index 632bd1160b..84b58d4347 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.VertexWobble/Ops.Gl.ShaderEffects.VertexWobble.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.VertexWobble/Ops.Gl.ShaderEffects.VertexWobble.js @@ -33,7 +33,7 @@ const srcHeadVert = ""; let startTime = CABLES.now() / 1000.0; -const mod = new CGL.ShaderModifier(cgl, op.name); +const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); mod.addModule({ "title": op.name, diff --git a/src/ops/base/Ops.Gl.ShaderEffects.VertexWobble_v2/Ops.Gl.ShaderEffects.VertexWobble_v2.js b/src/ops/base/Ops.Gl.ShaderEffects.VertexWobble_v2/Ops.Gl.ShaderEffects.VertexWobble_v2.js index 95e4e54a43..7358f225df 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.VertexWobble_v2/Ops.Gl.ShaderEffects.VertexWobble_v2.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.VertexWobble_v2/Ops.Gl.ShaderEffects.VertexWobble_v2.js @@ -11,12 +11,12 @@ let src = op.inValueSelect("Source", [ const amount = op.inValueSlider("amount", 0.1), - inTime=op.inFloat("Time",0), + inTime = op.inFloat("Time", 0), mul = op.inValueFloat("Scale", 3), toAxisX = op.inValueBool("axisX", true), toAxisY = op.inValueBool("axisY", true), toAxisZ = op.inValueBool("axisZ", true), - positive = op.inSwitch("Range",['-1 to 1','0 to 1'],'-1 to 1'), + positive = op.inSwitch("Range", ["-1 to 1", "0 to 1"], "-1 to 1"), inArea = op.inValueSelect("Area", ["Sphere", "Box", "Axis X", "Axis Y", "Axis Z", "Axis X Infinite", "Axis Y Infinite", "Axis Z Infinite"], "Sphere"), inSize = op.inValue("Size", 1), @@ -30,12 +30,12 @@ const next = this.outTrigger("trigger"); -op.setPortGroup("Area",[inArea,inSize,x,y,z,inFalloff,inWorldSpace,inInvert]); +op.setPortGroup("Area", [inArea, inSize, x, y, z, inFalloff, inWorldSpace, inInvert]); -positive.onChange= -inArea.onChange= - inWorldSpace.onChange= - inSize.onChange= +positive.onChange = +inArea.onChange = + inWorldSpace.onChange = + inSize.onChange = src.onChange = toAxisZ.onChange = toAxisX.onChange = @@ -43,7 +43,7 @@ inArea.onChange= const srcHeadVert = ""; // let startTime = CABLES.now() / 1000.0; -const mod = new CGL.ShaderModifier(cgl, op.name); +const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); mod.addModule({ "title": op.name, @@ -52,7 +52,7 @@ mod.addModule({ "srcBodyVert": attachments.sinewobble_vert }); -mod.addUniform("4f", "MOD_posSize", x, y, z,inSize); +mod.addUniform("4f", "MOD_posSize", x, y, z, inSize); mod.addUniformVert("f", "MOD_time", inTime); mod.addUniformVert("f", "MOD_amount", amount); mod.addUniformVert("f", "MOD_scale", mul); @@ -63,9 +63,9 @@ setDefines(); function setDefines() { mod.toggleDefine("MOD_AREA_INVERT", inInvert.get()); - mod.toggleDefine("MOD_POSITIVE", positive.get()=="0 to 1"); + mod.toggleDefine("MOD_POSITIVE", positive.get() == "0 to 1"); - mod.toggleDefine("MOD_WORLDSPACE", inWorldSpace.get() ); + mod.toggleDefine("MOD_WORLDSPACE", inWorldSpace.get()); mod.toggleDefine("MOD_AREA_AXIS_X", inArea.get() == "Axis X"); mod.toggleDefine("MOD_AREA_AXIS_Y", inArea.get() == "Axis Y"); mod.toggleDefine("MOD_AREA_AXIS_Z", inArea.get() == "Axis Z"); diff --git a/src/ops/base/Ops.Gl.Textures.CopyTexture/Ops.Gl.Textures.CopyTexture.js b/src/ops/base/Ops.Gl.Textures.CopyTexture/Ops.Gl.Textures.CopyTexture.js index 9ce101efb6..a3ee1d0a59 100644 --- a/src/ops/base/Ops.Gl.Textures.CopyTexture/Ops.Gl.Textures.CopyTexture.js +++ b/src/ops/base/Ops.Gl.Textures.CopyTexture/Ops.Gl.Textures.CopyTexture.js @@ -38,7 +38,7 @@ let reInitEffect = true; op.setPortGroup("Size", [useVPSize, width, height]); -const bgShader = new CGL.Shader(cgl, "copytexture"); +const bgShader = new CGL.Shader(cgl, "copytexture", this); bgShader.setSource(bgShader.getDefaultVertexShader(), attachments.copytexture_frag); const textureUniform = new CGL.Uniform(bgShader, "t", "tex", 0); let textureMaskUniform = new CGL.Uniform(bgShader, "t", "texMask", 1); From eb3411e926d05aab81fd4033adf614e76e01c29e Mon Sep 17 00:00:00 2001 From: pandrr Date: Fri, 2 Feb 2024 16:25:14 +0100 Subject: [PATCH 03/12] merg --- .../base/Ops.Array.ArrayChunk/screenshot.png | Bin 22850 -> 17465 bytes .../Ops.Gl.ShaderEffects.ColorArea_v5.js | 6 +-- .../Ops.Gl.ShaderEffects.ColorArea_v5.json | 47 +++++++++--------- .../Ops.Gl.Textures.TextTexture_v6.js | 8 +-- .../att_text.frag | 2 +- .../Ops.Html.CSSPropertyString.json | 8 +-- 6 files changed, 36 insertions(+), 35 deletions(-) diff --git a/src/ops/base/Ops.Array.ArrayChunk/screenshot.png b/src/ops/base/Ops.Array.ArrayChunk/screenshot.png index 254ea920366c7229efba076f306581bbfd603a4f..c46114a089c0538fcab212557c43f0e6a4fa90ce 100644 GIT binary patch literal 17465 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 z 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 diff --git a/src/ops/base/Ops.Gl.ShaderEffects.ColorArea_v5/Ops.Gl.ShaderEffects.ColorArea_v5.js b/src/ops/base/Ops.Gl.ShaderEffects.ColorArea_v5/Ops.Gl.ShaderEffects.ColorArea_v5.js index 7b24942da1..d09f2a31e1 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.ColorArea_v5/Ops.Gl.ShaderEffects.ColorArea_v5.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.ColorArea_v5/Ops.Gl.ShaderEffects.ColorArea_v5.js @@ -78,7 +78,7 @@ mod.addModule({ "srcBodyFrag": attachments.colorarea_frag }); -mod.addUniform("4f", "MOD_inSizeAmountFalloffSizeX", inSize, inAmount, inFalloff, 0); +mod.addUniform("4f", "MOD_inSizeAmountFalloffSizeX", inSize, inAmount, inFalloff, inFalloff); mod.addUniform("3f", "MOD_color", r, g, b); mod.addUniform("3f", "MOD_pos", x, y, z); mod.addUniform("4f", "MOD_scale", sizeX, sizeY, sizeZ, roundNess); @@ -97,8 +97,8 @@ function updatePrio() // "priority": 0, "title": vertModTitle, "name": "MODULE_VERTEX_POSITION", - srcHeadVert, - srcBodyVert + "srcHeadVert": srcHeadVert, + "srcBodyVert": srcBodyVert }; if (inPrio.get()) vmod.priority = 2; diff --git a/src/ops/base/Ops.Gl.ShaderEffects.ColorArea_v5/Ops.Gl.ShaderEffects.ColorArea_v5.json b/src/ops/base/Ops.Gl.ShaderEffects.ColorArea_v5/Ops.Gl.ShaderEffects.ColorArea_v5.json index c0cfed6f83..c46ae67c53 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.ColorArea_v5/Ops.Gl.ShaderEffects.ColorArea_v5.json +++ b/src/ops/base/Ops.Gl.ShaderEffects.ColorArea_v5/Ops.Gl.ShaderEffects.ColorArea_v5.json @@ -5,129 +5,129 @@ "layout": { "portsIn": [ { - "type": 1, + "type": "1", "name": "Render" }, { - "type": 0, + "type": "0", "name": "Area index", "subType": "integer" }, { - "type": 0, + "type": "0", "name": "Size", "subType": "number" }, { - "type": 0, + "type": "0", "name": "Roundness", "subType": "number" }, { - "type": 0, + "type": "0", "name": "Amount", "subType": "number" }, { - "type": 0, + "type": "0", "name": "Falloff", "subType": "number" }, { - "type": 0, + "type": "0", "name": "Falloff Curve index", "subType": "integer" }, { - "type": 0, + "type": "0", "name": "Invert", "subType": "boolean" }, { - "type": 0, + "type": "0", "name": "Blend index", "group": "Color", "subType": "integer" }, { - "type": 0, + "type": "0", "name": "r", "group": "Color", "subType": "number" }, { - "type": 0, + "type": "0", "name": "g", "group": "Color", "subType": "number" }, { - "type": 0, + "type": "0", "name": "b", "group": "Color", "subType": "number" }, { - "type": 0, + "type": "0", "name": "x", "group": "Position", "subType": "number" }, { - "type": 0, + "type": "0", "name": "y", "group": "Position", "subType": "number" }, { - "type": 0, + "type": "0", "name": "z", "group": "Position", "subType": "number" }, { - "type": 0, + "type": "0", "name": "Change Size", "group": "Scale", "subType": "boolean" }, { - "type": 0, + "type": "0", "name": "Size X", "group": "Scale", "subType": "number" }, { - "type": 0, + "type": "0", "name": "Size Y", "group": "Scale", "subType": "number" }, { - "type": 0, + "type": "0", "name": "Size Z", "group": "Scale", "subType": "number" }, { - "type": 2, + "type": "2", "name": "Texture", "objType": "texture" }, { - "type": 0, + "type": "0", "name": "Space index", "subType": "integer" }, { - "type": 0, + "type": "0", "name": "Priority", "subType": "boolean" } ], "portsOut": [ { - "type": 1, + "type": "1", "name": "Next" } ] @@ -190,7 +190,6 @@ ], "summary": "Colorize all meshes around current position", "issues": "", - "youtubeids": [ "cUU0fNw3rEg" ], diff --git a/src/ops/base/Ops.Gl.Textures.TextTexture_v6/Ops.Gl.Textures.TextTexture_v6.js b/src/ops/base/Ops.Gl.Textures.TextTexture_v6/Ops.Gl.Textures.TextTexture_v6.js index af36e49d1b..521addff2b 100644 --- a/src/ops/base/Ops.Gl.Textures.TextTexture_v6/Ops.Gl.Textures.TextTexture_v6.js +++ b/src/ops/base/Ops.Gl.Textures.TextTexture_v6/Ops.Gl.Textures.TextTexture_v6.js @@ -71,6 +71,10 @@ render.onLinkChanged = () => else textureOut.setRef(tex); }; +r.onChange = +g.onChange = +b.onChange = +inOpacity.onChange = valign.onChange = texSizeManBreak.onChange = texSizeAutoHeight.onChange = @@ -118,7 +122,7 @@ shader.setSource(attachments.text_vert, attachments.text_frag); const texUni = new CGL.Uniform(shader, "t", "tex"); const aspectUni = new CGL.Uniform(shader, "f", "aspect", 0); const opacityUni = new CGL.Uniform(shader, "f", "a", inOpacity); -const uniColor = new CGL.Uniform(shader, "3f", "color", r, g, b); +const uniColor = new CGL.Uniform(shader, "4f", "color", r, g, b, inOpacity); if (op.patch.isEditorMode()) CABLES.UI.SIMPLEWIREFRAMERECT = CABLES.UI.SIMPLEWIREFRAMERECT || new CGL.WireframeRect(cgl); @@ -421,7 +425,5 @@ function updateUi() valign.setUiAttribs({ "greyout": texSizeMeth.get() != "Manual" }); texSizeAutoHeight.setUiAttribs({ "greyout": texSizeMeth.get() != "Manual" }); - // inPaddingY.setUiAttribs({ "greyout": !texSizeAutoHeight.get() }); - // inPaddingYBot.setUiAttribs({ "greyout": !texSizeAutoHeight.get() }); meshScale.setUiAttribs({ "greyout": !drawMesh.get() }); } diff --git a/src/ops/base/Ops.Gl.Textures.TextTexture_v6/att_text.frag b/src/ops/base/Ops.Gl.Textures.TextTexture_v6/att_text.frag index 9bec3904e3..8217ea5af9 100644 --- a/src/ops/base/Ops.Gl.Textures.TextTexture_v6/att_text.frag +++ b/src/ops/base/Ops.Gl.Textures.TextTexture_v6/att_text.frag @@ -1,6 +1,6 @@ UNI sampler2D tex; UNI float a; -UNI vec3 color; +UNI vec4 color; IN vec2 texCoord; void main() diff --git a/src/ops/base/Ops.Html.CSSPropertyString/Ops.Html.CSSPropertyString.json b/src/ops/base/Ops.Html.CSSPropertyString/Ops.Html.CSSPropertyString.json index b2babc1764..819130784d 100644 --- a/src/ops/base/Ops.Html.CSSPropertyString/Ops.Html.CSSPropertyString.json +++ b/src/ops/base/Ops.Html.CSSPropertyString/Ops.Html.CSSPropertyString.json @@ -12,24 +12,24 @@ "layout": { "portsIn": [ { - "type": 2, + "type": "2", "name": "Element", "group": "Element" }, { - "type": 5, + "type": "5", "name": "Property", "group": "Attributes" }, { - "type": 5, + "type": "5", "name": "Value", "group": "Attributes" } ], "portsOut": [ { - "type": 2, + "type": "2", "name": "HTML Element" } ] From ee7ebd3092e2a16f70d9815f1d42b033a5f6633b Mon Sep 17 00:00:00 2001 From: pandrr Date: Fri, 2 Feb 2024 16:33:25 +0100 Subject: [PATCH 04/12] core --- src/core/cgl/cgl_mesh.js | 8 +++++--- src/libs/cgl/shadermodifier/cgl_shadermodifier.js | 2 +- .../Ops.Dev.LinesArrayFromTexture.js | 2 +- .../Ops.Gl.Geometry.BoundingBoxVisible.js | 2 +- src/ops/base/Ops.Gl.Meshes.Line/Ops.Gl.Meshes.Line.js | 2 +- .../Ops.Gl.Meshes.LinesArray/Ops.Gl.Meshes.LinesArray.js | 2 +- 6 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/core/cgl/cgl_mesh.js b/src/core/cgl/cgl_mesh.js index 1a2eb90b32..254f6f1549 100644 --- a/src/core/cgl/cgl_mesh.js +++ b/src/core/cgl/cgl_mesh.js @@ -24,10 +24,11 @@ MESH.lastMesh = null; * mesh.render(cgl.getShader()); * } */ -const Mesh = function (_cgl, __geom, glPrimitive) +const Mesh = function (_cgl, __geom, options) { this._cgl = _cgl; + options = options || {}; this._log = new Logger("cgl_mesh"); this._bufVertexAttrib = null; this._bufVerticesIndizes = this._cgl.gl.createBuffer(); @@ -37,7 +38,8 @@ const Mesh = function (_cgl, __geom, glPrimitive) this._geom = null; this._lastShader = null; this._numInstances = 0; - this._glPrimitive = glPrimitive; + this._glPrimitive = options.glPrimitive || 0; + this.opId = options.opId || ""; this._preWireframeGeom = null; this.addVertexNumbers = false; this._name = "unknown"; @@ -722,7 +724,7 @@ Mesh.prototype.render = function (shader) MESH.lastMesh = this; let prim = this._cgl.gl.TRIANGLES; - if (this._glPrimitive !== undefined) prim = this._glPrimitive; + if (this._glPrimitive) prim = this._glPrimitive; if (shader.glPrimitive !== null) prim = shader.glPrimitive; let elementDiv = 1; diff --git a/src/libs/cgl/shadermodifier/cgl_shadermodifier.js b/src/libs/cgl/shadermodifier/cgl_shadermodifier.js index c8634c70bb..6a2c33d81e 100644 --- a/src/libs/cgl/shadermodifier/cgl_shadermodifier.js +++ b/src/libs/cgl/shadermodifier/cgl_shadermodifier.js @@ -18,7 +18,7 @@ class ShaderModifier this.needsTexturePush = false; this._lastShader = null; this._attributes = []; - if (options.op) this.opId = options.op; + if (options && options.op) this.opId = options.op; if (this._cgl.glVersion == 1) { diff --git a/src/ops/base/Ops.Dev.LinesArrayFromTexture/Ops.Dev.LinesArrayFromTexture.js b/src/ops/base/Ops.Dev.LinesArrayFromTexture/Ops.Dev.LinesArrayFromTexture.js index 544f2907c5..c2535dfe97 100644 --- a/src/ops/base/Ops.Dev.LinesArrayFromTexture/Ops.Dev.LinesArrayFromTexture.js +++ b/src/ops/base/Ops.Dev.LinesArrayFromTexture/Ops.Dev.LinesArrayFromTexture.js @@ -158,7 +158,7 @@ function setupMesh() // if (strip.get()) shader.glPrimitive = cgl.gl.LINES; // else - if (numVerts > 0) mesh = new CGL.Mesh(cgl, geom, cgl.gl.LINES); + if (numVerts > 0) mesh = new CGL.Mesh(cgl, geom, { "glPrimitive": cgl.gl.LINES }); mesh.addVertexNumbers = true; mesh.setGeom(geom); diff --git a/src/ops/base/Ops.Gl.Geometry.BoundingBoxVisible/Ops.Gl.Geometry.BoundingBoxVisible.js b/src/ops/base/Ops.Gl.Geometry.BoundingBoxVisible/Ops.Gl.Geometry.BoundingBoxVisible.js index e476dc6296..641191384f 100644 --- a/src/ops/base/Ops.Gl.Geometry.BoundingBoxVisible/Ops.Gl.Geometry.BoundingBoxVisible.js +++ b/src/ops/base/Ops.Gl.Geometry.BoundingBoxVisible/Ops.Gl.Geometry.BoundingBoxVisible.js @@ -123,7 +123,7 @@ function buildMesh() ]; - mesh = new CGL.Mesh(cgl, geom, cgl.gl.LINES); + mesh = new CGL.Mesh(cgl, geom, { "glPrimitive": cgl.gl.LINES }); } // LINE/LINE diff --git a/src/ops/base/Ops.Gl.Meshes.Line/Ops.Gl.Meshes.Line.js b/src/ops/base/Ops.Gl.Meshes.Line/Ops.Gl.Meshes.Line.js index 19317d7888..1617ceb4b6 100644 --- a/src/ops/base/Ops.Gl.Meshes.Line/Ops.Gl.Meshes.Line.js +++ b/src/ops/base/Ops.Gl.Meshes.Line/Ops.Gl.Meshes.Line.js @@ -12,7 +12,7 @@ const cgl = op.patch.cgl; const geom = new CGL.Geometry("simplespline"); geom.vertices = [x1.get(), y1.get(), z1.get(), x2.get(), y2.get(), x2.get()]; -const mesh = new CGL.Mesh(cgl, geom, cgl.gl.LINES); +const mesh = new CGL.Mesh(cgl, geom, { "glPrimitive": cgl.gl.LINES }); let changed = true; diff --git a/src/ops/base/Ops.Gl.Meshes.LinesArray/Ops.Gl.Meshes.LinesArray.js b/src/ops/base/Ops.Gl.Meshes.LinesArray/Ops.Gl.Meshes.LinesArray.js index b4c9a7b3bf..e8d9cd4614 100644 --- a/src/ops/base/Ops.Gl.Meshes.LinesArray/Ops.Gl.Meshes.LinesArray.js +++ b/src/ops/base/Ops.Gl.Meshes.LinesArray/Ops.Gl.Meshes.LinesArray.js @@ -76,7 +76,7 @@ function rebuild() geom.texCoords = tc; geom.verticesIndices = indices; - let mesh = new CGL.Mesh(cgl, geom, cgl.gl.LINES); + let mesh = new CGL.Mesh(cgl, geom, { "glPrimitive": cgl.gl.LINES }); mesh.setGeom(geom); meshes.push(mesh); From 71b4d13100ebf8785d274aadfc8f57860c4e0d49 Mon Sep 17 00:00:00 2001 From: pandrr Date: Fri, 2 Feb 2024 16:45:00 +0100 Subject: [PATCH 05/12] meshes --- src/core/cgl/cgl_mesh.js | 5 +- src/core/cgl/cgl_state.js | 4 +- .../Ops.Deprecated.Circlex.js | 19 +--- .../Ops.Gl.GLTF.GltfScene_v4/att_inc_mesh.js | 2 +- .../Ops.Gl.Meshes.Circle_v2.js | 23 ++--- .../Ops.Gl.Meshes.Circle_v3.js | 23 ++--- .../Ops.Gl.Meshes.Cube_v2.js | 98 +++++++------------ .../Ops.Gl.Meshes.Cylinder_v2.js | 17 ++-- .../Ops.Gl.Meshes.Rectangle_v3.js | 2 +- .../Ops.Gl.Meshes.Rectangle_v4.js | 2 +- .../Ops.Gl.Meshes.Sphere_v3.js | 5 +- 11 files changed, 71 insertions(+), 129 deletions(-) diff --git a/src/core/cgl/cgl_mesh.js b/src/core/cgl/cgl_mesh.js index 254f6f1549..e7784f0eea 100644 --- a/src/core/cgl/cgl_mesh.js +++ b/src/core/cgl/cgl_mesh.js @@ -737,7 +737,10 @@ Mesh.prototype.render = function (shader) let queryProfilerData = this._cgl.profileData.glQueryData[id]; - if (!queryProfilerData) queryProfilerData = { "id": id, "num": 0, "shaderOp": shader.opId }; + if (!queryProfilerData) queryProfilerData = { "id": id, "num": 0 }; + + if (shader.opId)queryProfilerData.shaderOp = shader.opId; + if (this.opId)queryProfilerData.meshOp = this.opId; this._cgl.profileData.glQueryData[id] = queryProfilerData; diff --git a/src/core/cgl/cgl_state.js b/src/core/cgl/cgl_state.js index 5412196093..e9f1a0a13b 100644 --- a/src/core/cgl/cgl_state.js +++ b/src/core/cgl/cgl_state.js @@ -1244,9 +1244,9 @@ Context.prototype._setBlendMode = function (blendMode, premul) } }; -Context.prototype.createMesh = function (geom, glPrimitive) +Context.prototype.createMesh = function (geom, options) { - return new CGL.Mesh(this, geom, glPrimitive); + return new CGL.Mesh(this, geom, options); }; diff --git a/src/ops/base/Ops.Deprecated.Circlex/Ops.Deprecated.Circlex.js b/src/ops/base/Ops.Deprecated.Circlex/Ops.Deprecated.Circlex.js index e80690a2ab..3936a03e00 100644 --- a/src/ops/base/Ops.Deprecated.Circlex/Ops.Deprecated.Circlex.js +++ b/src/ops/base/Ops.Deprecated.Circlex/Ops.Deprecated.Circlex.js @@ -216,25 +216,16 @@ function calc() ); texCoords.push( - posxTexCoord, 0, - oldPosXTexCoord, 0, - posxTexCoordIn, 1, - - posxTexCoord, 1, - oldPosXTexCoord, 0, - oldPosXTexCoordIn, 1); + posxTexCoord, 0, oldPosXTexCoord, 0, posxTexCoordIn, 1, posxTexCoord, 1, oldPosXTexCoord, 0, oldPosXTexCoordIn, 1); vertexNormals.push( - 0, 0, 1, 0, 0, 1, 0, 0, 1, - 0, 0, 1, 0, 0, 1, 0, 0, 1 + 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1 ); tangents.push( - 1, 0, 0, 1, 0, 0, 1, 0, 0, - 1, 0, 0, 1, 0, 0, 1, 0, 0 + 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0 ); biTangents.push( - 0, -1, 0, 0, -1, 0, 0, -1, 0, - 0, -1, 0, 0, -1, 0, 0, -1, 0); + 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0); } oldPosXTexCoordIn = posxTexCoordIn; @@ -264,7 +255,7 @@ function calc() if (geom.vertices.length == 0) return; if (mesh) mesh.dispose(); - mesh = op.patch.cg.createMesh(geom); + mesh = op.patch.cg.createMesh(geom, { "opId": op.id }); needsCalc = false; } diff --git a/src/ops/base/Ops.Gl.GLTF.GltfScene_v4/att_inc_mesh.js b/src/ops/base/Ops.Gl.GLTF.GltfScene_v4/att_inc_mesh.js index 604a43cc36..dba5d88bb6 100644 --- a/src/ops/base/Ops.Gl.GLTF.GltfScene_v4/att_inc_mesh.js +++ b/src/ops/base/Ops.Gl.GLTF.GltfScene_v4/att_inc_mesh.js @@ -341,7 +341,7 @@ let gltfMesh = class op.logWarn("unknown primitive type", this); } - this.mesh = op.patch.cg.createMesh(g, glprim); + this.mesh = op.patch.cg.createMesh(g, { "glPrimitive": glprim }); // this.mesh = new CGL.Mesh(cgl, g, glprim); } else diff --git a/src/ops/base/Ops.Gl.Meshes.Circle_v2/Ops.Gl.Meshes.Circle_v2.js b/src/ops/base/Ops.Gl.Meshes.Circle_v2/Ops.Gl.Meshes.Circle_v2.js index 34828dd4b9..b2cddcea02 100644 --- a/src/ops/base/Ops.Gl.Meshes.Circle_v2/Ops.Gl.Meshes.Circle_v2.js +++ b/src/ops/base/Ops.Gl.Meshes.Circle_v2/Ops.Gl.Meshes.Circle_v2.js @@ -161,9 +161,7 @@ function calc() ); texCoords.push( - posxTexCoordIn, posyTexCoordIn, - oldPosXTexCoord, oldPosYTexCoord, - posxTexCoord, posyTexCoord + posxTexCoordIn, posyTexCoordIn, oldPosXTexCoord, oldPosYTexCoord, posxTexCoord, posyTexCoord ); vertexNormals.push(0, 0, 1, 0, 0, 1, 0, 0, 1); tangents.push(1, 0, 0, 1, 0, 0, 1, 0, 0); @@ -224,25 +222,16 @@ function calc() ); texCoords.push( - posxTexCoord, 0, - oldPosXTexCoord, 0, - posxTexCoordIn, 1, - - posxTexCoord, 1, - oldPosXTexCoord, 0, - oldPosXTexCoordIn, 1); + posxTexCoord, 0, oldPosXTexCoord, 0, posxTexCoordIn, 1, posxTexCoord, 1, oldPosXTexCoord, 0, oldPosXTexCoordIn, 1); vertexNormals.push( - 0, 0, 1, 0, 0, 1, 0, 0, 1, - 0, 0, 1, 0, 0, 1, 0, 0, 1 + 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1 ); tangents.push( - 1, 0, 0, 1, 0, 0, 1, 0, 0, - 1, 0, 0, 1, 0, 0, 1, 0, 0 + 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0 ); biTangents.push( - 0, 0, -1, 0, 0, -1, 0, 0, -1, - 0, 0, -1, 0, 0, -1, 0, 0, -1 + 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1 ); } @@ -273,7 +262,7 @@ function calc() if (geom.vertices.length == 0) return; if (mesh) mesh.dispose(); mesh = null; - mesh = op.patch.cg.createMesh(geom); + mesh = op.patch.cg.createMesh(geom, { "opId": op.id }); needsCalc = false; } diff --git a/src/ops/base/Ops.Gl.Meshes.Circle_v3/Ops.Gl.Meshes.Circle_v3.js b/src/ops/base/Ops.Gl.Meshes.Circle_v3/Ops.Gl.Meshes.Circle_v3.js index 83a3c695bd..d94e81f5f0 100644 --- a/src/ops/base/Ops.Gl.Meshes.Circle_v3/Ops.Gl.Meshes.Circle_v3.js +++ b/src/ops/base/Ops.Gl.Meshes.Circle_v3/Ops.Gl.Meshes.Circle_v3.js @@ -159,9 +159,7 @@ function calc() ); texCoords.push( - posxTexCoordIn, posyTexCoordIn, - oldPosXTexCoord, oldPosYTexCoord, - posxTexCoord, posyTexCoord + posxTexCoordIn, posyTexCoordIn, oldPosXTexCoord, oldPosYTexCoord, posxTexCoord, posyTexCoord ); vertexNormals.push(0, 0, 1, 0, 0, 1, 0, 0, 1); tangents.push(1, 0, 0, 1, 0, 0, 1, 0, 0); @@ -222,25 +220,16 @@ function calc() ); texCoords.push( - posxTexCoord, 0, - oldPosXTexCoord, 0, - posxTexCoordIn, 1, - - posxTexCoord, 1, - oldPosXTexCoord, 0, - oldPosXTexCoordIn, 1); + posxTexCoord, 0, oldPosXTexCoord, 0, posxTexCoordIn, 1, posxTexCoord, 1, oldPosXTexCoord, 0, oldPosXTexCoordIn, 1); vertexNormals.push( - 0, 0, 1, 0, 0, 1, 0, 0, 1, - 0, 0, 1, 0, 0, 1, 0, 0, 1 + 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1 ); tangents.push( - 1, 0, 0, 1, 0, 0, 1, 0, 0, - 1, 0, 0, 1, 0, 0, 1, 0, 0 + 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0 ); biTangents.push( - 0, 0, -1, 0, 0, -1, 0, 0, -1, - 0, 0, -1, 0, 0, -1, 0, 0, -1 + 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1 ); } @@ -271,7 +260,7 @@ function calc() if (geom.vertices.length == 0) return; if (mesh) mesh.dispose(); mesh = null; - mesh = op.patch.cg.createMesh(geom); + mesh = op.patch.cg.createMesh(geom, { "opId": op.id }); needsCalc = false; } diff --git a/src/ops/base/Ops.Gl.Meshes.Cube_v2/Ops.Gl.Meshes.Cube_v2.js b/src/ops/base/Ops.Gl.Meshes.Cube_v2/Ops.Gl.Meshes.Cube_v2.js index 9b1d62a842..e483a1fba2 100644 --- a/src/ops/base/Ops.Gl.Meshes.Cube_v2/Ops.Gl.Meshes.Cube_v2.js +++ b/src/ops/base/Ops.Gl.Meshes.Cube_v2/Ops.Gl.Meshes.Cube_v2.js @@ -97,8 +97,8 @@ function buildMesh() } addAttribs(geom, x, y, z, nx, ny, nz); - if (mapping.get() == "Side") sideMappedCube(geom,1,1,1); - else if (mapping.get() == "SideWrap") sideMappedCube(geom,x,y,z); + if (mapping.get() == "Side") sideMappedCube(geom, 1, 1, 1); + else if (mapping.get() == "SideWrap") sideMappedCube(geom, x, y, z); else cubeMappedCube(geom); geom.verticesIndices = []; @@ -113,7 +113,7 @@ function buildMesh() else meshvalid = true; if (mesh)mesh.dispose(); - mesh = op.patch.cg.createMesh(geom); + mesh = op.patch.cg.createMesh(geom, { "opId": op.id }); geomOut.setRef(geom); @@ -125,7 +125,7 @@ op.onDelete = function () if (mesh)mesh.dispose(); }; -function sideMappedCube(geom,x,y,z) +function sideMappedCube(geom, x, y, z) { const bias = mappingBias.get(); @@ -133,7 +133,7 @@ function sideMappedCube(geom,x,y,z) let u0 = 0.0 + bias; if (inFlipX.get()) { - [u1, u0] = [u0,u1] + [u1, u0] = [u0, u1]; } let v1 = 1.0 - bias; @@ -141,35 +141,35 @@ function sideMappedCube(geom,x,y,z) geom.setTexCoords([ // Front face - x*u0, y*v1, - x*u1, y*v1, - x*u1, y*v0, - x*u0, y*v0, + x * u0, y * v1, + x * u1, y * v1, + x * u1, y * v0, + x * u0, y * v0, // Back face - x*u1, y*v1, - x*u1, y*v0, - x*u0, y*v0, - x*u0, y*v1, + x * u1, y * v1, + x * u1, y * v0, + x * u0, y * v0, + x * u0, y * v1, // Top face - x*u0, z*v0, - x*u0, z*v1, - x*u1, z*v1, - x*u1, z*v0, + x * u0, z * v0, + x * u0, z * v1, + x * u1, z * v1, + x * u1, z * v0, // Bottom face - x*u1, y*v0, - x*u0, y*v0, - x*u0, y*v1, - x*u1, y*v1, + x * u1, y * v0, + x * u0, y * v0, + x * u0, y * v1, + x * u1, y * v1, // Right face - z*u1, y*v1, - z*u1, y*v0, - z*u0, y*v0, - z*u0, y*v1, + z * u1, y * v1, + z * u1, y * v0, + z * u0, y * v0, + z * u0, y * v1, // Left face - z*u0, y*v1, - z*u1, y*v1, - z*u1, y*v0, - z*u0, y*v0, + z * u0, y * v1, + z * u1, y * v1, + z * u1, y * v0, + z * u0, y * v0, ]); } @@ -185,54 +185,30 @@ function cubeMappedCube(geom, x, y, z, nx, ny, nz) const tc = []; tc.push( // Front face Z+ - flipx + sx + bias, sy * 2 - bias, - flipx + sx * 2 - bias, sy * 2 - bias, - flipx + sx * 2 - bias, sy + bias, - flipx + sx + bias, sy + bias, + flipx + sx + bias, sy * 2 - bias, flipx + sx * 2 - bias, sy * 2 - bias, flipx + sx * 2 - bias, sy + bias, flipx + sx + bias, sy + bias, // Back face Z- - flipx + sx * 4 - bias, sy * 2 - bias, - flipx + sx * 4 - bias, sy + bias, - flipx + sx * 3 + bias, sy + bias, - flipx + sx * 3 + bias, sy * 2 - bias); + flipx + sx * 4 - bias, sy * 2 - bias, flipx + sx * 4 - bias, sy + bias, flipx + sx * 3 + bias, sy + bias, flipx + sx * 3 + bias, sy * 2 - bias); if (inFlipX.get()) tc.push( // Top face - sx + bias, 0 - bias, - sx * 2 - bias, 0 - bias, - sx * 2 - bias, sy * 1 + bias, - sx + bias, sy * 1 + bias, + sx + bias, 0 - bias, sx * 2 - bias, 0 - bias, sx * 2 - bias, sy * 1 + bias, sx + bias, sy * 1 + bias, // Bottom face - sx + bias, sy * 3 + bias, - sx + bias, sy * 2 - bias, - sx * 2 - bias, sy * 2 - bias, - sx * 2 - bias, sy * 3 + bias + sx + bias, sy * 3 + bias, sx + bias, sy * 2 - bias, sx * 2 - bias, sy * 2 - bias, sx * 2 - bias, sy * 3 + bias ); else tc.push( // Top face - sx + bias, 0 + bias, - sx + bias, sy * 1 - bias, - sx * 2 - bias, sy * 1 - bias, - sx * 2 - bias, 0 + bias, + sx + bias, 0 + bias, sx + bias, sy * 1 - bias, sx * 2 - bias, sy * 1 - bias, sx * 2 - bias, 0 + bias, // Bottom face - sx + bias, sy * 3 - bias, - sx * 2 - bias, sy * 3 - bias, - sx * 2 - bias, sy * 2 + bias, - sx + bias, sy * 2 + bias); + sx + bias, sy * 3 - bias, sx * 2 - bias, sy * 3 - bias, sx * 2 - bias, sy * 2 + bias, sx + bias, sy * 2 + bias); tc.push( // Right face - flipx + sx * 3 - bias, 1.0 - sy - bias, - flipx + sx * 3 - bias, 1.0 - sy * 2 + bias, - flipx + sx * 2 + bias, 1.0 - sy * 2 + bias, - flipx + sx * 2 + bias, 1.0 - sy - bias, + flipx + sx * 3 - bias, 1.0 - sy - bias, flipx + sx * 3 - bias, 1.0 - sy * 2 + bias, flipx + sx * 2 + bias, 1.0 - sy * 2 + bias, flipx + sx * 2 + bias, 1.0 - sy - bias, // Left face - flipx + sx * 0 + bias, 1.0 - sy - bias, - flipx + sx * 1 - bias, 1.0 - sy - bias, - flipx + sx * 1 - bias, 1.0 - sy * 2 + bias, - flipx + sx * 0 + bias, 1.0 - sy * 2 + bias); + flipx + sx * 0 + bias, 1.0 - sy - bias, flipx + sx * 1 - bias, 1.0 - sy - bias, flipx + sx * 1 - bias, 1.0 - sy * 2 + bias, flipx + sx * 0 + bias, 1.0 - sy * 2 + bias); geom.setTexCoords(tc); } diff --git a/src/ops/base/Ops.Gl.Meshes.Cylinder_v2/Ops.Gl.Meshes.Cylinder_v2.js b/src/ops/base/Ops.Gl.Meshes.Cylinder_v2/Ops.Gl.Meshes.Cylinder_v2.js index cbada98688..e2e8a9868d 100644 --- a/src/ops/base/Ops.Gl.Meshes.Cylinder_v2/Ops.Gl.Meshes.Cylinder_v2.js +++ b/src/ops/base/Ops.Gl.Meshes.Cylinder_v2/Ops.Gl.Meshes.Cylinder_v2.js @@ -103,8 +103,7 @@ function buildMesh() { a = d + 1; indices.push( - d + (segments + 1), a, d, - d + (segments + 1), a + (segments + 1), a + d + (segments + 1), a, d, d + (segments + 1), a + (segments + 1), a ); } } @@ -211,13 +210,11 @@ function buildMesh() ) { indices.push( - o + 1, o + segments, o, - o + segments + 1, o + segments, o + 1 + o + 1, o + segments, o, o + segments + 1, o + segments, o + 1 ); } indices.push( - o + segments, a / 3 + x, a / 3 + segments + x, - o + segments, o, a / 3 + x + o + segments, a / 3 + x, a / 3 + segments + x, o + segments, o, a / 3 + x ); x += segments * 2; for ( @@ -227,13 +224,11 @@ function buildMesh() ) { indices.push( - o, o + segments, o + 1, - o + 1, o + segments, o + segments + 1 + o, o + segments, o + 1, o + 1, o + segments, o + segments + 1 ); } indices.push( - a / 3 + segments + x, a / 3 + x, o + segments, - a / 3 + x, o, o + segments + a / 3 + segments + x, a / 3 + x, o + segments, a / 3 + x, o, o + segments ); } } @@ -289,7 +284,7 @@ function buildMesh() outGeometry.setRef(geom); - if (!mesh) mesh = op.patch.cg.createMesh(geom); + if (!mesh) mesh = op.patch.cg.createMesh(geom, { "opId": op.id }); else mesh.setGeom(geom); needsRebuild = false; diff --git a/src/ops/base/Ops.Gl.Meshes.Rectangle_v3/Ops.Gl.Meshes.Rectangle_v3.js b/src/ops/base/Ops.Gl.Meshes.Rectangle_v3/Ops.Gl.Meshes.Rectangle_v3.js index ac4841f56d..50c931e074 100644 --- a/src/ops/base/Ops.Gl.Meshes.Rectangle_v3/Ops.Gl.Meshes.Rectangle_v3.js +++ b/src/ops/base/Ops.Gl.Meshes.Rectangle_v3/Ops.Gl.Meshes.Rectangle_v3.js @@ -180,7 +180,7 @@ function rebuild() const cgl = op.patch.cgl; - if (!mesh) mesh = op.patch.cg.createMesh(geom); + if (!mesh) mesh = op.patch.cg.createMesh(geom, { "opId": op.id }); else mesh.setGeom(geom); geomOut.set(null); diff --git a/src/ops/base/Ops.Gl.Meshes.Rectangle_v4/Ops.Gl.Meshes.Rectangle_v4.js b/src/ops/base/Ops.Gl.Meshes.Rectangle_v4/Ops.Gl.Meshes.Rectangle_v4.js index 3802f27867..0720b7684e 100644 --- a/src/ops/base/Ops.Gl.Meshes.Rectangle_v4/Ops.Gl.Meshes.Rectangle_v4.js +++ b/src/ops/base/Ops.Gl.Meshes.Rectangle_v4/Ops.Gl.Meshes.Rectangle_v4.js @@ -228,7 +228,7 @@ function rebuild() geom.tangents = tangents; geom.biTangents = biTangents; - if (!mesh) mesh = op.patch.cg.createMesh(geom); + if (!mesh) mesh = op.patch.cg.createMesh(geom, { "opId": op.id }); else mesh.setGeom(geom); geomOut.setRef(geom); diff --git a/src/ops/base/Ops.Gl.Meshes.Sphere_v3/Ops.Gl.Meshes.Sphere_v3.js b/src/ops/base/Ops.Gl.Meshes.Sphere_v3/Ops.Gl.Meshes.Sphere_v3.js index 257b66e58f..b6b7bf4afa 100644 --- a/src/ops/base/Ops.Gl.Meshes.Sphere_v3/Ops.Gl.Meshes.Sphere_v3.js +++ b/src/ops/base/Ops.Gl.Meshes.Sphere_v3/Ops.Gl.Meshes.Sphere_v3.js @@ -123,8 +123,7 @@ function buildMesh() for (j = 0; j < slices; j++, o++) { indices.push( - o, o + 1, o + slices + 1, - o + 1, o + slices + 2, o + slices + 1 + o, o + 1, o + slices + 1, o + 1, o + slices + 2, o + slices + 1 ); } o++; @@ -142,7 +141,7 @@ function buildMesh() outGeometry.setRef(geom); // if (!mesh) mesh = new CGL.Mesh(cgl, geom); - if (!mesh) mesh = op.patch.cg.createMesh(geom); + if (!mesh) mesh = op.patch.cg.createMesh(geom, { "opId": op.id }); else mesh.setGeom(geom); needsRebuild = false; From 50f91d171b0034e3ecd0618aec47afe7fb6f8da8 Mon Sep 17 00:00:00 2001 From: pandrr Date: Fri, 2 Feb 2024 16:53:54 +0100 Subject: [PATCH 06/12] glprimitive --- src/core/cgl/cgl_mesh.js | 4 ++-- src/libs/cgl/shadermodifier/cgl_shadermodifier.js | 2 +- .../Ops.Deprecated.Admin.TransformInstancedIndexed.js | 2 +- .../base/Ops.Dev.InstancedModulo/Ops.Dev.InstancedModulo.js | 2 +- .../Ops.Dev.LinesArrayFromTexture.js | 2 +- .../Ops.Gl.GLTF.GltfMorphTargets.js | 2 +- src/ops/base/Ops.Gl.GLTF.GltfSkin/Ops.Gl.GLTF.GltfSkin.js | 2 +- .../Ops.Gl.Matrix.ArrayPathFollowParticles_v2.js | 2 +- .../base/Ops.Gl.MeshInstancer_v4/Ops.Gl.MeshInstancer_v4.js | 2 +- src/ops/base/Ops.Gl.MeshMorph/Ops.Gl.MeshMorph.js | 2 +- .../Ops.Gl.Meshes.GeometryToTexture.js | 2 +- .../Ops.Gl.Meshes.GeometryToTexture_v2.js | 2 +- .../Ops.Gl.Meshes.MeshInstancerFromTexture.js | 2 +- .../Ops.Gl.Meshes.MeshInstancerFromTexture_v2.js | 2 +- .../Ops.Gl.Meshes.MeshInstancerFromTexture_v3.js | 2 +- .../Ops.Gl.Meshes.PointCloudFromTexture.js | 2 +- .../base/Ops.Gl.Shader.GetShader/Ops.Gl.Shader.GetShader.js | 2 +- .../Ops.Gl.ShaderEffects.AreaDiscardPixel_v2.js | 2 +- .../Ops.Gl.ShaderEffects.AreaRotate_v2.js | 2 +- .../Ops.Gl.ShaderEffects.AreaScaler_v3.js | 2 +- .../Ops.Gl.ShaderEffects.AreaTranslateMeshes_v2.js | 2 +- .../Ops.Gl.ShaderEffects.AreaTranslateMeshes_v3.js | 2 +- .../Ops.Gl.ShaderEffects.Bend_v2.js | 2 +- .../Ops.Gl.ShaderEffects.ClampVertexPosition_v2.js | 2 +- .../Ops.Gl.ShaderEffects.ColorArea_v3.js | 2 +- .../Ops.Gl.ShaderEffects.ColorArea_v4.js | 2 +- .../Ops.Gl.ShaderEffects.ColorArea_v5.js | 2 +- .../Ops.Gl.ShaderEffects.DeformArea.js | 2 +- .../Ops.Gl.ShaderEffects.DiscardMaterialAlpha.js | 2 +- .../Ops.Gl.ShaderEffects.ExplodeDividedMesh_v2.js | 2 +- .../Ops.Gl.ShaderEffects.FogEffect.js | 2 +- .../Ops.Gl.ShaderEffects.InstancedDisplacementMap.js | 2 +- .../Ops.Gl.ShaderEffects.InstancedDisplacementMap_v2.js | 2 +- .../Ops.Gl.ShaderEffects.InstancedPerlinPosition_v2.js | 2 +- .../Ops.Gl.ShaderEffects.InstancedTextureColorize.js | 2 +- .../Ops.Gl.ShaderEffects.MeshPixelNoise_v2.js | 2 +- .../Ops.Gl.ShaderEffects.ModuloVertexPosition.js | 2 +- .../Ops.Gl.ShaderEffects.PerlinAreaDeform_v4.js | 2 +- .../Ops.Gl.ShaderEffects.ScaleByNormal_v2.js | 2 +- .../Ops.Gl.ShaderEffects.SplineDeform_v2.js | 2 +- .../Ops.Gl.ShaderEffects.TextureProjection.js | 2 +- .../Ops.Gl.ShaderEffects.TextureProjection_v2.js | 2 +- .../Ops.Gl.ShaderEffects.TransformTextureCoordinates.js | 2 +- .../Ops.Gl.ShaderEffects.TransformVertex.js | 2 +- .../Ops.Gl.ShaderEffects.Twist_v3.js | 2 +- .../Ops.Gl.ShaderEffects.UseVertexColor.js | 2 +- .../Ops.Gl.ShaderEffects.VertexColorAsAlpha.js | 2 +- .../Ops.Gl.ShaderEffects.VertexDisplacementMap_v3.js | 2 +- .../Ops.Gl.ShaderEffects.VertexDisplacementMap_v4.js | 2 +- .../Ops.Gl.ShaderEffects.VertexNumberLimit_v2.js | 2 +- .../Ops.Gl.ShaderEffects.VertexPositionFromTexture_v2.js | 2 +- .../Ops.Gl.ShaderEffects.VertexWobble.js | 2 +- .../Ops.Gl.ShaderEffects.VertexWobble_v2.js | 2 +- 53 files changed, 54 insertions(+), 54 deletions(-) diff --git a/src/core/cgl/cgl_mesh.js b/src/core/cgl/cgl_mesh.js index e7784f0eea..16349475af 100644 --- a/src/core/cgl/cgl_mesh.js +++ b/src/core/cgl/cgl_mesh.js @@ -38,7 +38,7 @@ const Mesh = function (_cgl, __geom, options) this._geom = null; this._lastShader = null; this._numInstances = 0; - this._glPrimitive = options.glPrimitive || 0; + this._glPrimitive = options.glPrimitive || undefined; this.opId = options.opId || ""; this._preWireframeGeom = null; this.addVertexNumbers = false; @@ -724,7 +724,7 @@ Mesh.prototype.render = function (shader) MESH.lastMesh = this; let prim = this._cgl.gl.TRIANGLES; - if (this._glPrimitive) prim = this._glPrimitive; + if (this._glPrimitive !== undefined) prim = this._glPrimitive; if (shader.glPrimitive !== null) prim = shader.glPrimitive; let elementDiv = 1; diff --git a/src/libs/cgl/shadermodifier/cgl_shadermodifier.js b/src/libs/cgl/shadermodifier/cgl_shadermodifier.js index 6a2c33d81e..ec7c570d3f 100644 --- a/src/libs/cgl/shadermodifier/cgl_shadermodifier.js +++ b/src/libs/cgl/shadermodifier/cgl_shadermodifier.js @@ -18,7 +18,7 @@ class ShaderModifier this.needsTexturePush = false; this._lastShader = null; this._attributes = []; - if (options && options.op) this.opId = options.op; + if (options && options.opId) this.opId = options.opId; if (this._cgl.glVersion == 1) { diff --git a/src/ops/base/Ops.Deprecated.Admin.TransformInstancedIndexed/Ops.Deprecated.Admin.TransformInstancedIndexed.js b/src/ops/base/Ops.Deprecated.Admin.TransformInstancedIndexed/Ops.Deprecated.Admin.TransformInstancedIndexed.js index 81ac9033ba..99178997b3 100644 --- a/src/ops/base/Ops.Deprecated.Admin.TransformInstancedIndexed/Ops.Deprecated.Admin.TransformInstancedIndexed.js +++ b/src/ops/base/Ops.Deprecated.Admin.TransformInstancedIndexed/Ops.Deprecated.Admin.TransformInstancedIndexed.js @@ -60,7 +60,7 @@ const moduleFrag = null; inTex.onChange = updateLookupTexture; -const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); +const mod = new CGL.ShaderModifier(cgl, op.name, { "opId": op.id }); mod.addModule({ "title": op.name, "name": "MODULE_VERTEX_POSITION", diff --git a/src/ops/base/Ops.Dev.InstancedModulo/Ops.Dev.InstancedModulo.js b/src/ops/base/Ops.Dev.InstancedModulo/Ops.Dev.InstancedModulo.js index 82793948f0..f19cce8db8 100644 --- a/src/ops/base/Ops.Dev.InstancedModulo/Ops.Dev.InstancedModulo.js +++ b/src/ops/base/Ops.Dev.InstancedModulo/Ops.Dev.InstancedModulo.js @@ -10,7 +10,7 @@ inTrigger.onTriggered = render; const cgl = op.patch.cgl; -const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); +const mod = new CGL.ShaderModifier(cgl, op.name, { "opId": op.id }); mod.addModule({ "title": op.name, "name": "MODULE_VERTEX_POSITION", diff --git a/src/ops/base/Ops.Dev.LinesArrayFromTexture/Ops.Dev.LinesArrayFromTexture.js b/src/ops/base/Ops.Dev.LinesArrayFromTexture/Ops.Dev.LinesArrayFromTexture.js index c2535dfe97..b6b2662731 100644 --- a/src/ops/base/Ops.Dev.LinesArrayFromTexture/Ops.Dev.LinesArrayFromTexture.js +++ b/src/ops/base/Ops.Dev.LinesArrayFromTexture/Ops.Dev.LinesArrayFromTexture.js @@ -12,7 +12,7 @@ const cgl = op.patch.cgl; let mesh = null; let numVerts = 0; -const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); +const mod = new CGL.ShaderModifier(cgl, op.name, { "opId": op.id }); mod.addModule({ "priority": 0, "title": op.name, diff --git a/src/ops/base/Ops.Gl.GLTF.GltfMorphTargets/Ops.Gl.GLTF.GltfMorphTargets.js b/src/ops/base/Ops.Gl.GLTF.GltfMorphTargets/Ops.Gl.GLTF.GltfMorphTargets.js index be151e8a9c..4c785ffc54 100644 --- a/src/ops/base/Ops.Gl.GLTF.GltfMorphTargets/Ops.Gl.GLTF.GltfMorphTargets.js +++ b/src/ops/base/Ops.Gl.GLTF.GltfMorphTargets/Ops.Gl.GLTF.GltfMorphTargets.js @@ -13,7 +13,7 @@ const exec.onTriggered = update; const cgl = op.patch.cgl; -const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); +const mod = new CGL.ShaderModifier(cgl, op.name, { "opId": op.id }); let arr = []; let node = null; const tr = vec3.create(); diff --git a/src/ops/base/Ops.Gl.GLTF.GltfSkin/Ops.Gl.GLTF.GltfSkin.js b/src/ops/base/Ops.Gl.GLTF.GltfSkin/Ops.Gl.GLTF.GltfSkin.js index 3fd0e2a377..1ed5aba786 100644 --- a/src/ops/base/Ops.Gl.GLTF.GltfSkin/Ops.Gl.GLTF.GltfSkin.js +++ b/src/ops/base/Ops.Gl.GLTF.GltfSkin/Ops.Gl.GLTF.GltfSkin.js @@ -10,7 +10,7 @@ const exec.onTriggered = update; const cgl = op.patch.cgl; -const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); +const mod = new CGL.ShaderModifier(cgl, op.name, { "opId": op.id }); let arr = []; let node = null; const tr = vec3.create(); diff --git a/src/ops/base/Ops.Gl.Matrix.ArrayPathFollowParticles_v2/Ops.Gl.Matrix.ArrayPathFollowParticles_v2.js b/src/ops/base/Ops.Gl.Matrix.ArrayPathFollowParticles_v2/Ops.Gl.Matrix.ArrayPathFollowParticles_v2.js index db046646da..4294e3d1c8 100644 --- a/src/ops/base/Ops.Gl.Matrix.ArrayPathFollowParticles_v2/Ops.Gl.Matrix.ArrayPathFollowParticles_v2.js +++ b/src/ops/base/Ops.Gl.Matrix.ArrayPathFollowParticles_v2/Ops.Gl.Matrix.ArrayPathFollowParticles_v2.js @@ -17,7 +17,7 @@ let needsRebuild = true; let geom = null; let updateUniformPoints = false; -const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); +const mod = new CGL.ShaderModifier(cgl, op.name, { "opId": op.id }); mod.addModule({ "title": op.objName, "name": "MODULE_VERTEX_POSITION", diff --git a/src/ops/base/Ops.Gl.MeshInstancer_v4/Ops.Gl.MeshInstancer_v4.js b/src/ops/base/Ops.Gl.MeshInstancer_v4/Ops.Gl.MeshInstancer_v4.js index 18ffafcdf0..715a2bbe51 100644 --- a/src/ops/base/Ops.Gl.MeshInstancer_v4/Ops.Gl.MeshInstancer_v4.js +++ b/src/ops/base/Ops.Gl.MeshInstancer_v4/Ops.Gl.MeshInstancer_v4.js @@ -34,7 +34,7 @@ let arrayChangedTexcoords = true, arrayChangedTrans = true; -const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); +const mod = new CGL.ShaderModifier(cgl, op.name, { "opId": op.id }); mod.addModule({ "name": "MODULE_VERTEX_POSITION", "title": op.name, diff --git a/src/ops/base/Ops.Gl.MeshMorph/Ops.Gl.MeshMorph.js b/src/ops/base/Ops.Gl.MeshMorph/Ops.Gl.MeshMorph.js index c7591c994e..a94eab3015 100644 --- a/src/ops/base/Ops.Gl.MeshMorph/Ops.Gl.MeshMorph.js +++ b/src/ops/base/Ops.Gl.MeshMorph/Ops.Gl.MeshMorph.js @@ -37,7 +37,7 @@ const srcBodyVert = "" .endl(); -const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); +const mod = new CGL.ShaderModifier(cgl, op.name, { "opId": op.id }); mod.addUniform("f", "MOD_fade", 1); mod.addUniform("f", "MOD_doMorph", 1); mod.addModule({ diff --git a/src/ops/base/Ops.Gl.Meshes.GeometryToTexture/Ops.Gl.Meshes.GeometryToTexture.js b/src/ops/base/Ops.Gl.Meshes.GeometryToTexture/Ops.Gl.Meshes.GeometryToTexture.js index dd7437d962..45b52d7ef0 100644 --- a/src/ops/base/Ops.Gl.Meshes.GeometryToTexture/Ops.Gl.Meshes.GeometryToTexture.js +++ b/src/ops/base/Ops.Gl.Meshes.GeometryToTexture/Ops.Gl.Meshes.GeometryToTexture.js @@ -34,7 +34,7 @@ updateUI(); const drawBuffArr = [true, true]; const vertModTitle = "vert_" + op.name; -const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); +const mod = new CGL.ShaderModifier(cgl, op.name, { "opId": op.id }); mod.addModule({ "priority": 200, "title": vertModTitle, diff --git a/src/ops/base/Ops.Gl.Meshes.GeometryToTexture_v2/Ops.Gl.Meshes.GeometryToTexture_v2.js b/src/ops/base/Ops.Gl.Meshes.GeometryToTexture_v2/Ops.Gl.Meshes.GeometryToTexture_v2.js index 22a1ad16ce..c23bde5541 100644 --- a/src/ops/base/Ops.Gl.Meshes.GeometryToTexture_v2/Ops.Gl.Meshes.GeometryToTexture_v2.js +++ b/src/ops/base/Ops.Gl.Meshes.GeometryToTexture_v2/Ops.Gl.Meshes.GeometryToTexture_v2.js @@ -50,7 +50,7 @@ inAttrib.onChange = updateAttrib; updateUI(); const vertModTitle = "vert_" + op.name; -const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); +const mod = new CGL.ShaderModifier(cgl, op.name, { "opId": op.id }); mod.addModule({ "priority": 200, "title": vertModTitle, diff --git a/src/ops/base/Ops.Gl.Meshes.MeshInstancerFromTexture/Ops.Gl.Meshes.MeshInstancerFromTexture.js b/src/ops/base/Ops.Gl.Meshes.MeshInstancerFromTexture/Ops.Gl.Meshes.MeshInstancerFromTexture.js index b1ff8f9490..3c0b55359b 100644 --- a/src/ops/base/Ops.Gl.Meshes.MeshInstancerFromTexture/Ops.Gl.Meshes.MeshInstancerFromTexture.js +++ b/src/ops/base/Ops.Gl.Meshes.MeshInstancerFromTexture/Ops.Gl.Meshes.MeshInstancerFromTexture.js @@ -28,7 +28,7 @@ let arrayChangedColor = true, arrayChangedTrans = true; -const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); +const mod = new CGL.ShaderModifier(cgl, op.name, { "opId": op.id }); mod.addModule({ "name": "MODULE_VERTEX_POSITION", "title": op.name, diff --git a/src/ops/base/Ops.Gl.Meshes.MeshInstancerFromTexture_v2/Ops.Gl.Meshes.MeshInstancerFromTexture_v2.js b/src/ops/base/Ops.Gl.Meshes.MeshInstancerFromTexture_v2/Ops.Gl.Meshes.MeshInstancerFromTexture_v2.js index 808131479d..194e1d0ebf 100644 --- a/src/ops/base/Ops.Gl.Meshes.MeshInstancerFromTexture_v2/Ops.Gl.Meshes.MeshInstancerFromTexture_v2.js +++ b/src/ops/base/Ops.Gl.Meshes.MeshInstancerFromTexture_v2/Ops.Gl.Meshes.MeshInstancerFromTexture_v2.js @@ -33,7 +33,7 @@ let num = 0, arrayChangedTrans = true; -const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); +const mod = new CGL.ShaderModifier(cgl, op.name, { "opId": op.id }); mod.addModule({ "name": "MODULE_VERTEX_POSITION", "title": op.name, diff --git a/src/ops/base/Ops.Gl.Meshes.MeshInstancerFromTexture_v3/Ops.Gl.Meshes.MeshInstancerFromTexture_v3.js b/src/ops/base/Ops.Gl.Meshes.MeshInstancerFromTexture_v3/Ops.Gl.Meshes.MeshInstancerFromTexture_v3.js index 6bc65143fa..da64324b27 100644 --- a/src/ops/base/Ops.Gl.Meshes.MeshInstancerFromTexture_v3/Ops.Gl.Meshes.MeshInstancerFromTexture_v3.js +++ b/src/ops/base/Ops.Gl.Meshes.MeshInstancerFromTexture_v3/Ops.Gl.Meshes.MeshInstancerFromTexture_v3.js @@ -32,7 +32,7 @@ let num = 0, arrayChangedTrans = true; -const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); +const mod = new CGL.ShaderModifier(cgl, op.name, { "opId": op.id }); mod.addModule({ "name": "MODULE_VERTEX_POSITION", "title": op.name, diff --git a/src/ops/base/Ops.Gl.Meshes.PointCloudFromTexture/Ops.Gl.Meshes.PointCloudFromTexture.js b/src/ops/base/Ops.Gl.Meshes.PointCloudFromTexture/Ops.Gl.Meshes.PointCloudFromTexture.js index 5dd89d07b5..3f60970150 100644 --- a/src/ops/base/Ops.Gl.Meshes.PointCloudFromTexture/Ops.Gl.Meshes.PointCloudFromTexture.js +++ b/src/ops/base/Ops.Gl.Meshes.PointCloudFromTexture/Ops.Gl.Meshes.PointCloudFromTexture.js @@ -16,7 +16,7 @@ let currentNum = 0; op.toWorkPortsNeedToBeLinked(render, inTex); -const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); +const mod = new CGL.ShaderModifier(cgl, op.name, { "opId": op.id }); mod.addModule({ "priority": -10, "title": op.name, diff --git a/src/ops/base/Ops.Gl.Shader.GetShader/Ops.Gl.Shader.GetShader.js b/src/ops/base/Ops.Gl.Shader.GetShader/Ops.Gl.Shader.GetShader.js index c5522486ec..5aa788c97b 100644 --- a/src/ops/base/Ops.Gl.Shader.GetShader/Ops.Gl.Shader.GetShader.js +++ b/src/ops/base/Ops.Gl.Shader.GetShader/Ops.Gl.Shader.GetShader.js @@ -4,7 +4,7 @@ const outShader = op.outObject("Shader"); const cgl = op.patch.cgl; -const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); +const mod = new CGL.ShaderModifier(cgl, op.name, { "opId": op.id }); mod.addModule({ "priority": 2, diff --git a/src/ops/base/Ops.Gl.ShaderEffects.AreaDiscardPixel_v2/Ops.Gl.ShaderEffects.AreaDiscardPixel_v2.js b/src/ops/base/Ops.Gl.ShaderEffects.AreaDiscardPixel_v2/Ops.Gl.ShaderEffects.AreaDiscardPixel_v2.js index 75d448c075..d5c2922deb 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.AreaDiscardPixel_v2/Ops.Gl.ShaderEffects.AreaDiscardPixel_v2.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.AreaDiscardPixel_v2/Ops.Gl.ShaderEffects.AreaDiscardPixel_v2.js @@ -38,7 +38,7 @@ inInvert.onChange = inRepeat.onChange = inArea.onChange = updateDefines; -const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); +const mod = new CGL.ShaderModifier(cgl, op.name, { "opId": op.id }); mod.addModule({ "priority": 2, diff --git a/src/ops/base/Ops.Gl.ShaderEffects.AreaRotate_v2/Ops.Gl.ShaderEffects.AreaRotate_v2.js b/src/ops/base/Ops.Gl.ShaderEffects.AreaRotate_v2/Ops.Gl.ShaderEffects.AreaRotate_v2.js index 703238bf60..1787c20f01 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.AreaRotate_v2/Ops.Gl.ShaderEffects.AreaRotate_v2.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.AreaRotate_v2/Ops.Gl.ShaderEffects.AreaRotate_v2.js @@ -13,7 +13,7 @@ const srcBodyVert = "" .endl() + "pos=MOD_scaler(pos,mMatrix);" .endl(); -const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); +const mod = new CGL.ShaderModifier(cgl, op.name, { "opId": op.id }); mod.addModule({ "priority": 2, diff --git a/src/ops/base/Ops.Gl.ShaderEffects.AreaScaler_v3/Ops.Gl.ShaderEffects.AreaScaler_v3.js b/src/ops/base/Ops.Gl.ShaderEffects.AreaScaler_v3/Ops.Gl.ShaderEffects.AreaScaler_v3.js index cbdbe04207..0600d55c4a 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.AreaScaler_v3/Ops.Gl.ShaderEffects.AreaScaler_v3.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.AreaScaler_v3/Ops.Gl.ShaderEffects.AreaScaler_v3.js @@ -30,7 +30,7 @@ let moduleVert = null; // op.onDelete = exec.onLinkChanged = removeModule; inToZero.onChange = inSrc.onChange = inClampBool.onChange = updateToZero; -const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); +const mod = new CGL.ShaderModifier(cgl, op.name, { "opId": op.id }); mod.addModule({ "priority": 2, "title": "vert_" + op.name, diff --git a/src/ops/base/Ops.Gl.ShaderEffects.AreaTranslateMeshes_v2/Ops.Gl.ShaderEffects.AreaTranslateMeshes_v2.js b/src/ops/base/Ops.Gl.ShaderEffects.AreaTranslateMeshes_v2/Ops.Gl.ShaderEffects.AreaTranslateMeshes_v2.js index 4d95a15beb..268d3da827 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.AreaTranslateMeshes_v2/Ops.Gl.ShaderEffects.AreaTranslateMeshes_v2.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.AreaTranslateMeshes_v2/Ops.Gl.ShaderEffects.AreaTranslateMeshes_v2.js @@ -27,7 +27,7 @@ const srcBodyVert = "" let moduleVert = null; -const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); +const mod = new CGL.ShaderModifier(cgl, op.name, { "opId": op.id }); mod.addModule({ "title": op.name, "name": "MODULE_VERTEX_POSITION", diff --git a/src/ops/base/Ops.Gl.ShaderEffects.AreaTranslateMeshes_v3/Ops.Gl.ShaderEffects.AreaTranslateMeshes_v3.js b/src/ops/base/Ops.Gl.ShaderEffects.AreaTranslateMeshes_v3/Ops.Gl.ShaderEffects.AreaTranslateMeshes_v3.js index f428fc3bab..fd808f0f98 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.AreaTranslateMeshes_v3/Ops.Gl.ShaderEffects.AreaTranslateMeshes_v3.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.AreaTranslateMeshes_v3/Ops.Gl.ShaderEffects.AreaTranslateMeshes_v3.js @@ -26,7 +26,7 @@ const srcBodyVert = "" let moduleVert = null; -const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); +const mod = new CGL.ShaderModifier(cgl, op.name, { "opId": op.id }); mod.addModule({ "title": op.name, "name": "MODULE_VERTEX_POSITION", diff --git a/src/ops/base/Ops.Gl.ShaderEffects.Bend_v2/Ops.Gl.ShaderEffects.Bend_v2.js b/src/ops/base/Ops.Gl.ShaderEffects.Bend_v2/Ops.Gl.ShaderEffects.Bend_v2.js index 9fb0669d82..467b4eb2e2 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.Bend_v2/Ops.Gl.ShaderEffects.Bend_v2.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.Bend_v2/Ops.Gl.ShaderEffects.Bend_v2.js @@ -36,7 +36,7 @@ rotZ.onChange = invalidateMatrices; scale.onChange = invalidateMatrices; offset.onChange = invalidateMatrices; -const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); +const mod = new CGL.ShaderModifier(cgl, op.name, { "opId": op.id }); mod.addModule({ "name": "MODULE_VERTEX_POSITION", "srcHeadVert": attachments.bend_vert, diff --git a/src/ops/base/Ops.Gl.ShaderEffects.ClampVertexPosition_v2/Ops.Gl.ShaderEffects.ClampVertexPosition_v2.js b/src/ops/base/Ops.Gl.ShaderEffects.ClampVertexPosition_v2/Ops.Gl.ShaderEffects.ClampVertexPosition_v2.js index df0e403088..6337392df7 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.ClampVertexPosition_v2/Ops.Gl.ShaderEffects.ClampVertexPosition_v2.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.ClampVertexPosition_v2/Ops.Gl.ShaderEffects.ClampVertexPosition_v2.js @@ -12,7 +12,7 @@ let shader = null; let moduleVert = null; const vertModTitle = "vert_" + op.name; -const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); +const mod = new CGL.ShaderModifier(cgl, op.name, { "opId": op.id }); mod.addModule({ "priority": 2, "title": vertModTitle, diff --git a/src/ops/base/Ops.Gl.ShaderEffects.ColorArea_v3/Ops.Gl.ShaderEffects.ColorArea_v3.js b/src/ops/base/Ops.Gl.ShaderEffects.ColorArea_v3/Ops.Gl.ShaderEffects.ColorArea_v3.js index 0e5b4db1d8..586271c7d4 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.ColorArea_v3/Ops.Gl.ShaderEffects.ColorArea_v3.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.ColorArea_v3/Ops.Gl.ShaderEffects.ColorArea_v3.js @@ -56,7 +56,7 @@ inWorldSpace.onChange = render.onTriggered = doRender; const vertModTitle = "vert_" + op.name; -const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); +const mod = new CGL.ShaderModifier(cgl, op.name, { "opId": op.id }); mod.addModule({ "priority": 2, "title": vertModTitle, diff --git a/src/ops/base/Ops.Gl.ShaderEffects.ColorArea_v4/Ops.Gl.ShaderEffects.ColorArea_v4.js b/src/ops/base/Ops.Gl.ShaderEffects.ColorArea_v4/Ops.Gl.ShaderEffects.ColorArea_v4.js index 193bfc5e79..181dc8e399 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.ColorArea_v4/Ops.Gl.ShaderEffects.ColorArea_v4.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.ColorArea_v4/Ops.Gl.ShaderEffects.ColorArea_v4.js @@ -53,7 +53,7 @@ inWorldSpace.onChange = render.onTriggered = doRender; const vertModTitle = "vert_" + op.name; -const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); +const mod = new CGL.ShaderModifier(cgl, op.name, { "opId": op.id }); mod.addModule({ "priority": 2, "title": vertModTitle, diff --git a/src/ops/base/Ops.Gl.ShaderEffects.ColorArea_v5/Ops.Gl.ShaderEffects.ColorArea_v5.js b/src/ops/base/Ops.Gl.ShaderEffects.ColorArea_v5/Ops.Gl.ShaderEffects.ColorArea_v5.js index 20b3a7388d..6e987b3c37 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.ColorArea_v5/Ops.Gl.ShaderEffects.ColorArea_v5.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.ColorArea_v5/Ops.Gl.ShaderEffects.ColorArea_v5.js @@ -62,7 +62,7 @@ inSpace.onChange = render.onTriggered = doRender; const vertModTitle = "vert_" + op.name; -const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); +const mod = new CGL.ShaderModifier(cgl, op.name, { "opId": op.id }); mod.addModule({ "priority": 2, "title": vertModTitle, diff --git a/src/ops/base/Ops.Gl.ShaderEffects.DeformArea/Ops.Gl.ShaderEffects.DeformArea.js b/src/ops/base/Ops.Gl.ShaderEffects.DeformArea/Ops.Gl.ShaderEffects.DeformArea.js index 00e65c1490..9f135e5f5e 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.DeformArea/Ops.Gl.ShaderEffects.DeformArea.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.DeformArea/Ops.Gl.ShaderEffects.DeformArea.js @@ -22,7 +22,7 @@ const srcBodyVert = "" // let moduleVert = null; -const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); +const mod = new CGL.ShaderModifier(cgl, op.name, { "opId": op.id }); mod.addModule({ "title": op.name, "name": "MODULE_VERTEX_POSITION", diff --git a/src/ops/base/Ops.Gl.ShaderEffects.DiscardMaterialAlpha/Ops.Gl.ShaderEffects.DiscardMaterialAlpha.js b/src/ops/base/Ops.Gl.ShaderEffects.DiscardMaterialAlpha/Ops.Gl.ShaderEffects.DiscardMaterialAlpha.js index 8487abe68c..9e1bf7e5b5 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.DiscardMaterialAlpha/Ops.Gl.ShaderEffects.DiscardMaterialAlpha.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.DiscardMaterialAlpha/Ops.Gl.ShaderEffects.DiscardMaterialAlpha.js @@ -5,7 +5,7 @@ const inThresh = op.inValueSlider("Threshold", 0.3); const cgl = op.patch.cgl; -const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); +const mod = new CGL.ShaderModifier(cgl, op.name, { "opId": op.id }); let atc = false; diff --git a/src/ops/base/Ops.Gl.ShaderEffects.ExplodeDividedMesh_v2/Ops.Gl.ShaderEffects.ExplodeDividedMesh_v2.js b/src/ops/base/Ops.Gl.ShaderEffects.ExplodeDividedMesh_v2/Ops.Gl.ShaderEffects.ExplodeDividedMesh_v2.js index e2d6c0c429..0d1e9fce5e 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.ExplodeDividedMesh_v2/Ops.Gl.ShaderEffects.ExplodeDividedMesh_v2.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.ExplodeDividedMesh_v2/Ops.Gl.ShaderEffects.ExplodeDividedMesh_v2.js @@ -34,7 +34,7 @@ inAbsolute.onChange = function () mod.toggleDefine("MOD_ABSOLUTE", inAbsolute.get()); }; -const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); +const mod = new CGL.ShaderModifier(cgl, op.name, { "opId": op.id }); mod.addModule({ "title": op.objName, "name": "MODULE_VERTEX_POSITION", diff --git a/src/ops/base/Ops.Gl.ShaderEffects.FogEffect/Ops.Gl.ShaderEffects.FogEffect.js b/src/ops/base/Ops.Gl.ShaderEffects.FogEffect/Ops.Gl.ShaderEffects.FogEffect.js index 3066504331..8b4526a791 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.FogEffect/Ops.Gl.ShaderEffects.FogEffect.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.FogEffect/Ops.Gl.ShaderEffects.FogEffect.js @@ -47,7 +47,7 @@ const srcBodyFrag = "" const moduleFrag = null; const moduleVert = null; -const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); +const mod = new CGL.ShaderModifier(cgl, op.name, { "opId": op.id }); mod.addModule( { diff --git a/src/ops/base/Ops.Gl.ShaderEffects.InstancedDisplacementMap/Ops.Gl.ShaderEffects.InstancedDisplacementMap.js b/src/ops/base/Ops.Gl.ShaderEffects.InstancedDisplacementMap/Ops.Gl.ShaderEffects.InstancedDisplacementMap.js index e943f2b735..a10f416bfb 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.InstancedDisplacementMap/Ops.Gl.ShaderEffects.InstancedDisplacementMap.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.InstancedDisplacementMap/Ops.Gl.ShaderEffects.InstancedDisplacementMap.js @@ -36,7 +36,7 @@ inTrigger.onTriggered = render; const cgl = op.patch.cgl; -const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); +const mod = new CGL.ShaderModifier(cgl, op.name, { "opId": op.id }); mod.addModule({ "title": op.name, "name": "MODULE_VERTEX_POSITION", diff --git a/src/ops/base/Ops.Gl.ShaderEffects.InstancedDisplacementMap_v2/Ops.Gl.ShaderEffects.InstancedDisplacementMap_v2.js b/src/ops/base/Ops.Gl.ShaderEffects.InstancedDisplacementMap_v2/Ops.Gl.ShaderEffects.InstancedDisplacementMap_v2.js index e943f2b735..a10f416bfb 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.InstancedDisplacementMap_v2/Ops.Gl.ShaderEffects.InstancedDisplacementMap_v2.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.InstancedDisplacementMap_v2/Ops.Gl.ShaderEffects.InstancedDisplacementMap_v2.js @@ -36,7 +36,7 @@ inTrigger.onTriggered = render; const cgl = op.patch.cgl; -const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); +const mod = new CGL.ShaderModifier(cgl, op.name, { "opId": op.id }); mod.addModule({ "title": op.name, "name": "MODULE_VERTEX_POSITION", diff --git a/src/ops/base/Ops.Gl.ShaderEffects.InstancedPerlinPosition_v2/Ops.Gl.ShaderEffects.InstancedPerlinPosition_v2.js b/src/ops/base/Ops.Gl.ShaderEffects.InstancedPerlinPosition_v2/Ops.Gl.ShaderEffects.InstancedPerlinPosition_v2.js index 93858a836b..9c9b0323c2 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.InstancedPerlinPosition_v2/Ops.Gl.ShaderEffects.InstancedPerlinPosition_v2.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.InstancedPerlinPosition_v2/Ops.Gl.ShaderEffects.InstancedPerlinPosition_v2.js @@ -25,7 +25,7 @@ let srcBodyVert = "" .endl(); -const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); +const mod = new CGL.ShaderModifier(cgl, op.name, { "opId": op.id }); mod.addModule({ "name": "MODULE_VERTEX_POSITION", "srcHeadVert": attachments.perlin_instposition_vert, diff --git a/src/ops/base/Ops.Gl.ShaderEffects.InstancedTextureColorize/Ops.Gl.ShaderEffects.InstancedTextureColorize.js b/src/ops/base/Ops.Gl.ShaderEffects.InstancedTextureColorize/Ops.Gl.ShaderEffects.InstancedTextureColorize.js index f37ed4c9d7..c70583cef3 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.InstancedTextureColorize/Ops.Gl.ShaderEffects.InstancedTextureColorize.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.InstancedTextureColorize/Ops.Gl.ShaderEffects.InstancedTextureColorize.js @@ -18,7 +18,7 @@ inTrigger.onTriggered = render; const cgl = op.patch.cgl; -const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); +const mod = new CGL.ShaderModifier(cgl, op.name, { "opId": op.id }); mod.addModule({ "title": op.name, "name": "MODULE_VERTEX_POSITION", diff --git a/src/ops/base/Ops.Gl.ShaderEffects.MeshPixelNoise_v2/Ops.Gl.ShaderEffects.MeshPixelNoise_v2.js b/src/ops/base/Ops.Gl.ShaderEffects.MeshPixelNoise_v2/Ops.Gl.ShaderEffects.MeshPixelNoise_v2.js index c9937b5875..765f9d5095 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.MeshPixelNoise_v2/Ops.Gl.ShaderEffects.MeshPixelNoise_v2.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.MeshPixelNoise_v2/Ops.Gl.ShaderEffects.MeshPixelNoise_v2.js @@ -50,7 +50,7 @@ const srcBodyFrag = "" .endl() + "#endif" .endl(); -const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); +const mod = new CGL.ShaderModifier(cgl, op.name, { "opId": op.id }); mod.addModule({ "title": op.name, "name": "MODULE_VERTEX_POSITION", diff --git a/src/ops/base/Ops.Gl.ShaderEffects.ModuloVertexPosition/Ops.Gl.ShaderEffects.ModuloVertexPosition.js b/src/ops/base/Ops.Gl.ShaderEffects.ModuloVertexPosition/Ops.Gl.ShaderEffects.ModuloVertexPosition.js index 2312189307..30ce17f6f6 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.ModuloVertexPosition/Ops.Gl.ShaderEffects.ModuloVertexPosition.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.ModuloVertexPosition/Ops.Gl.ShaderEffects.ModuloVertexPosition.js @@ -5,7 +5,7 @@ const trigger = op.outTrigger("Trigger"); const cgl = op.patch.cgl; -const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); +const mod = new CGL.ShaderModifier(cgl, op.name, { "opId": op.id }); mod.addModule({ "name": "MODULE_VERTEX_POSITION", diff --git a/src/ops/base/Ops.Gl.ShaderEffects.PerlinAreaDeform_v4/Ops.Gl.ShaderEffects.PerlinAreaDeform_v4.js b/src/ops/base/Ops.Gl.ShaderEffects.PerlinAreaDeform_v4/Ops.Gl.ShaderEffects.PerlinAreaDeform_v4.js index 054ed78c27..5f7c5979b3 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.PerlinAreaDeform_v4/Ops.Gl.ShaderEffects.PerlinAreaDeform_v4.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.PerlinAreaDeform_v4/Ops.Gl.ShaderEffects.PerlinAreaDeform_v4.js @@ -19,7 +19,7 @@ const scrollz = op.inValueFloat("Scroll Z"); const cgl = op.patch.cgl; -const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); +const mod = new CGL.ShaderModifier(cgl, op.name, { "opId": op.id }); inFlipNormals.onChange = inCalcNormals.onChange = updateCalcNormals; diff --git a/src/ops/base/Ops.Gl.ShaderEffects.ScaleByNormal_v2/Ops.Gl.ShaderEffects.ScaleByNormal_v2.js b/src/ops/base/Ops.Gl.ShaderEffects.ScaleByNormal_v2/Ops.Gl.ShaderEffects.ScaleByNormal_v2.js index 08c3ad54cd..eb75ff4570 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.ScaleByNormal_v2/Ops.Gl.ShaderEffects.ScaleByNormal_v2.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.ScaleByNormal_v2/Ops.Gl.ShaderEffects.ScaleByNormal_v2.js @@ -8,7 +8,7 @@ const srcBodyVert = "" .endl() + "pos=MOD_scaler(pos,mat3(modelMatrix)*attrVertNormal);" .endl(); -const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); +const mod = new CGL.ShaderModifier(cgl, op.name, { "opId": op.id }); mod.addUniform("f", "MOD_strength", inStrength); mod.addModule({ "title": op.objName, diff --git a/src/ops/base/Ops.Gl.ShaderEffects.SplineDeform_v2/Ops.Gl.ShaderEffects.SplineDeform_v2.js b/src/ops/base/Ops.Gl.ShaderEffects.SplineDeform_v2/Ops.Gl.ShaderEffects.SplineDeform_v2.js index 5138e27923..c9a00f6fe9 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.SplineDeform_v2/Ops.Gl.ShaderEffects.SplineDeform_v2.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.SplineDeform_v2/Ops.Gl.ShaderEffects.SplineDeform_v2.js @@ -11,7 +11,7 @@ const srcBodyVert = attachments.splinedeform_vert || ""; let needsUpdate = true; -const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); +const mod = new CGL.ShaderModifier(cgl, op.name, { "opId": op.id }); mod.addModule({ "title": op.name, "name": "MODULE_VERTEX_POSITION", diff --git a/src/ops/base/Ops.Gl.ShaderEffects.TextureProjection/Ops.Gl.ShaderEffects.TextureProjection.js b/src/ops/base/Ops.Gl.ShaderEffects.TextureProjection/Ops.Gl.ShaderEffects.TextureProjection.js index 8a9369a3ab..0d82ba7d5e 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.TextureProjection/Ops.Gl.ShaderEffects.TextureProjection.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.TextureProjection/Ops.Gl.ShaderEffects.TextureProjection.js @@ -32,7 +32,7 @@ inBlend.onChange = inDiscard.onChange = inWorldSpace.onChange = inMethod.onChang op.setPortGroup("Rotation", [inRotX, inRotY, inRotZ]); op.setPortGroup("Position", [inPosX, inPosY]); -const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); +const mod = new CGL.ShaderModifier(cgl, op.name, { "opId": op.id }); mod.addModule({ "title": op.name, "name": "MODULE_VERTEX_POSITION", diff --git a/src/ops/base/Ops.Gl.ShaderEffects.TextureProjection_v2/Ops.Gl.ShaderEffects.TextureProjection_v2.js b/src/ops/base/Ops.Gl.ShaderEffects.TextureProjection_v2/Ops.Gl.ShaderEffects.TextureProjection_v2.js index b96fb12b71..67d1bb67e9 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.TextureProjection_v2/Ops.Gl.ShaderEffects.TextureProjection_v2.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.TextureProjection_v2/Ops.Gl.ShaderEffects.TextureProjection_v2.js @@ -34,7 +34,7 @@ inUseTexAlpha.onChange = op.setPortGroup("Rotation", [inRotX, inRotY, inRotZ]); op.setPortGroup("Position", [inPosX, inPosY]); -const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); +const mod = new CGL.ShaderModifier(cgl, op.name, { "opId": op.id }); mod.addModule({ "title": op.name, "name": "MODULE_VERTEX_POSITION", diff --git a/src/ops/base/Ops.Gl.ShaderEffects.TransformTextureCoordinates/Ops.Gl.ShaderEffects.TransformTextureCoordinates.js b/src/ops/base/Ops.Gl.ShaderEffects.TransformTextureCoordinates/Ops.Gl.ShaderEffects.TransformTextureCoordinates.js index c38f9ad377..844a019f6c 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.TransformTextureCoordinates/Ops.Gl.ShaderEffects.TransformTextureCoordinates.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.TransformTextureCoordinates/Ops.Gl.ShaderEffects.TransformTextureCoordinates.js @@ -13,7 +13,7 @@ const rot = op.inFloat("Rotation", 0); const cgl = op.patch.cgl; -const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); +const mod = new CGL.ShaderModifier(cgl, op.name, { "opId": op.id }); mod.addModule({ "priority": -2, diff --git a/src/ops/base/Ops.Gl.ShaderEffects.TransformVertex/Ops.Gl.ShaderEffects.TransformVertex.js b/src/ops/base/Ops.Gl.ShaderEffects.TransformVertex/Ops.Gl.ShaderEffects.TransformVertex.js index cc97a0b302..9b581bfad2 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.TransformVertex/Ops.Gl.ShaderEffects.TransformVertex.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.TransformVertex/Ops.Gl.ShaderEffects.TransformVertex.js @@ -15,7 +15,7 @@ const transNorm = op.inBool("Transform normals", false); const cgl = op.patch.cgl; -const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); +const mod = new CGL.ShaderModifier(cgl, op.name, { "opId": op.id }); mod.addModule({ "priority": -2, diff --git a/src/ops/base/Ops.Gl.ShaderEffects.Twist_v3/Ops.Gl.ShaderEffects.Twist_v3.js b/src/ops/base/Ops.Gl.ShaderEffects.Twist_v3/Ops.Gl.ShaderEffects.Twist_v3.js index e6539c6376..91a44fbba5 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.Twist_v3/Ops.Gl.ShaderEffects.Twist_v3.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.Twist_v3/Ops.Gl.ShaderEffects.Twist_v3.js @@ -9,7 +9,7 @@ const cgl = op.patch.cgl; axis.onChange = updateAxis; -const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); +const mod = new CGL.ShaderModifier(cgl, op.name, { "opId": op.id }); mod.addModule({ "name": "MODULE_VERTEX_POSITION", "srcHeadVert": attachments.twist_head_vert, diff --git a/src/ops/base/Ops.Gl.ShaderEffects.UseVertexColor/Ops.Gl.ShaderEffects.UseVertexColor.js b/src/ops/base/Ops.Gl.ShaderEffects.UseVertexColor/Ops.Gl.ShaderEffects.UseVertexColor.js index 4b32ed7719..cb85258568 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.UseVertexColor/Ops.Gl.ShaderEffects.UseVertexColor.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.UseVertexColor/Ops.Gl.ShaderEffects.UseVertexColor.js @@ -17,7 +17,7 @@ const srcBodyVert = "" render.onTriggered = doRender; const vertModTitle = "vert_" + op.name; -const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); +const mod = new CGL.ShaderModifier(cgl, op.name, { "opId": op.id }); mod.addModule({ "title": vertModTitle, "name": "MODULE_VERTEX_POSITION", diff --git a/src/ops/base/Ops.Gl.ShaderEffects.VertexColorAsAlpha/Ops.Gl.ShaderEffects.VertexColorAsAlpha.js b/src/ops/base/Ops.Gl.ShaderEffects.VertexColorAsAlpha/Ops.Gl.ShaderEffects.VertexColorAsAlpha.js index 00e44206c1..5412ace784 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.VertexColorAsAlpha/Ops.Gl.ShaderEffects.VertexColorAsAlpha.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.VertexColorAsAlpha/Ops.Gl.ShaderEffects.VertexColorAsAlpha.js @@ -22,7 +22,7 @@ inInput.onChange = render.onTriggered = doRender; -const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); +const mod = new CGL.ShaderModifier(cgl, op.name, { "opId": op.id }); mod.addModule({ "priority": 2, "title": op.name, diff --git a/src/ops/base/Ops.Gl.ShaderEffects.VertexDisplacementMap_v3/Ops.Gl.ShaderEffects.VertexDisplacementMap_v3.js b/src/ops/base/Ops.Gl.ShaderEffects.VertexDisplacementMap_v3/Ops.Gl.ShaderEffects.VertexDisplacementMap_v3.js index 9e244e53a4..55991f4135 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.VertexDisplacementMap_v3/Ops.Gl.ShaderEffects.VertexDisplacementMap_v3.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.VertexDisplacementMap_v3/Ops.Gl.ShaderEffects.VertexDisplacementMap_v3.js @@ -66,7 +66,7 @@ const srcBodyFrag = "" .endl(); -const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); +const mod = new CGL.ShaderModifier(cgl, op.name, { "opId": op.id }); mod.addModule({ "title": op.name, "name": "MODULE_VERTEX_POSITION", diff --git a/src/ops/base/Ops.Gl.ShaderEffects.VertexDisplacementMap_v4/Ops.Gl.ShaderEffects.VertexDisplacementMap_v4.js b/src/ops/base/Ops.Gl.ShaderEffects.VertexDisplacementMap_v4/Ops.Gl.ShaderEffects.VertexDisplacementMap_v4.js index 0b36e4ad9a..43ef0241cd 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.VertexDisplacementMap_v4/Ops.Gl.ShaderEffects.VertexDisplacementMap_v4.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.VertexDisplacementMap_v4/Ops.Gl.ShaderEffects.VertexDisplacementMap_v4.js @@ -59,7 +59,7 @@ const srcBodyFrag = "" .endl() + "#endif" .endl(); -const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); +const mod = new CGL.ShaderModifier(cgl, op.name, { "opId": op.id }); mod.addModule({ "title": op.name, "name": "MODULE_VERTEX_POSITION", diff --git a/src/ops/base/Ops.Gl.ShaderEffects.VertexNumberLimit_v2/Ops.Gl.ShaderEffects.VertexNumberLimit_v2.js b/src/ops/base/Ops.Gl.ShaderEffects.VertexNumberLimit_v2/Ops.Gl.ShaderEffects.VertexNumberLimit_v2.js index 9c55f7ae83..b6b33179a1 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.VertexNumberLimit_v2/Ops.Gl.ShaderEffects.VertexNumberLimit_v2.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.VertexNumberLimit_v2/Ops.Gl.ShaderEffects.VertexNumberLimit_v2.js @@ -32,7 +32,7 @@ const srcBodyFrag = "" .endl(); -const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); +const mod = new CGL.ShaderModifier(cgl, op.name, { "opId": op.id }); mod.addModule({ "title": op.name, diff --git a/src/ops/base/Ops.Gl.ShaderEffects.VertexPositionFromTexture_v2/Ops.Gl.ShaderEffects.VertexPositionFromTexture_v2.js b/src/ops/base/Ops.Gl.ShaderEffects.VertexPositionFromTexture_v2/Ops.Gl.ShaderEffects.VertexPositionFromTexture_v2.js index 21af9d77de..eb895510d2 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.VertexPositionFromTexture_v2/Ops.Gl.ShaderEffects.VertexPositionFromTexture_v2.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.VertexPositionFromTexture_v2/Ops.Gl.ShaderEffects.VertexPositionFromTexture_v2.js @@ -6,7 +6,7 @@ const const cgl = op.patch.cgl; -const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); +const mod = new CGL.ShaderModifier(cgl, op.name, { "opId": op.id }); mod.addModule({ "priority": 2, "title": op.name, diff --git a/src/ops/base/Ops.Gl.ShaderEffects.VertexWobble/Ops.Gl.ShaderEffects.VertexWobble.js b/src/ops/base/Ops.Gl.ShaderEffects.VertexWobble/Ops.Gl.ShaderEffects.VertexWobble.js index 84b58d4347..caad1242a0 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.VertexWobble/Ops.Gl.ShaderEffects.VertexWobble.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.VertexWobble/Ops.Gl.ShaderEffects.VertexWobble.js @@ -33,7 +33,7 @@ const srcHeadVert = ""; let startTime = CABLES.now() / 1000.0; -const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); +const mod = new CGL.ShaderModifier(cgl, op.name, { "opId": op.id }); mod.addModule({ "title": op.name, diff --git a/src/ops/base/Ops.Gl.ShaderEffects.VertexWobble_v2/Ops.Gl.ShaderEffects.VertexWobble_v2.js b/src/ops/base/Ops.Gl.ShaderEffects.VertexWobble_v2/Ops.Gl.ShaderEffects.VertexWobble_v2.js index 7358f225df..bd6a6cf77d 100644 --- a/src/ops/base/Ops.Gl.ShaderEffects.VertexWobble_v2/Ops.Gl.ShaderEffects.VertexWobble_v2.js +++ b/src/ops/base/Ops.Gl.ShaderEffects.VertexWobble_v2/Ops.Gl.ShaderEffects.VertexWobble_v2.js @@ -43,7 +43,7 @@ inArea.onChange = const srcHeadVert = ""; // let startTime = CABLES.now() / 1000.0; -const mod = new CGL.ShaderModifier(cgl, op.name, { "op": op }); +const mod = new CGL.ShaderModifier(cgl, op.name, { "opId": op.id }); mod.addModule({ "title": op.name, From fa23fb35bb5cf16c07141688a87fbb0efc278044 Mon Sep 17 00:00:00 2001 From: pandrr Date: Fri, 2 Feb 2024 16:55:59 +0100 Subject: [PATCH 07/12] arg --- .../Ops.Gl.Meshes.GeometryToTexture_v2.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/ops/base/Ops.Gl.Meshes.GeometryToTexture_v2/Ops.Gl.Meshes.GeometryToTexture_v2.js b/src/ops/base/Ops.Gl.Meshes.GeometryToTexture_v2/Ops.Gl.Meshes.GeometryToTexture_v2.js index 22a1ad16ce..e51f46299b 100644 --- a/src/ops/base/Ops.Gl.Meshes.GeometryToTexture_v2/Ops.Gl.Meshes.GeometryToTexture_v2.js +++ b/src/ops/base/Ops.Gl.Meshes.GeometryToTexture_v2/Ops.Gl.Meshes.GeometryToTexture_v2.js @@ -110,6 +110,8 @@ function updateRescale() mod.setUniformValue("MOD_mul", inResizeNewSize.get() / b._maxAxis); gotBounds = true; } + else + mod.setUniformValue("MOD_mul", 1); } function updateAttrib() From 1aff2f9729a93c51da6ae83e3f148b0fae00468c Mon Sep 17 00:00:00 2001 From: pandrr Date: Fri, 2 Feb 2024 17:00:43 +0100 Subject: [PATCH 08/12] glprimitive --- ....Deprecated.Gl.Meshes.RandomPointSphere.js | 2 +- .../Ops.Deprecated.Gl.Meshes.RandomPoints.js | 92 ++--- ....Deprecated.Gl.Particles.PointCloudFile.js | 138 ++++---- .../Ops.Deprecated.Gl.PointSpray.js | 2 +- ...l2.ForceField.ForceFieldParticleEmitter.js | 332 +++++++++--------- ...orceField.ForceFieldSimulationParticles.js | 332 +++++++++--------- .../Ops.Gl.Matrix.ArrayPathFollowParticles.js | 2 +- ...s.Gl.Matrix.ArrayPathFollowParticles_v2.js | 2 +- .../Ops.Gl.Meshes.PointCloudFromArray.js | 2 +- .../Ops.Gl.Meshes.PointCloudFromTexture.js | 2 +- .../Ops.Gl.Textures.Histogram.js | 2 +- 11 files changed, 449 insertions(+), 459 deletions(-) diff --git a/src/ops/base/Ops.Deprecated.Gl.Meshes.RandomPointSphere/Ops.Deprecated.Gl.Meshes.RandomPointSphere.js b/src/ops/base/Ops.Deprecated.Gl.Meshes.RandomPointSphere/Ops.Deprecated.Gl.Meshes.RandomPointSphere.js index 4bce514ca0..f0129fc710 100644 --- a/src/ops/base/Ops.Deprecated.Gl.Meshes.RandomPointSphere/Ops.Deprecated.Gl.Meshes.RandomPointSphere.js +++ b/src/ops/base/Ops.Deprecated.Gl.Meshes.RandomPointSphere/Ops.Deprecated.Gl.Meshes.RandomPointSphere.js @@ -109,7 +109,7 @@ function reset() // if(mesh) mesh.addVertexNumbers=true; // if(mesh) mesh.setGeom(geom); if (mesh)mesh.dispose(); - mesh = new CGL.Mesh(cgl, geom, cgl.gl.POINTS); + mesh = new CGL.Mesh(cgl, geom, { "glPrimitive": cgl.gl.POINTS }); mesh.addVertexNumbers = true; // mesh.setGeom(geom); } diff --git a/src/ops/base/Ops.Deprecated.Gl.Meshes.RandomPoints/Ops.Deprecated.Gl.Meshes.RandomPoints.js b/src/ops/base/Ops.Deprecated.Gl.Meshes.RandomPoints/Ops.Deprecated.Gl.Meshes.RandomPoints.js index e251db1b6b..c3f774b43c 100644 --- a/src/ops/base/Ops.Deprecated.Gl.Meshes.RandomPoints/Ops.Deprecated.Gl.Meshes.RandomPoints.js +++ b/src/ops/base/Ops.Deprecated.Gl.Meshes.RandomPoints/Ops.Deprecated.Gl.Meshes.RandomPoints.js @@ -1,14 +1,14 @@ -const exe=op.inTrigger("exe"); -var num=op.addInPort(new CABLES.Port(op,"num")); -var size=op.addInPort(new CABLES.Port(op,"size"),CABLES.OP_PORT_TYPE_VALUE); -var seed=op.addInPort(new CABLES.Port(op,"random seed")); -var scaleX=op.addInPort(new CABLES.Port(op,"scaleX",CABLES.OP_PORT_TYPE_VALUE,{ display:'range' })); -var scaleY=op.addInPort(new CABLES.Port(op,"scaleY",CABLES.OP_PORT_TYPE_VALUE,{ display:'range' })); -var scaleZ=op.addInPort(new CABLES.Port(op,"scaleZ",CABLES.OP_PORT_TYPE_VALUE,{ display:'range' })); +const exe = op.inTrigger("exe"); +let num = op.addInPort(new CABLES.Port(op, "num")); +let size = op.addInPort(new CABLES.Port(op, "size"), CABLES.OP_PORT_TYPE_VALUE); +let seed = op.addInPort(new CABLES.Port(op, "random seed")); +let scaleX = op.addInPort(new CABLES.Port(op, "scaleX", CABLES.OP_PORT_TYPE_VALUE, { "display": "range" })); +let scaleY = op.addInPort(new CABLES.Port(op, "scaleY", CABLES.OP_PORT_TYPE_VALUE, { "display": "range" })); +let scaleZ = op.addInPort(new CABLES.Port(op, "scaleZ", CABLES.OP_PORT_TYPE_VALUE, { "display": "range" })); // var round=op.inValueBool('round',false); -var cgl=op.patch.cgl; +let cgl = op.patch.cgl; scaleX.set(1); scaleY.set(1); @@ -16,72 +16,72 @@ scaleZ.set(1); function doRender() { - if(mesh) + if (mesh) { mesh.render(cgl.getShader()); if (cgl.shouldDrawHelpers(op)) { CABLES.GL_MARKER.drawCube(op, - size.get()/2*scaleX.get(), - size.get()/2*scaleY.get(), - size.get()/2*scaleZ.get()); + size.get() / 2 * scaleX.get(), + size.get() / 2 * scaleY.get(), + size.get() / 2 * scaleZ.get()); } } } -exe.onTriggered=doRender; +exe.onTriggered = doRender; -var mesh=null; -var geom=null; +var mesh = null; +let geom = null; function reset() { - geom=new CGL.Geometry(); - var verts=[]; - var n=Math.round(num.get())||1; - if(n<0)n=1; - var texCoords=[]; - var vertColors=[]; - verts.length=n*3; - texCoords.length=n*2; - vertColors.length=n*3; + geom = new CGL.Geometry(); + let verts = []; + let n = Math.round(num.get()) || 1; + if (n < 0)n = 1; + let texCoords = []; + let vertColors = []; + verts.length = n * 3; + texCoords.length = n * 2; + vertColors.length = n * 3; - Math.randomSeed=seed.get()+0.01; + Math.randomSeed = seed.get() + 0.01; - var sizeMul=size.get(); + let sizeMul = size.get(); - for(var i=0;inumPoints.get())particleSpawnStart=0; + if (particleSpawnStart > numPoints.get())particleSpawnStart = 0; - var perSecond=numPoints.get()/lifetime.get(); - var numSpawn=perSecond*Math.min(1/33,timeDiff); + let perSecond = numPoints.get() / lifetime.get(); + let numSpawn = perSecond * Math.min(1 / 33, timeDiff); uniSpawnFrom.setValue(particleSpawnStart); - uniSpawnTo.setValue(particleSpawnStart+numSpawn); - + uniSpawnTo.setValue(particleSpawnStart + numSpawn); + // op.log(particleSpawnStart,particleSpawnStart+numSpawn); // if(numSpawn>30) // console.log("should spawn",numSpawn); - particleSpawnStart+=numSpawn; - - - - - + particleSpawnStart += numSpawn; }; diff --git a/src/ops/base/Ops.Deprecated.Gl2.ForceField.ForceFieldSimulationParticles/Ops.Deprecated.Gl2.ForceField.ForceFieldSimulationParticles.js b/src/ops/base/Ops.Deprecated.Gl2.ForceField.ForceFieldSimulationParticles/Ops.Deprecated.Gl2.ForceField.ForceFieldSimulationParticles.js index 00cc9e77a6..3834215c25 100644 --- a/src/ops/base/Ops.Deprecated.Gl2.ForceField.ForceFieldSimulationParticles/Ops.Deprecated.Gl2.ForceField.ForceFieldSimulationParticles.js +++ b/src/ops/base/Ops.Deprecated.Gl2.ForceField.ForceFieldSimulationParticles/Ops.Deprecated.Gl2.ForceField.ForceFieldSimulationParticles.js @@ -1,98 +1,98 @@ -const render=op.inTrigger("render"); -const resetButton=op.inTriggerButton("Reset"); -const inSizeX=op.inValue("Size Area X",3); -const inSizeY=op.inValue("Size Area Y",3); -const inSizeZ=op.inValue("Size Area Z",3); -const numPoints=op.inValue("Particles",300); -const speed=op.inValue("Speed",0.2); -const lifetime=op.inValue("Lifetime",5); -const fadeInOut=op.inValueSlider("Fade Birth Death",0.2); -const show=op.inValueBool("Show"); -const posX=op.inValue("Pos X"); -const posY=op.inValue("Pos Y"); -const posZ=op.inValue("Pos Z"); -const spawns=op.inArray("Spawn Positions"); - -var cgl=op.patch.cgl; -var shaderModule=null; -var bufferB=null; -var verts=null; -var geom=null; -var mesh=null; -var shader=null; - -numPoints.onChange=reset; -inSizeX.onChange=reset; -inSizeY.onChange=reset; -inSizeZ.onChange=reset; -resetButton.onTriggered=reset; - -const id=CABLES.generateUUID(); - -var lastTime=0; -var mark=new CGL.Marker(cgl); -var needsRebuild=false; -var life; +const render = op.inTrigger("render"); +const resetButton = op.inTriggerButton("Reset"); +const inSizeX = op.inValue("Size Area X", 3); +const inSizeY = op.inValue("Size Area Y", 3); +const inSizeZ = op.inValue("Size Area Z", 3); +const numPoints = op.inValue("Particles", 300); +const speed = op.inValue("Speed", 0.2); +const lifetime = op.inValue("Lifetime", 5); +const fadeInOut = op.inValueSlider("Fade Birth Death", 0.2); +const show = op.inValueBool("Show"); +const posX = op.inValue("Pos X"); +const posY = op.inValue("Pos Y"); +const posZ = op.inValue("Pos Z"); +const spawns = op.inArray("Spawn Positions"); + +let cgl = op.patch.cgl; +let shaderModule = null; +let bufferB = null; +let verts = null; +let geom = null; +let mesh = null; +let shader = null; + +numPoints.onChange = reset; +inSizeX.onChange = reset; +inSizeY.onChange = reset; +inSizeZ.onChange = reset; +resetButton.onTriggered = reset; + +const id = CABLES.generateUUID(); + +let lastTime = 0; +let mark = new CGL.Marker(cgl); +let needsRebuild = false; +let life; function reset() { - needsRebuild=true; + needsRebuild = true; } function doReset() { // var stopwatch=new CABLES.StopWatch(); // mesh=null; - needsRebuild=false; - var i=0; - var num=Math.floor(numPoints.get())*3; - if(!verts || verts.length!=num) verts=new Float32Array(num); - if(!bufferB || bufferB.length!=num)bufferB=new Float32Array(num); + needsRebuild = false; + let i = 0; + let num = Math.floor(numPoints.get()) * 3; + if (!verts || verts.length != num) verts = new Float32Array(num); + if (!bufferB || bufferB.length != num)bufferB = new Float32Array(num); // stopwatch.stop('init'); - var sizeX=inSizeX.get(); - var sizeY=inSizeY.get(); - var sizeZ=inSizeZ.get(); + let sizeX = inSizeX.get(); + let sizeY = inSizeY.get(); + let sizeZ = inSizeZ.get(); - var pX=posX.get(); - var pY=posY.get(); - var pZ=posZ.get(); - var vl=verts.length; - for(i=0;inumPoints.get())particleSpawnStart=0; + if (particleSpawnStart > numPoints.get())particleSpawnStart = 0; - var perSecond=numPoints.get()/lifetime.get(); - var numSpawn=perSecond*Math.min(1/33,timeDiff); + let perSecond = numPoints.get() / lifetime.get(); + let numSpawn = perSecond * Math.min(1 / 33, timeDiff); uniSpawnFrom.setValue(particleSpawnStart); - uniSpawnTo.setValue(particleSpawnStart+numSpawn); + uniSpawnTo.setValue(particleSpawnStart + numSpawn); // op.log(particleSpawnStart,particleSpawnStart+numSpawn); // if(numSpawn>30) // console.log("should spawn",numSpawn); - particleSpawnStart+=numSpawn; - - - - - + particleSpawnStart += numSpawn; }; diff --git a/src/ops/base/Ops.Gl.Matrix.ArrayPathFollowParticles/Ops.Gl.Matrix.ArrayPathFollowParticles.js b/src/ops/base/Ops.Gl.Matrix.ArrayPathFollowParticles/Ops.Gl.Matrix.ArrayPathFollowParticles.js index 7f54dc7626..a1faaf1cc6 100644 --- a/src/ops/base/Ops.Gl.Matrix.ArrayPathFollowParticles/Ops.Gl.Matrix.ArrayPathFollowParticles.js +++ b/src/ops/base/Ops.Gl.Matrix.ArrayPathFollowParticles/Ops.Gl.Matrix.ArrayPathFollowParticles.js @@ -74,7 +74,7 @@ function rebuild() if (!mesh) { - mesh = new CGL.Mesh(cgl, geom, cgl.gl.POINTS); + mesh = new CGL.Mesh(cgl, geom, { "glPrimitive": cgl.gl.POINTS }); mesh.addVertexNumbers = true; mesh._verticesNumbers = null; diff --git a/src/ops/base/Ops.Gl.Matrix.ArrayPathFollowParticles_v2/Ops.Gl.Matrix.ArrayPathFollowParticles_v2.js b/src/ops/base/Ops.Gl.Matrix.ArrayPathFollowParticles_v2/Ops.Gl.Matrix.ArrayPathFollowParticles_v2.js index 4294e3d1c8..ee4e637b4b 100644 --- a/src/ops/base/Ops.Gl.Matrix.ArrayPathFollowParticles_v2/Ops.Gl.Matrix.ArrayPathFollowParticles_v2.js +++ b/src/ops/base/Ops.Gl.Matrix.ArrayPathFollowParticles_v2/Ops.Gl.Matrix.ArrayPathFollowParticles_v2.js @@ -72,7 +72,7 @@ function rebuild() if (!mesh) { - mesh = new CGL.Mesh(cgl, geom, cgl.gl.POINTS); + mesh = new CGL.Mesh(cgl, geom, { "glPrimitive": cgl.gl.POINTS }); mesh.addVertexNumbers = true; mesh._verticesNumbers = null; diff --git a/src/ops/base/Ops.Gl.Meshes.PointCloudFromArray/Ops.Gl.Meshes.PointCloudFromArray.js b/src/ops/base/Ops.Gl.Meshes.PointCloudFromArray/Ops.Gl.Meshes.PointCloudFromArray.js index 8acee6c7c2..5dbb7b47e0 100644 --- a/src/ops/base/Ops.Gl.Meshes.PointCloudFromArray/Ops.Gl.Meshes.PointCloudFromArray.js +++ b/src/ops/base/Ops.Gl.Meshes.PointCloudFromArray/Ops.Gl.Meshes.PointCloudFromArray.js @@ -217,7 +217,7 @@ function rebuild() geom.setTexCoords(texCoords); // if (mesh)mesh.dispose(); - if (!mesh)mesh = new CGL.Mesh(cgl, geom, cgl.gl.POINTS); + if (!mesh)mesh = new CGL.Mesh(cgl, geom, { "glPrimitive": cgl.gl.POINTS }); mesh.addVertexNumbers = true; mesh.setGeom(geom); diff --git a/src/ops/base/Ops.Gl.Meshes.PointCloudFromTexture/Ops.Gl.Meshes.PointCloudFromTexture.js b/src/ops/base/Ops.Gl.Meshes.PointCloudFromTexture/Ops.Gl.Meshes.PointCloudFromTexture.js index 3f60970150..6a28af2029 100644 --- a/src/ops/base/Ops.Gl.Meshes.PointCloudFromTexture/Ops.Gl.Meshes.PointCloudFromTexture.js +++ b/src/ops/base/Ops.Gl.Meshes.PointCloudFromTexture/Ops.Gl.Meshes.PointCloudFromTexture.js @@ -114,7 +114,7 @@ function setupMesh() if (mesh)mesh.dispose(); - if (numVerts > 0) mesh = new CGL.Mesh(cgl, geom, cgl.gl.POINTS); + if (numVerts > 0) mesh = new CGL.Mesh(cgl, geom, { "glPrimitive": cgl.gl.POINTS }); if (!mesh) return; mesh.addVertexNumbers = true; diff --git a/src/ops/base/Ops.Gl.Textures.Histogram/Ops.Gl.Textures.Histogram.js b/src/ops/base/Ops.Gl.Textures.Histogram/Ops.Gl.Textures.Histogram.js index 84219bae23..be7820859a 100644 --- a/src/ops/base/Ops.Gl.Textures.Histogram/Ops.Gl.Textures.Histogram.js +++ b/src/ops/base/Ops.Gl.Textures.Histogram/Ops.Gl.Textures.Histogram.js @@ -53,7 +53,7 @@ function setUpPointVerts() geom.setPointVertices(verts); geom.texCoords = texCoords; - meshPoints = new CGL.Mesh(cgl, geom, cgl.gl.POINTS); + meshPoints = new CGL.Mesh(cgl, geom, { "glPrimitive": cgl.gl.POINTS }); meshPoints.setGeom(geom); } From 6824dae77519f42731d637bc13a4c63b9157d73f Mon Sep 17 00:00:00 2001 From: pandrr Date: Fri, 2 Feb 2024 17:03:51 +0100 Subject: [PATCH 09/12] glprimitive --- src/core/cgl/cgl_mesh.js | 2 ++ src/core/cgl/cgl_state.js | 1 + 2 files changed, 3 insertions(+) diff --git a/src/core/cgl/cgl_mesh.js b/src/core/cgl/cgl_mesh.js index 16349475af..2d1db984c7 100644 --- a/src/core/cgl/cgl_mesh.js +++ b/src/core/cgl/cgl_mesh.js @@ -29,6 +29,7 @@ const Mesh = function (_cgl, __geom, options) this._cgl = _cgl; options = options || {}; + if (CABLES.UTILS.isNumeric(options))options = { "glPrimitive": options }; // old constructor fallback... this._log = new Logger("cgl_mesh"); this._bufVertexAttrib = null; this._bufVerticesIndizes = this._cgl.gl.createBuffer(); @@ -39,6 +40,7 @@ const Mesh = function (_cgl, __geom, options) this._lastShader = null; this._numInstances = 0; this._glPrimitive = options.glPrimitive || undefined; + this.opId = options.opId || ""; this._preWireframeGeom = null; this.addVertexNumbers = false; diff --git a/src/core/cgl/cgl_state.js b/src/core/cgl/cgl_state.js index e9f1a0a13b..aff59bec09 100644 --- a/src/core/cgl/cgl_state.js +++ b/src/core/cgl/cgl_state.js @@ -1246,6 +1246,7 @@ Context.prototype._setBlendMode = function (blendMode, premul) Context.prototype.createMesh = function (geom, options) { + if (CABLES.UTILS.isNumeric(options))options = { "glPrimitive": options }; // old constructor fallback... return new CGL.Mesh(this, geom, options); }; From 045d775c1128dd9bb27085a0126ad3e54ab23df2 Mon Sep 17 00:00:00 2001 From: pandrr Date: Fri, 2 Feb 2024 17:14:30 +0100 Subject: [PATCH 10/12] glprimitive --- src/core/cgl/cgl_mesh.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/core/cgl/cgl_mesh.js b/src/core/cgl/cgl_mesh.js index 2d1db984c7..0b28fd770e 100644 --- a/src/core/cgl/cgl_mesh.js +++ b/src/core/cgl/cgl_mesh.js @@ -24,12 +24,12 @@ MESH.lastMesh = null; * mesh.render(cgl.getShader()); * } */ -const Mesh = function (_cgl, __geom, options) +const Mesh = function (_cgl, __geom, _options) { this._cgl = _cgl; - options = options || {}; - if (CABLES.UTILS.isNumeric(options))options = { "glPrimitive": options }; // old constructor fallback... + let options = _options || {}; + if (CABLES.UTILS.isNumeric(options))options = { "glPrimitive": _options }; // old constructor fallback... this._log = new Logger("cgl_mesh"); this._bufVertexAttrib = null; this._bufVerticesIndizes = this._cgl.gl.createBuffer(); @@ -40,6 +40,7 @@ const Mesh = function (_cgl, __geom, options) this._lastShader = null; this._numInstances = 0; this._glPrimitive = options.glPrimitive || undefined; + console.log("glPrimitive", this._glPrimitive); this.opId = options.opId || ""; this._preWireframeGeom = null; From 9a2f995ff8de558d5e27978f5fb2015d9f616577 Mon Sep 17 00:00:00 2001 From: pandrr Date: Fri, 2 Feb 2024 17:18:35 +0100 Subject: [PATCH 11/12] glprimitive --- src/core/cgl/cgl_mesh.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/core/cgl/cgl_mesh.js b/src/core/cgl/cgl_mesh.js index 0b28fd770e..2405882d82 100644 --- a/src/core/cgl/cgl_mesh.js +++ b/src/core/cgl/cgl_mesh.js @@ -39,8 +39,7 @@ const Mesh = function (_cgl, __geom, _options) this._geom = null; this._lastShader = null; this._numInstances = 0; - this._glPrimitive = options.glPrimitive || undefined; - console.log("glPrimitive", this._glPrimitive); + this._glPrimitive = options.glPrimitive; this.opId = options.opId || ""; this._preWireframeGeom = null; From 06c1d32098ff29ec1b7ff5fcb7773952226a4894 Mon Sep 17 00:00:00 2001 From: pandrr Date: Mon, 5 Feb 2024 12:26:26 +0100 Subject: [PATCH 12/12] dev changes --- src/ops/base/Ops.Anim.LFO/screenshot.png | Bin 7673 -> 7735 bytes .../base/Ops.Gl.CanvasFocus/screenshot.png | Bin 93014 -> 38497 bytes ...s.Gl.ImageCompose.RandomNumberTexture.json | 42 +++++++++++------- .../att_noise.frag | 4 +- .../Ops.Gl.Shader.PointMaterial_v5.md | 9 +++- .../att_pointmat.frag | 19 ++++++-- .../Ops.Sidebar.SideBarImage.js | 31 +++++++++---- .../Ops.Sidebar.SideBarImage.json | 19 +++++--- .../Ops.Sidebar.SideBarImage/screenshot.png | Bin 4783 -> 4792 bytes 9 files changed, 88 insertions(+), 36 deletions(-) diff --git a/src/ops/base/Ops.Anim.LFO/screenshot.png b/src/ops/base/Ops.Anim.LFO/screenshot.png index a343883756d58a063198a45bc3dc959c24f37279..dc2bfa7c915a7d269e0c612033d7951a2fe723c5 100644 GIT binary patch literal 7735 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 literal 7673 zcmeHMc|276`#*D>VaC=Nl8QQ#Hx;)mDa@2Bx?x-rvVEVa?(g>h@1NiA_4>|V^E%6Cc|Pyud7kr&v*RWy@g?F2 zf=Jm|Z`gt$C>ud20W?v#^6&@S%?P5zwb@|4Ez)j?L zFmA~)&5W;8;K=zea}jJJlZ_~}hx9RpgTqCP(EmCzgC@&B?k&0D{drXcn~emBepv$r z-HxIx_j~DfU#DguPri;!;PwO}8CVfY|2j3wS^RZm+7UX9yT_`Z zAD)z68aHM6ddH^b(TcgT&>TNMzxuhKr=~yYZ`E$M0GQeWLM{h+Xp*96aB%SYLihQY z%a@w;A{R6LjIMM5+Hi9Mu^+g#gl>m=Gc}9)J*Kj5erN z(ig<5P4teSX6Oxkrb+!G2I3$}L91zlwY?F6e}rSf^r;9GJ59y7e-0PsaHY|U@w@{z zO^%#yuF{gBRE%~;o`KkvH@~4jR@L*GtZp^RYwlTY*iqpwML|X2HFDC?fs@9ao}MmF z2|ZV)Q%&9ue^5nZ7;}f2$_YVe1{cIIKhuVUGC*E0&;;2A;xs}6^P4KY*kIaz;$~#`en&gFo=&y zp$=*y9!87POsS5KP?SqhBUqjkO32H0cLmajx_d4^!~ZukGqc>-YaKE;!MVgn+;9CP z@4z}qj8DwQUVXb|Br_`16~!I^#d-&G&JjkWW5%K4zkS4Y)+Wo_v$+zmCW%O2Tik}z zdzsfX*GaWMzq^cye^G*ArgdaqHY2h_Ba%r$r9do19k!ulEw!p{Lhy3v{rmT&-r^qt zszd~ZQWBlewuvP|J{8PXzr86@(ZDstDClzu8vA*9BT7HH(7JQhE1k-{IrerCqbaK3 z$guL>Nc zN?A@K@jZEeV!l$+d!My-hA`?F_v(w9<3t?UIx$aY&-!~E#b_1u`=F2`No-^?%5zxs z^9DCjOxQ}*1#0M0+9ffY%q^!O2Ao+}V~uwAyqMRYS7bhz7E3?N6{k?jNw!Ki)ju#5qnJ zM8fD5jT}!k3hD&M=5#YkhMa@j9q(eyCW1@F>5SuY3`FJCjR3Tq+C|kudUBb~IKe4^ z!!P@}-GSv#p*SO5QTG*d5t4)#iI}Tudey|JPf1e(F^vy&s<(ckF(O?FB*yjWdm2Vt zDaP%ajcZE6mx1mMXy8crV8MCXzLlvlD%PQs-2pL*#}M)th~O_-JN95!5|>1Ye1M_N3MDQE<&JmUK(Ch1Myx4Y0YpJ5_crJlM1N3Mi< z=3u#U*42`Oqk^>fH@kp>OrT&{(~tC%GS)AtrPFJ7Kgdo;$Q>~9j@q0g!iK!$!@X4E z6{?_p9w8mz$Q%@uju64*nJjbfxuJCr3seaHa5MSBKMGUv1TpMq>m3j@JbI z%A_f(wiw}40~r^uG)B=FnIJLQ7bMyVh<1k$k#Q(dlCz76mz-lG6^k#6$TTt{}>ZiByXZ^mYj*%q@3mc>IAEZjTpA`I_YQR^OvAU>!0oL{~M$2gCz#B2N25Oj%@BK;2#ymeC6|*Xl=is&(#EcRJe1sq-~<)ALwnKlGaR8E~6iYRRck| z667vHzCrD1-r*wt)7ix9;z^c=83oM(_GP6R;}rC^H&cG*@d^;oL%J}yB#MR0DvV!O zZc19#)XYTI2_2jtN5zP(=4|c_bd#^VuSg!hJkU-FHY5rgidS1j5(~-NyBxb(7d5Ui zosqc_!gyJ>-5j@PNyXcBrt}!x8Xmcxaq!;28OQ+03^>3Hx)S`;#%@^hKk@7uy)57K z@pPLj=jQw7edb~l4;X=3W5z(D&)ky2&LWXhW7al-w3@E(V*VV@6^=6uvrkADrVz?x zU+<2y4?p$0+W84+cT6hM^Lv3%J_J(KWBy*fh2S?fOUa2Yl|0D=e1lEIoNJ*7k$wa#IunX7ZUg4&i1V0l=!G)uVc)r_y4)ruvnSklmd&YV&$DUx!gvd zdO@kT{EfAnTtO)Vfk}afd>zd>tHd6>!F7HSiMeQJ=eh zM-wJQT?bCDX5u42%E)j+S=hO#UDTlmixMd(b za|Yt47KXqAyR#7T1_YtwX+a{FMRo>HR%AR(Ql7AlT1G+B0Ts60w_MSU zSk;mG^y%K-i^ppK%>>_!LK!hrZ(c$09mx}GW4l&8xy<*nn9D)Py)al=vWG7DJGE-~ zES*eSklQDNkEFt485!!ZSamW8Y$9-INsz;83K|8E`!>7Svlfxk5wksqZ%TaK0|21t z*>~?(>QxdG-Sz1_9sZy30Z|yOOBF|Ye*4n~%-ROuJ`sGKr^Dd^o{ed6&{g@OXgqaG z`1~L$z0BY$AXpy|tZyr}B2_ar+@n>8HC$AfO)LTxw^MI3XQdL)`us9TF{yLUfuohc zQKM@j%toel_00PpLfT^r&k}C%Y@mPJMm|oKHq~nu3TS2l+-wjn9|(?*yV4or81Y6p zi2iP`bgT+U(QQ&>2G&Yr=b8LvYycSi2ubb4?E^c}A?g<1eEFI+?6O{VIz^lmD*gk>Y74pnOqaEKn-P}Gw5}70T>UXUWRpYI7y~aUgAJDD_sY10dXnLy+ak%zv&W1bLS?U(s9 zbO#nA&3~v6=?~=qHxV98Wcxbezz8`ct>145TLmjjul66pL?vo!Yje)#-G4Yb71tzY z9t|?U`4u>DGqByB#S}V8_D(tNc!U&#O^7v^0(#;kF7?pf1oCIpfP64!QP;Xabv+W) z&0JOs;)O1NxGp#x1vW4*Z(SofI2(6J;v1SMXr(G3vD7a9g`W?8i}z<{(rV+k%5BsM zP6}-JYQ`#MJ$ro5qLx11_8o8UgI0pv1|5Ir3|hG*{I{;zEYrTd>MffHWbnCNIzwSq zYKcU^MDW0IBO?mB6xOixM`JlMj2y0JhtEG#_nyT*L40BlUSp#7sKx@cYAj+h(gW7} z&$ATtY93Fj>+fl@S`c*J2gPmye2NYgp5-c|-FHvh)hC=xN&}DKu#rgo&Q=*~nSoM? zfoH*wS_{&Mvuq@@Ex3(oXwR{v$<0YGU8D}oV*v+QAy-vWS2`PEpBghR*|=zurU0qp z{#9xr`NVGwjTt556^?M80JIRKYAe%PHeU|xq4eE0UD6(&ye%kD3#lNEG6vSgC8Qjc zW#W3)1fqxuN--w&(9GoigK=?rx58crKf2>CM?p=%c}*IOwIEfJ&{7Ve$LpJ(wX3t6 z^qTu1Ow>-mGN0`^z|6E~(b-MAUY{~=xxw3Mx!nj-GN==mSq*If);hAJ$W5Z=4b56i zJQd{aiWB=2-F`*L{bUY*t<7yA9$o{gM&#Wgd>N=6qh=;*qkohi?^92m>P(cd#^dr( zlw$*2*-MT;8wtHOX{>Q$zV=v6)B5h#?+YHXUS`Fk2b-(tPVKh^%64AQ%O0@|KK6FUL9BIuU)$W(HeWUy9KOXC3gn zeDkERB`9#<1!dnKRvQ_aTUoW|b|iM!MQh4og7i_-Z|Z<#G+Hp(?OBC?5wcV*@bL)X zML0u2Y37FAXlI;>L8mgEp#ffbHuwTcd#nQ0f!D4<(Wm+)8EcQypTKys?;OWeD^)n$%~NqB`ReRk70h^44}6Ha8bu&aFyz;8YT2BjtB2 zY5UAFA3+WSbwFfVqb!XvnM1UVsAK2-q1>6o1EBKerlAXa#v%$0Ovv&hGbR+&hdPLa z4;59>1~pogXRezDNp|jcR)qX$5Abx4*N*MjTe-~fi@v#So@Og{(@9}!XAOx~TGe$| zR9Adk9FG^#S1mX5h7}2H=>wpLYTss|y_m7jr&`yU$w>vV_mANnLwBfi6uREgwk;f} znlAr%Plwg^dub4g6AQys@ z_v6?KbTRsiVE*UDhCA-K*x-;`*ykbRvXfT$_-q`?@uQ>v&Ls=y*uST8>5F(kp%TPB z*~dkel)|2gaEgzE(o zPbgqEfcTyI$<2U#g$|?gNU+l{{vg#ZAk{C8-m8_|7P`o=>5pJeTmmA1*KL)}^uece zUi4XVVi_L>W%tGc=QMG|Otb$02D}mBkIvQiSuqv>Aj6>gFbQ{Yz}A3u$*eS*2{JH~ zwq$efLp1I`xoLo2q;3%b1z)@_>M2an1DAX5COdITh`*9>l=b>TSs029L$n1yj;=&2 z(O)twYUgz$dR!cF$S3UIl^WAcze^2Y{9>5*zpW3Dfze=rk*g9I5h(u^5+SQGrUj>| zJ|gL`x(wbz5Xiok4XO-7Th3VDX203+Rym^u6jUD`)(>k~LX(pjs1geNDN3n56sF+W zYcGc3fDok!iqEGfnLaL%;(=EMEP*W3n)9kWzT(5Q^YprN2&o3hOS4)P&pn0u=ujo% zHaRB!EQ9N%flF>(TXYn1*}s%qrsu?^vMzs{)yU*4q9%12-}{elvt@G&A$Em_eVuS` zjwht{b7$@9oAN$08CbK`q&NtyYa5-^nGSjpmayXA2Lq&-x z;n&v4wA-<{8Zg0`nlUC#-aVM<(W6;mx~z83&hFPZP47-fcaA)XWK*4kUT*xE|!C4YSXIh@5Aj4%GJUvhn8VCU24UKAl&!#p9st zkX}H+-9C`!!mO}krKI@%-L@yiOsq3J9Fy%wT?FUx7Hj3%8tRE zvGMySXkFSR50iQ8)E8lb&7+Di+GD`}(^pG1RYtCJ^PzUYm*3fEE!^f-;85q zs*^sWucRcEtad>%56vL0ZnH!uX6E-ZKA&Dm*`K$9CdxmRNeUx#-OP0d2CDL4^C^sG z0L))%u$f*5~j8= z|IS#%6AjGK*!}EA$SdoiE4zbWS&)CdZtmmL6CRz0DlP=#utW?^qleMsEciR)cfo1G zgijDMiVCfww?18In(y78r^)$R!4ThJgNWlFqKWuOInkD77Bt>GP5IJ*qA5ZQmc1X^ zht(~d{JZyIGxB0w8T)KGjC@GMTnEpuE|(K}!kWOTM-^jJUAH1mtN`O%4avCY!=m!b z!kVCLPdLRZx%gL*HF!sU-+9#u*@3!gb>w4~$3hw0*$d*?y}mFQPrWr=erIo`WR179 zu-}4^!sd-(w7=TOR(#h)vkr$;2NyJji>9?DrwOtY#{SK0kzUA)bSTcY!S!uJC7A|f zD>ASh~6zPls$PtRxV;Y;DZ z-GCdo^R$H;DD2Rzce0}iQ!a$;1#9Sil5>jd1U(X>{o^ajhs1BTC=IL{LXORgYd}Bc zYs2QLuxn%{t`oCGHZ9t7L4 zoXRov;JP*BI5p*Pg;IlufP6&ORO&M)RY(5*Tc+@ocl5sJ3!zD206{mnUXr?jY&9Wc zMOkl33qknKfw!Kk+OEAHy(SR(Fjrr(*-eiEaHO%*R^Jc3g>B)9X&}3wRPKeSJ3-Wo z)m`P(Qa}0{X2jhS6@H|!{|-kSJLMB?p~92gH=(KGVwxqCZ`W?`MzJjrurrQ@w=WTGi~$ut+vF@5m9Y{>L|1!VTm88!RQxvE z1L|-O*n?}mi`O>JqiEFUqqZ^YEKCJ$M1_t}s@p<$3;wO86*ES!?seA*aSvxV0=>YN zBMc2Sy;rK+Ghz~@Qu~CR0bRJN0F2bT7sTPag@nM`z#_p@l2Gz4s&begS{X6rfqviS-Gq@DV#!t@+Nvtc^#^?g>>1vRhVjUBL-J zdlOM{dS+PXP2cI^(TbU$XH9H{z#UM>k&o}Moe;L1gdd9HU;-%`D7Emyf4>v`_v6PK-_%*+vH!61T`TBNk1b#Lf9XH&tU>*JsW9=0o diff --git a/src/ops/base/Ops.Gl.CanvasFocus/screenshot.png b/src/ops/base/Ops.Gl.CanvasFocus/screenshot.png index a871d893a558f6bf8a3bc5cc1c4ede428ea1447b..4d0d09ba51cf275a679f9bd3b5795f72067e8bd5 100644 GIT binary patch literal 38497 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 O{xsEeR6i"; + } + + // else + // label.innerHTML = ""; + + label.innerHTML = ""; + imageEle = label.children[0]; + outImage.setRef(imageEle); + } - if (base64regex.test(fileUrl)) - label.innerHTML = ""; - else - // if (fileUrl.indexOf("/") == 0 || fileUrl.indexOf("http") == 0) - label.innerHTML = ""; + imageEle.setAttribute("src", fileUrl); } function onParentChanged() diff --git a/src/ops/base/Ops.Sidebar.SideBarImage/Ops.Sidebar.SideBarImage.json b/src/ops/base/Ops.Sidebar.SideBarImage/Ops.Sidebar.SideBarImage.json index c15a099cbe..bd4761ba1d 100644 --- a/src/ops/base/Ops.Sidebar.SideBarImage/Ops.Sidebar.SideBarImage.json +++ b/src/ops/base/Ops.Sidebar.SideBarImage/Ops.Sidebar.SideBarImage.json @@ -11,6 +11,12 @@ "type": "rename", "author": "pandur", "date": 1672828372250 + }, + { + "message": "Added Image Element output", + "type": "feature", + "author": "pandur", + "date": 1707129926541 } ], "authorName": "pandur", @@ -18,24 +24,27 @@ "layout": { "portsIn": [ { - "type": 2, + "type": "2", "name": "link" }, { - "type": 5, + "type": "5", "name": "File" } ], "portsOut": [ { - "type": 2, + "type": "2", "name": "childs" + }, + { + "type": "2", + "name": "Image Element", + "objType": "element" } ] }, "summary": "Display an image in the sidebar", - - "exampleProjectId": "nLvdby", "docs": { "ports": [] diff --git a/src/ops/base/Ops.Sidebar.SideBarImage/screenshot.png b/src/ops/base/Ops.Sidebar.SideBarImage/screenshot.png index 929805106097f537f08964e86a8e87a943de24fc..279064a23c6d7b44bec46d92192d9f2379d96790 100644 GIT binary patch literal 4792 zcmeAS@N?(olHy`uVBq!ia0y~yU}|7sV9elP1Bx6s@(N^N5UTfdaSW-5dwXr8AcF!A z^Tw3_3mcnsEfhuz1!%u*w1Wq1D2^5iqlE%==wP&^KuSwthiqtuz!P)3 R6yS&ygQu&X%Q~loCIAn|$jkr$ literal 4783 zcmeAS@N?(olHy`uVBq!ia0y~yU}|7sV9elP1Bx6s@(N^N5GwO@aSW-5dwb21k%57O z$?#?TEd_IFgPIM+EF1y~4h;;9Oqz{LFL8N;SRkPSwgu`CaTbmvEIbDy9zGI+@_8KW z!5VYl+cce0Xxm1p@H!QJIvXJjLZgMJ9fal!F+)q>K~RQ zCbon%1%;eYKHCEMQ4fvA5HQ`0COKe67|lbVqH45I02ZmEg~Di|0I5Gm3x&}_VYDqb z+Bh9;Z8ME_A3&Y0(GDK4_c+>P1=b0pU2xEV#psv