changelog
WebGl Ops
- new op: Ops.Gl.ShaderEffects.UseVertexColor - Use vertex color as basecolor/diffuse color with phongmaterial
- new op: Ops.Trigger.ProbabilityTrigger - trigger by given probability
- op enhancement: Ops.Gl.ShaderEffects.VertexDisplacementMap_v4 - complete rewrite and much more posibilities and control
- op enhancement: Ops.Gl.SaveScreenShot_v2 - fixed wrong resolution when using HDPI resolutions
- op enhancement: Ops.Gl.GLTF.GltfNodeTransforms - also output node names / sorting
- op enhancement: Ops.Gl.Textures.CopyTexture - added options to invert / convert to greyscale by color channel / if no trigger is connected it will copy when the texture is changed
- op enhancement: Ops.Gl.TextureEffects.Fog_v3 - support 2d background texture
- op enhancement: Ops.Gl.ShaderEffects.PerlinAreaDeform_v4 - add switch to use input current shader pos or original pos attribute
- op enhancement: Ops.Gl.ShaderEffects.VertexPositionFromTexture_v2 - fix op was only working after changing mode
- op enhancement: Ops.Gl.ShaderEffects.TextureProjection - fix: can now be used multiple times / use image alpha switch
- op enhancement: Ops.Gl.Shader.SetUniformValue_v2 - update shader uniform number values and textures of the current bound shader/material,
- op enhancement: Ops.Gl.Shader.CustomShader_v2 - uniform mat4 datatype is detected and can be set using an array of 16 floats
- op enhancement: Ops.Gl.TextureFromColorArray - add filter and wrap options
- enhancement: Ops.Gl.TextureEffects.Fog_v3 - updated example to smaller scene so iOS looks good, added documentation for dealing with iOS resolution of depth buffer
- op enhancement: gltf fix: bug with huge indexed meshes
- op enhancement: gltf fix: normal mapping: use exported tangents and calculate correct bitangents, otherwise calculate them
Audio Ops
- enhancement: Ops.WebAudio.AudioBuffer_v2 - add ui hint if audiobuffer is not connected
- enhancement: Ops.WebAudio.AudioBufferPlayer_v2 - added helping hints and warnings, works with timeline, various fixes
- enhancement: Ops.WebAudio.SamplePlayer - add ui hint if audiobuffer is not connected to input or output is not connected
- enhancement: Ops.WebAudio.Mixer - add pan control for each input
- enhancement: Ops.Webaudio.Convolver_v2 - add wet output port, add dry wet control, fix crash on empty string, add predelay
- enhancement: Ops.WebAudio.AudioAnalyzer_v2 - add time domain average volume, fix wrong default value for FFT size shown in UI
- new op: Ops.Array.ArrayQuantizer - quantize input value to nearest value in array
- new op: Ops.WebAudio.ClockSequencer - sequence BPM-based triggers
- new op: Ops.WebAudio.ClockSequencerPattern - sequence triggers by a given pattern in an array
- new op: Ops.WebAudio.Delay - add a delay effect to an audio stream
- new op: Ops.WebAudio.MusicalScales - outputs a musical scale as strings, steps and midi note values
HTML Ops
- new op: Ops.Html.ElementClientRect - get html element absolute position and size in pixels on screen
- new op: Ops.Html.ElementsPositionsByClass - Get html element absolute position and size in pixels on screen as arrays of all elements by classname
- new op: Ops.Html.ElementCssTransform - translate,scale and rotate a HTML element using css transform
- op enhancement: Ops.Html.DivElement_v2 - css class management not removing outside assigned classes when changing class string
- op enhancement: Ops.Html.TransformElement - added option to hide element if out of current viewport
- op enhancement: Ops.Html.DivElement now has a toggle to stopPropagation of click events
Data Ops
- new op: Ops.Trigger.TriggerOnChangeTexture - triggers when texture has changed
- new op: Ops.Trigger.TriggerOnChangeObject - triggers when object has changed
- new op: Ops.Website.LocalStorageNumber - Store and retreive a number in browser localstorage
- new op: Ops.Website.LocalStorageString - Store and retreive a string in browser localstorage
- new op: Ops.Array.Array1toX - convert an array1 to array2,3,4 by choosing content for new axis
- new op: Ops.Array.ArraySumPrevious - Sum up every number in an array with the sum of the previous
- new op: Ops.Array.ArrayIndexBetween - output index where value is greater than number and smaller then next number
- new op: Ops.Json.ObjectSetArray - Set array by key in an object
- new op: Ops.Json.ObjectFilterContentByKey - remove values from an object if key starts with input string
- new op: Ops.Value.DelayBooleanSimple - Delay the input/output of a boolean by x seconds
- op enhancement: Json Path ops - add "found" out-port and warn on wrong values / various tweaks fixes
- op enhancement: Ops.String.Base64Decode_v2 - correctly handle dataurl input strings
- op enhancement: Ops.Array.StringToCharArray - warn on null input and handle correctly
- op enhancement: Ops.Net.SocketCluster.SocketClusterRecieveTrigger - can now work with triggers created with TriggerSend by using it's name
- op enhancement: Ops.Net.SocketCluster.SocketClusterSendTrigger - now can send trigger name with payload
Cables Ops
- new op: Ops.Cables.CustomOp - create in-place ops and javascript snippets
- new op: Ops.Trigger.TriggerReceiveFilter - receives all namedtriggers and allows for prefix filtering
- op enhancement: Ops.Sequence - clean up button: disentangle ports with more then one connections
Editor / UI
- editor: rework of menubar and iconbar
- editor: command palette: add zoom in/out commands
- editor: patch is now marked as unsaved when changing content of an text editor tab
- editor: saving a patch to the server is now compressed and much faster with bigger patches
- editor: better saving animation
- editor: fix cases where pressing shift+e to open first op text-editor did not work
- editor: multiple text editors of same op/port is possible now. e.g. (1) is appended to title
- editor: fix minimap positioning
- editor: new patch navigation iconbar
- editor: patch settings: toggle between automatic screenshots and manually saving screenshots
- editor: icon bars show help in infoarea
- editor: many ui improvements and optimizations
- editor: drag dropping audio files now adds an AudioBuffer to the patch
- editor: op param panel and meta panel are now merged into one tabbed panel, when there is not enough space for both
- editor: pressing ctrl/cmd+enter now cycles canvas modes: normal, patch background and fullscreen
- editor: exported patches are more mobile friendly / added css for disabling ontouch highlights/outlines and prevent default scrolling rubberband behaviour
- editor: "save as" dialog now takes given name as opposed to "copy of" when saving
- editor: invitation list is no longer shown when empty
- editor: patch invite shows error message when invite fails (with unknown user)
- editor: include echart library
- editor: publishing of patches is now only allowed on cables.gl, not on dev
- editor: keyboard shortcut tab now shows full content
- editor: added p5.js to userlibraries
- editor: fix bug where users where not able to view op attachments
Website/misc
web: new patch invites are shown in mypatches dropdown and via red bubble
web: all screenshots get converted to webp and are much smaller now
web: admins and staff now also are able to accept invitations
web: fix link to newest/used op version on example patch page
discord bot: publishing a patch will now show a teaser image and author avatar
discord bot: will post when a public patch receives lots of likes and comments
backend: api reloads when changing handlebar templates
backend: change default permission for api endpoints to "forbidden"
wordpress plugin: fix warnings and notices with php 7.3
Ops
new op: Ops.WebAudio.SamplePlayer - plays back one shot samples on trigger (useful for interaction sound)
new op: Ops.Html.ElementInteraction - Html element interaction events
new op: Ops.Gl.Meshes.QuadWarpTexture - Warp a texture mapped quad, useful for simple projection mapping
new op: Ops.Gl.Textures.Base64ToTexture - converts base64/data url to texture
new op: Ops.Gl.Textures.TextureToBase64 - converts texture to base64/data url
new op: Ops.Json.ArrayGetArrayByPath - returns the array at the position defined by a path
new op: Ops.Json.ArrayGetNumberByPath - finds a number at a position in an array defined by path
new op: Ops.Json.ArrayGetObjectByPath - returns the object at the position defined by a path
new op: Ops.Json.ArrayGetStringByPath - finds a string at a position in an array defined by path
new op: Ops.Json.ArrayGetArrayValuesByPath - outputs all the values of the properties of an array of objects given a path
op enhancement: Ops.WebAudio.AudioAnalyzer_v2 - add average volume back again
op enhancement: Ops.Gl.TextureEffects.Fog_v3 - remove fog modes, keep linear mode as default
op enhancement: Ops.WebAudio.AudioBuffer_v2 - set output to null when file URL is empty
op enhancement: Ops.WebAudio.Mixer - op would sometimes error when disconnecting an audio stream
op enhancement: Ops.WebAudio.Output_v2 - now shows a warning message when multiple inputs are connected
op enhancement: TypeOf now takes proper string input
op enhancement: LeftPad now takes proper string input
op enhancement: many sidebar ops now reset to default value on doubleklick
op enhancement: sidebar op now has a "undo" button to restore default values
op enhancement: Ops.Gl.ShaderEffects.VertexNumberLimit_v2 - add min parameter and invert toggle
op enhancement: renderGeometry - fix problem with vertex number indices not always updated
op enhancement: border - control individual sides
op enhancement: webcam fix bug where webcam is not updating when loading patch in a hidden tab
- deprecated: Ops.Json.CsvJsonFile - please use CsvArray
- deprecated: Ops.WebAudio.MediaPlayer - problems with some browsers, please use audiobufferplayer/sampleplayer
- deprecated: Ops.Deprecated.WebAudio.AudioPlayer_v2 - problems with some browsers, please use audiobufferplayer/sampleplayer
Editor / UI
- editor: output hover graph fixed
- editor: gradient editor colorpicker fixed
- editor: pointCloudfromArray and Splinemesh: show warning when using an incompatible material
- editor: filemanager: convert png/jpg to webp files
- editor: filenames of converted files do not contain the old file extension anymore
- editor: support for .avif file format images
- editor: patchsettings load faster, lazyloading namespaces
- editor: json structure viewer now works with arrays
Web
- web: cables editor can now be tried without being registered with limited functionality
- web: mypatches menu reworked, switch between last patches and invited to patches
- web: patch lists: hover patch title to see full length name
- web: added more showcase projects to undefined
- web: faster "my patches" and "create" dropdowns
- web: faster loading times using webp screenshots
- web: database/file server upgraded to faster cpu and more ram
- web: userops in account-settings are linked to documentation page
- web: fix examples not being shown on documentation page
- web: allow for comments on apikeys, show creation date
- web: fix patch page opengraph thumbnail
- web: op example patches are easier to spot by using an example badge
- web: fix display of summary user-op page
Ops
new op: Ops.WebAudio.AudioBufferToSplineArray - analyze audio buffer to extract peaks as an array of points for spline rendering
new op: Ops.WebAudio.CutFilter - DJ style cut filter, lowpass & highpass in one op (up to 48dB steepness)
new op: Ops.WebAudio.Mixer - 8 channel mixer with independent gain controls (to sum audio signals)
new op: Ops.WebAudio.ThreeBandEqualizer - 3 band equalizer for low - mid - high with different filter types for each band
new op: Ops.Color.RgbToHex - convert RGB float values to HEX color String
new op: Ops.Gl.OrTexture - outputs the first valid texture of the input ports
new op: Ops.Website.FilenameInfo - information about a filename, like url protocol, suffix etc
new op: Ops.Html.LoadingIndicator - show a typical web loading/progress indicator animation
new op: Ops.Gl.Shader.GetShader - get current set shader
new op: Ops.Physics.Body.PhysicsGeometryBody - create a physics body from any geometry
new op: Ops.Cables.ExitError - stop executing patch and show an error message
op enhancement: Audio ops: fix crashes when not connected properly
op enhancement: Ops.WebAudio.Gain - add UI hints, add mute button
op enhancement: Ops.WebAudio.AutoPanner - add UI hints
op enhancement: Ops.WebAudio.Convolver_v2 - add UI hints, add gain control for convolved signal, add file format hints
op enhancement: Ops.WebAudio.AudioAnalyzer_v2 - add parameters to be able to control analyzation more fine-grained
op enhancement: Ops.WebAudio.AudioAnalyzer_v2 - add both amplitude & frequency output arrays, correct average volume (RMS) calculation
op enhancement: Ops.WebAudio.AudioBuffer_v2 - add UI hints for file formats
op enhancement: Ops.WebAudio.BiquadFilter_v2 - add frequency array, input for filter response, add phase and magnitude filter response output
op enhancement: Ops.WebAudio.FFTAreaAverage_v2 - better description of input ports, choose texture size input added
op enhancement: Ops.WebAudio.Output_v2 - add mute when patch turns inactive, mute audio when patch is paused
op enhancement: Ops.WebAudio.Waveform - Add UI hints
op enhancement: Ops.WebAudio.MediaPlayer_v2 - updating to new ports, better UI
op enhancement: Ops.Gl.TextureEffect.Fog_v3 - correct density calculations, add different fog modes
op enhancement: Ops.WebAudio.WaveformMesh - creates a mesh from an audio buffer
op enhancement: Ops.WebAudio.AnalyzerTexture - creates a texture from an audio FFT array (merging of FftTexture and AnalyserTexture)
op enhancement: Ops.Gl.ShaderEffects.InstancedTextureColorize - added switch between add/mul blend modes
op enhancement: Ops.Devices.Mouse.MouseDrag - captures movement outside of element/window
op enhancement: Ops.Physics.World - added world solver iterations parameter
op enhancement: Ops.Physics.World - added simulate toggle to pause simulation
op enhancement: Ops.Gl.RenderAnim_v2 - create zip file for image sequences
op enhancement: Ops.Gl.Textures.TextureInfo - outputs if is hdr texture
op enhancement: Ops.Gl.Textures.TextureInfo - output identify default textures
op enhancement: Ops.Gl.Render2Texture - show error when using mipmap and hdr at the same time
op enhancement: Ops.Gl.TextureEffects.DrawImage_v3 - fixed bug with transparent textures
op enhancement: WASD camera: can work without pointerlock now
op enhancement: Ops.Sidebar.Slider_v3 - takes real string as an input parameter
op deprecated: DocumentURL op - please use: Ops.Website.InfoURL
op renamed: RingBufferTextures to Ops.Array.TextureBufferArray
op deprecated: DynamicsCompressor
Core
- core: edit webaudio.js to not crash when not connecting an audio context
- core: better patch crash error messages on screen, e.g. local file access warning / error in code
- core: tweak rendering of cube bounding boxes
- core: current shader source code contains info of order of active modifiers (visible in shaderInfo op e.g.)
Editor / UI
- editor: export: allow for loading of userops in iframe when on cables server
- editor: export now has an option for iframe embed code
- editor: export to github and build electron executables
- editor: click on filename in asset details leads to page that shows patches with this asset
- editor: do not show userops of other users that start with the same username-letters
- editor: fix backend errormessage when cloning ops
- editor: string output port preview now uses available width
- editor: show error icon in menu bar when any op has an error
- editor: fix crash where editor not loading correctly when switching tabs rapidly while loading a patch
- editor: when cloning a patch title proposal is "clone of xxx"
Web
web: new screenshots are now delivered as webp files which are way smaller
web: do not copy colloaborators on public7example patches
web: examples on documentation pages are not longer shown for ops that start with the same characters
web: everything now runs on ipv6 as well
docs: added page to explain how to report bugs in forum
- op enhancement: fix ios/safari bug with instancing/phongmaterial etc.
- op enhancement: Ops.Gl.Shader.PointMaterial_v3 - round points antialias option
- op enhancement: Ops.Gl.ForceCanvasSize: added "scale to fit" option
- op enhancement: Ops.Gl.Textures.TextTexture_v4: wheight input
- op enhancement: Ops.Gl.Matrix.OrbitControls also captures mousemovement outside of canvas/window
- op enhancement: Ops.Gl.TextureEffects.CircleTexture_v3 - better y coordinates
- op enhancement: Ops.Array.ArrayMerge_v3 - allow more arrays to be merged
- op enhancement: Ops.Gl.Shader.Shader2Texture - fix crash when no shader is connected
- op enhancement: Ops.Gl.GLTF.GltfScene_v2 - added "loaded" output port
- op enhancement: Ops.Gl.Phong.DirectionalLight_v5 - framebuffer only gets instantiated when cast shadow is active, code optimization
- op enhancement: Ops.Gl.Phong.SpotLight_v5 - framebuffer only gets instantiated when cast shadow is active, code optimization
- op enhancement: Ops.Gl.Phong.PointLight_v5 - framebuffer only gets instantiated when cast shadow is active, code optimization
- op enhancement: Ops.Net.Mqtt.Mqtt_v2 - new string inputs, connection error handling, works with new shiftr.io #
- op enhancement: Ops.Net.Mqtt.MqttReceive_v2 - removed message type, added typed out-ports, renamed out-object
- op enhancement: Ops.Net.Mqtt.MqttSend_v2 - renamed out-object to not conflict with in-object
- editor: fix annoying bug when changing a value looses input field focus when op shows error message
- editor: renamed ops and adjusted naming
- web: better lazy load of user icons
- web: community dropdown / feature discord more prominent
- web: better preview meta images when sharing URLs
read our blog post about the november update: undefined
Editor / Ui
- editor: op search: fixed lag and unexpected change of results... / grey out while searching/waiting
- editor: op search: penalty points for old version of ops
- editor: op search: when pressing enter while still searching wait for result to show up then add upmost op
- editor: search: show extended title content in search results
- editor: fix shift resizing (to keep aspect ratio) not working every time
- editor: faster canvas resize
- editor: preference to hide the icon sidebar
- editor: fix infoarea resize/close problems
- editor: helper meshes only drawing when op is really selected
- editor: subpatch list highlights active subpatch
- editor: subpatch list now also shows main subpatch
- editor: better handling of large strings in param panels
- editor: fix boolean display, always true or false now (not 0)
- editor: user preferences: choose background pattern for transparent canvas
- editor: patch asset loading will now start only after the editor is fully initialized
- editor: op selector fix: some information was hidden
- editor: bright mode button color
- editor: upgrade button works better with ports that changed capitalization
- editor: texture preview is now sticky / must be closed via new close button
- editor: keyboard shortcuts are now scrollable
- editor: texture previewer now also shows cubemaps and depthmaps
- editor: disabling ops now only disables selected ops, not childs / fix crash
- editor: profiler: shows how many ops are active currently
- editor: profiler: group by subpatches functionality
- editor: profiler: group ops by name (e.g. see all time used by "transform ops")
- editor: better warning when upgrading ops
- editor: canvas magnifier lens and colorpicker helper
- editor: file library: fbx and obj files are not automatically converted to glb/gltf files after upload
- editor: file library: add GLTF/GLB versions of example 3d files
- editor: file library - added new head gltf model
- editor: file library: use newest version of AudioPlayer as default op for audio files
- editor: find - search for ops with errors/warnings/hints
- editor: pressing shift+e opens the 1st string port on an op
- editor: timeline splitter element no longer renders over the editor tab
- editor: patch settings now show legal information
- editor: json-explorer on outObject and outArray
- editor: attachments are now correctly loaded after edit and reload of editor
- editor: on cloning an op markdown documentation and layout information is retained
- editor: json is now being syntax-highlighted in ParseObject and StringEditor
- editor: cloning an op copies libs and corelibs over to the new op
- editor: "you dont own this patch" no longer shown for collaborators
- editor: show which collaborators are being copied over on "save as"
- editor: export now allows for not exporting backup files, default is to include them
- editor: export of patches with url-reserved characters now possible
- editor: saving patch when someone else makes changes works now (again)
New Ops
- new op: Ops.Gl.ShaderEffects.InstancedTextureColorize - colorize instanced meshes using a texture
- new op: Ops.Gl.ShaderEffects.InstancedDisplacementMap - displace positions of instanced meshes using a texture
- new op: Ops.Gl.TextureToPointArray3 - Generate an array3 of grid positions from a texture
- new op: Ops.Gl.Identity.ResetTransform - reset current transforms to initial value (identity)
- new op: Ops.String.UUID - outputs a unique identifier
- new op: Ops.Array.Array3FlipAxis - flip xyz axis of an point array
- new op: Ops.Gl.ShaderEffects.VertexColorAsAlpha - Use mesh vertexcolor as Alpha/Opacity
- new op: Ops.Gl.TextureColorPick - get the color of a pixel in a texture
- new op: Ops.Boolean.OrNumber - Output another number if input number is zero/false
- new op: Ops.Gl.GLTF.GltfMeshSequence - Switch between meshes e.g. like a stop motion animation
- new op: Ops.Gl.TextureEffects.SkewStretchImage -skew / stretch an image by rendering scaled sides
- new op: Ops.Sidebar.LocalFileToDataUrl - load a local file and output as data url
- new op: Ops.Vars.VariablesAsObject - outputs an object containing all variables
- new op: Ops.Gl.TextureEffects.Alpha - Modify current alpha/opacity
- new op: Ops.Date.DateFormatter - String representation of a date
- new op: Ops.Date.DateCalc - Perform date calculations
- new op: Ops.TimeLine.PreRender - Render the patch at certain times
- new op: Ops.Array.ArrayPushString - Push/Append a string to the end of an array
- new op: Ops.Array.CutArray - Cut an array from the beginning and/or the end
- new op: Ops.Array.Array3AreaRemove - remove points from an array3 with different shapes
- new op: Ops.WebAudio.AudioPanner - pan an audio signal from left to right
- new op: Ops.Array.StringToCharArray - converts a string to an array of characters
- new op: Ops.Points.PointsPlane_v2 - now has correct rows and columns. Can now have a row or column length of 1
- new op: Ops.Trigger.SwitchTrigger - route triggers in to a single output
- new op: Ops.Gl.TextureEffects.RGBOffset - offsets xy components of an rgb texture
- new op: Ops.Gl.ShaderEffects.AreaScaler_v3 - added clamp mode
- new op: Ops.HTML.Notification - Simple pop up notification which fades in and out.
- new op: Ops.Points.PointsHexagonGrid - generates a hexagonal grid of points
- new op: Ops.Gl.TextureEffects.Noise.LayerNoise_v2 - exponent parameter now works.
- new op: Ops.Json.ObjectGetArrayByPath gets an array at the "path" of a json object or array
- new op: Ops.Json.ObjectGetNumberByPath gets a number at the "path" of a json object or array
- new op: Ops.Json.ObjectGetObjectByPath gets an object at the "path" of a json object or array
- new op: Ops.Json.ObjectGetStringByPath gets a string at the "path" of a json object or array
- new op: Ops.Json.ObjectGetArrayValuesByPath gets the values of each element at a "path" in a json object or array
- new op: Ops.Api.TeachableMachines.AudioClassifier - Use the Teachable Machines audio classifier for your microphone. Insert the uploaded model URL.
- new op: Ops.Api.TeachableMachines.ImageClassifier - Use the Teachable Machines image classifier. Insert the uploaded model URL.
- new op: Ops.Api.TeachableMachines.PoseDetection - Use the Teachable Machines pose detection with your webcam. Insert the uploaded model URL.
Op enhancement and fixes
- op enhancement: Ops.Html.FontFile_v2 - ops that use fonts will refresh after font has finished loading
- op enhancement: Ops.Gl.Textures.WebcamTexture_v2 - fix problems on ios and firefox
- op enhancement: Ops.Gl.Textures.WebcamTexture_v2 - can be used as html element (and styled)
- op enhancement: Ops.Gl.Textures.WebcamTexture_v2 - now outputs html video element
- op enhancement: Ops.Gl.FontMSDF_v2 better error handling when using invalid files
- op enhancement: mesh3d output no geometry when no trigger connected, or invalid file
- op enhancement: Ops.Patch.PlayButton - button style sheet can now be edited
- op enhancement: Ops.Html.BackgroundImage_v2 - correctly reload updated files after uploading
- op enhancement: Ops.Physics.CastRay - option to change cursor to pointer when hovering
- op enhancement: Ops.Physics.CastRay - now also continues to work when changing the array constantly
- op enhancement: Ops.Physics.CastRay world/raycast debug bounding box changes color on hover
- op enhancement: Ops.Html.Cursor_v2 - cursor ops are more reliant to use and can be used in normal rendering flow
- op enhancement: Ops.Gl.Shader.PointMaterial_v3 - colorize checkbox for texture
- op enhancement: Ops.Gl.ShaderEffects.AreaTfirranslateMeshes_v2 - axis multiply
- op enhancement: Ops.Gl.Meshes.TextMesh_v2 - fixed vertex order for face culling
- op enhancement: Ops.Gl.Textures.VideoTexture_v2 - better error handling / string file input etc
- op enhancement: Ops.Gl.ShaderEffects.ColorArea_v3 - opacity mode
- op enhancement: Ops.Gl.Meshes.Cylinder_v2 - added flat shaded option
- op enhancement: Ops.Gl.Matrix.ScreenCoordinates - fix to work with hdpi displays
- op enhancement: Ops.Gl.Performance - do now show anything when not connected
- op enhancement: Ops.Html.AppendChild_v2 / elementchilds ./ divelement: fixed buggy behaviour when changing parent of an element
- op enhancement: Ops.Gl.Shader.Shader2Texture render to multiple textures with one shader
- op enhancement: Ops.Gl.Texture_v2 / Ops.Gl.Textures.VideoTexture_v2 - filename port now also works with data urls/base64 encoded images (see Ops.Sidebar.LocalFileToDataUrl)
- op enhancement: Ops.Gl.Textures.VideoTexture_v2 - better error handling
- op enhancement: Ops.Gl.GradientTexture - now has radial mode
- op enhancement: Ops.Gl.Shader.PointMaterial_v3 - texture input for pointsize
- op enhancement: Ops.Html.TransformElement - optimized performance
- op enhancement: Ops.Gl.Render2Texture - wrap mode select
- op enhancement: Ops.Gl.Textures.TextTexture_v4 - fix: lineheight should not apply to first line
- op enhancement: Ops.Gl.Textures.TextTexture_v4 - fix: better height vertical calculation
- op enhancement: Ops.Gl.Textures.TextTexture_v4 - fix: lineheight directly bound to fontsize
- op enhancement: Ops.Gl.Textures.TextTexture_v4 - fix: line offset : offset to adjust line size rendering problems with crazy fonts...
- op enhancement: Ops.Html.VideoElement - finished trigger
- op enhancement: Ops.Html.VideoElement - error message and bool output
- op enhancement: Ops.Gl.ShaderEffects.VertexDisplacementMap_v3 - fixed colorize option crashing
- op enhancement: Ops.Gl.TextureEffects.Waveform_v2 - fix for webgl1
- op enhancement: Ops.Gl.PixelProjection: fixed on hdpi displays
- op enhancement: Ops.Gl.TextureEffects.ImageCompose_v2 - correct transparent background by default
- op enhancement: Ops.Gl.TextureEffects.DrawImage_v3 - fixed bugs with transparent images
- op enhancement: Ops.Gl.MeshMorph - fix shader compile problem / show warning when meshes dont have the same amount of vertices
- op enhancement: Ops.Physics.PhysicsBodiesArray - basic physics simulation
- op enhancement: Ops.Anim.InOutInAnim - now has a hold duration
- op enhancement: Ops.Gl.Shader.Shader2Texture - displays a warning when Mipmap and HDR is enabled
- op enhancement: Ops.Gl.Matrix.WASDCamera_v2 - pointerlock can now be enabled or disabled
- op enhancement: Ops.Gl.Shader.CustomShader_v2 - fix: no longer crashes when creating vec4 uniforms
- op enhancement: Ops.Gl.Textures.VideoTexture - fix: updates textures correctly when they change
- op enhancement: Ops.Gl.Textures.VideoTexture - fix: no longer crashes when filter or wrap modes change
- op enhancement: Ops.Gl.Meshes.Circle - fix: no longer crashes when percent is less than zero
- op enhancement: Ops.Points.PointsPlane - fix: no longer divides by zero when rows or columns is set to 1
- op enhancement: Ops.Gl.Meshes.Cube_v2 - fix: now outputs the geometry object again when trigger in is reconnected.
- op enhancement: Ops.Array.ArrayMathArray - fix: now outputs null if only one array is connected
- op enhancement: Ops.Gl.TextureEffects.Noise.LayerNoise - fix: scale, layers and factor parameters now work again
- op enhancement: upgraded many ops to new URL input / String type ports
- op enhancement: Ops.Array.ArrayUnique - add xy & xyz option to uniqability, add length output, optimized
- op enhancement: Ops.Gl.Meshes.Cone - deactivating "active" now triggers next ops
- op enhancement: Ops.Gl.ShaderEffects.Shadow_v2 - fix bug where op would start triggering when switching discard option, better warnings
- op enhancement: Light Ops: add "Cast Light" option to disable light casting,
- op enhancement: Light Ops: add "Rendering Active" input to be able to render shadow map only once,
- op enhancement: Light Ops: change default parameters for shadows,
- op enhancement: Light Ops: add world position XYZ out,
- op enhancement: Light Ops: fix bug where clear color was not set with cast shadow option enabled
- op enhancement: Ops.Html.BrowserSpecificFile_v2 - updated old ports, properly detecting browsers now using platform.js
- op enhancement: Ops.Html.BrowserCheck_v3 - updated old ports, properly detecting browsers/os/platform now (with platform.js) on any OS
- op enhancement: Ops.Gl.Textures.TextTexture_v4 - output texture now always updated when colors are changed, minor tweaks
- op enhancement: Ops.Gl.Textures.TextTexture_v4 - fix bug where output texture would not update colors
- op enhancement: Ops.Gl.Phong.LambertMaterial_v2 - add "Cast Light" options to shader, minimize amount of uniforms, speedup
- op enhancement: Ops.Gl.Phong.PhongMaterial_v5 - you can now set an environment reflection map
- op enhancement: Ops.Gl.Phong.PhongMaterial_v5 - fix WebGL1/iOS compatibility, minimized amount of uniforms, speedup
- op enhancement: Ops.Gl.Shader.MatCapMaterialNew_v3 - rework material rendering, correct screen space normals & normal map
- op enhancement: Ops.Gl.Shader.MatCapMaterialNew_v3 - add normal map intensity, works properly with mesh instancer now
- op enhancement: Ops.Gl.Shader.MatCapMaterialNew_v3 - rename ports so its clearer what they do
- op enhancement: Ops.Gl.CubeMap.CubeMapMaterial_v2 - add tex coords to vertex shader so displacement works
- op enhancement: Ops.WebAudio.AudioBufferPlayer_v2 - better error handling, add restart button, added isPlaying output, removed hasFinished output
- op enhancement: Ops.WebAudio.AudioBufferPlayer_v2 - now prevent clicks and pops when restarting
- op enhancement: Ops.Gl.TextureEffects.DepthTextureFocus_v2 - use real distances instead of 0 - 1 range, better usability
- op enhancement: Ops.Gl.TextureEffects.Fog_v3 - use real distances instead of 0 - 1 range, better usability
Website
- web: possiblity for user to delete own account
- web: order by patchname on "my patches" page
- web: namespaces of shared patches are now selectable in namespace dropdown on "my patches"
- web: allow for admins to schedule release/maintenance and show to logged in users
- web: bigger warning for users that are on the dev environment
- web: landingpage is no longer shown on dev/nightly, redirect to /login
- web: searchfield in top-nav now includes shared patches in extra tab
- web: speedup of "my patches" dropdown and all pages showing lot's of screenshots
- web: stop scrolling when using mousewheel on patch
- web: fps not dropping to 30 when watching a patch fullscreen
- web: docs: styling and formatting tweaks
- web: docs: link to github page
- documentation : Added section how to convert shadertoy patches into the cables equivalent.
- documentation : Added guide on how to get started with VR inside of cables
- documentation: add webgl1 & 2 differences section to docs
Core
- core: shaderEffects keeping gl primitive setting (e.g. pointmaterial did not work with certain shadereffects)
- core: put under MIT licence
- core: remove duplicate unused uniforms before compiling shader
- core: copy extensions to new shader when copying a shader
- core: corelibs - cubemapframebuffer - remove clear color at renderEnd() (for PointLight clear color fix)
Export
- exported patch: canvas now has tabindex property/ so that it can receive kreypresses
- exported patch: fixed a bug when embedding and initializing non existing variables
- exported patch: finishedLoading callbacks first parameter is now patch object
- exported patch: now include legal.txt with licence information
- cables-cli: command line export now allows for skipping of backup export using the
-b
switch
New Ops
- new op: Ops.Gl.Meshes.SplineMesh_v2 - draw splines/lines - new spline rendering system
- new op: Ops.Gl.Meshes.SplineMeshMaterial_v2 - material for new spline meshes
- new op: Ops.Gl.ShaderEffects.Shadow_v2 - new shadow rendering system - add shadow receiving capabilities to any material
- new op: Ops.Gl.ShaderEffects.FresnelGlow - add fresnel glow to any material
- new op: Ops.Gl.ShaderEffects.TextureProjection - texture projection on meshes
- new op: Ops.Gl.GLTF.GltfTexture - load textures from inside a .glb file
- new op: Ops.Gl.GLTF.GltfNodeTransform - get current transformation of a gltf node
- new op: Ops.Gl.GLTF.GltfTransformNode - Set transformation of a gltf node
- new op: Ops.Gl.GLTF.GltfPhysicBodies - create physics bodies/bounding boxes for gltf nodes
- new op: Ops.Math.MathExpression - calculate a mathematical function with up to 4 values
- new op: Ops.Gl.CubeMap.EquirectangularTextureToCubemap - convert equirectangular texture to cubemap
- new op: Ops.Gl.CubeMap.CubemapToEquirectangularTexture - visualize cubemap (either as equirectangular or as folded cubemap)
- new op: Ops.Gl.CubeMap.Skybox - add skybox to scene with equirectangular or cubemap texture
- new op: Ops.Array.ArrayMathExpression - calculate a mathematical function with up to 3 arrays and 3 numbers
- new op: Ops.String.ArrayContainsString - Check if an array contains a string
- new op: Ops.Gl.Matrix.QuaternionCamera - Set up a camera, rotated by a quaternion
- new op: Ops.Array.ArrayOfArrays - Create an array filled with other arrays
- new op: Ops.Array.ArraySetString - set string in an array
- new op: Ops.Array.ArrayGetString - get string from an array
- new op: Ops.Gl.Geometry.GeometryBoundingBox - Calculate a bounding box from a geometry
- new op: Ops.Gl.Geometry.BoundingBoxVisible - Test if a boundingbox could be visible in the current viewport
- new op: Ops.Geometry.BoundingBox - create a simple bounding box from width,height,depth
- new op: Ops.Physics.PhysicsBodiesArray - create an array of physics bodies and add them to current world
- new op: Ops.Html.VideoElement - html video player element
- new op: Ops.Array.ArrayGetTexture - get a texture from an array
- new op: Ops.Gl.SurfaceScatter_v2 - outputs arrays to use with e.g. meshinstancer
- new op: Ops.Gl.ValidTexture - output current input texture or if invalid an empty/default texture
- new op: Ops.Geometry.GeometryToWireframeArray3 - generate an array of lines from a mesh to render a wireframe
- new op: Ops.String.StripHtml - remove html tags from a string
- new op: Ops.Gl.Geometry.GeometryMergeSimple - merge two geometries
- new op: Ops.Values.SequenceObjects - control order and flow of objects
- new op: Ops.Values.SequenceNumbers - control order and flow of numbers
- new op: Ops.Values.SequenceStrings - control order and flow of strings
- new op: Ops.Html.CSSPropertyString - Modify a CSS property with a string.
- new op: Ops.Trigger.TriggerIfIncreased - Outputs a trigger if the value of a number increases.
Op Enhancements and fixes
- op enhancement: Ops.Gl.Phong.PhongMaterial_v5 - speedup (shader code generation on the fly)
- op enhancement: Ops.Gl.Phong.PhongMaterial_v5 - default light at cam position, warning when default light is used,
- op enhancement: Ops.Gl.Phong.PhongMaterial_v5 - new falloff modes
- op enhancement: Ops.Gl.Phong.PhongMaterial_v5 - add emissive color parameters
- op enhancement: Ops.Gl.Phong.PhongMaterial_v5 - various fixes (new op version)
- op enhancement: Ops.Gl.Phong.PhongMaterial_v5 - environment reflection maps
- op enhancement: Ops.Gl.Phong.PointLight_v5 - add shadow casting capabilities
- op enhancement: Ops.Gl.Phong.SpotLight_v5 - add shadow casting capabilities
- op enhancement: Ops.Gl.Phong.DirectionalLight_v5 - add shadow casting capabilities
- op enhancement: Ops.Sidebar.Sidebar is correctly positioned when choosing position "right"
- op enhancement: Ops.Gl.TextureEffects.LumaKey_v2 - now has a high and low threshold to refine selection.
- op enhancement: Ops.Gl.GLTF.GltfScene_v2 - expose whole a transformation hierarchie tree
- op enhancement: Ops.Gl.GLTF.GltfScene_v2 - camera support
- op enhancement: Ops.Gl.GLTF.GltfNode_v2 - fix bug with transformation being applied even when option is unchecked
- op enhancement: Ops.Physics.World - world draws bodies
- op enhancement: Ops.Physics.CastRay - fix various things for better raycasting/picking of objects
- op enhancement: Ops.Physics.Body.PhysicsCube_v2 - name input for easier identification of picked objects
- op enhancement: Ops.Html.IFrame_v3 - update to behave like other html element ops
- op enhancement: Ops.Gl.Shader.ShaderInfo - more information about the current state (uniforms/defines/texturestack etc)
- op enhancement: Ops.Gl.Shader.ShaderInfo - now can show information about uniforms
- op enhancement: Ops.Gl.Textures.TextTexture_v3 - has gl filter selection / color
- op enhancement: Ops.Gl.Textures.TextTexture_v3 - added automatic line wrapping when maximize size is disabled
- op enhancement: Ops.Gl.Textures.TextTexture_v3 - added option to limit number of lines
- op enhancement: Ops.Gl.Textures.TextTexture_v3 and textMesh - now have texture filter and anisotropy options
- op enhancement: Ops.Gl.Performance - shows how long it took to compile all shaders
- op enhancement: Ops.Gl.ShaderEffects.MeshPixelNoise_v2 - added blendmodes switch
- op enhancement: Ops.Gl.Performance - shows total number of glPrimivites (triangles/points) currently rendered
- op enhancement: Ops.Gl.Matrix.OrbitControls - reset moves to initial values, not to zero, also takes the shortest way to the goal
- op enhancement: Ops.Gl.MainLoop - option to reduce FPS when window is not focussed to reduce load
- op enhancement: Ops.Gl.Shader.CustomShader_v2 - not connected uniform texture ports now bind striped defaulttexture
- op enhancement: Ops.Gl.TextureEffects.DrawImage_v2 - clip repeat is now transparent, not just black
- op enhancement: Ops.Gl.GradientTexture - fix bug where colors in gradient did not change / firefox compatibility
- op enhancement: Ops.Html.FullscreenMode - switch between whole document or just canvas becoming fullscreen
- op enhancement: Ops.Gl.Shader.PointMaterial_v3 - removed premultiplied alpha option - use blendmode op!
- op enhancement: Ops.Gl.Shader.PointMaterial_v3 - select alpha method (R/A/Luminance)
- op enhancement: Ops.Gl.Shader.PointMaterial_v3 - added option to set the absolute pixel size of points
- op enhancement: Ops.Gl.ShaderEffects.VertexDisplacementMap_v3 - "calculate normals" parameter for better lighting
- op enhancement: Ops.Gl.MeshInstancer_v4 - can switch between euler/quaterion array input
- op enhancement: Ops.Net.WebSocket.WebSocket - updated string type input
- op enhancement: Ops.Value.DelayedValue - fixed memory leak, does not slow down after a while
- op enhancement: Ops.Gl.Phong.LambertMaterial_v2 - add warning when default light is used
- op enhancement: Ops.Midi.MidiNote - Add normalization of velocity values to array output
- op enhancement: Ops.Gl.Debug - add boolean for shadowpass
- op enhancement: Ops.Array.ShuffleArray3 - better random randomness
- op enhancement: Ops.Html.DivElement_v2 - now updates to the CSS style in patch when css property ops are disconnected.
- op enhancement: Ops.Html.DivElement_v2 - gives a warning if external CSS and inline CSS styles are used at the same time.
- op enhancement: Ops.Sidebar.Toggle_v2 - now displays all text correctly
- op enhancement: Ops.Trigger.TriggerString - fix: Will always output the string when triggered.
- op enhancement: var getter/setter - fixed bug where var list was not up to date
- op enhancement: var getter/setter - array,object,texture / better ui / rewrite internally
- op enhancement: Ops.Html.CSSProperty_v2 - now shows the property next to the opname
- op enhancement: Sidebar ops - many new versions with new string input port for text
- op enhancement: Ops.String.StringEditor now has "html" and "xml" option for syntax checking/highlighting
- op enhancement: Ops.Net.CorsProxy handles (multiple) redirects now
- op enhancement: Ops.Gl.TextMeshMSDF now hints at the font data being created/provided by Ops.Gl.FontMSDF
- op enhancement: Ops.Json.AjaxRequest_v2 - now is able to do more parameters for HTTP requests (method, contenttype, ...)
- op enhancement: Ops.Json.AjaxRequest_v2 - can now be told to not parse the output as JSON and always gives a string
User interface Editor
- UI: upgrade button for outdated ops
- UI: fix "create variable" button in op select dialog
- UI: texture preview is now behind patchfield
- UI: when leaving a port value input field with an invalid value, reset value to last valid
- UI: pressing shift while resizing renderer will keep aspect ratio
- UI: filemanager: better automatic file type to op assignment
- UI: you can now upload and use webp files as textures
- UI: inspect output objects: values are now syntax highlighted
- UI: inspect output objects: now show unescaped html characters
- UI: inspect output objects: can now be searched using browser search (ctrl/cmd+f)
- UI: "patch statistics" command
- UI: when copy pasting linked values, the current value of the link is copied (when output op is not selected)
- UI: ops can now filter by file suffixes, not only by file type
- UI: command palette: scrolling via cursor keys now also scrolls the whole list
- UI: fixed problem where parameter panel was too large, when using the command "scale renderer" < 1
- UI: fix: backups were not showing up anymore when patch gets bigger
- UI: op attachment editor now can open multiple editor for attachments that have the same name
- UI: fix a bug where it showed an nonsense exception when opening an op attachment editor
- UI: fixed bug where changing the title did not work
- UI: fix crash when clicking (+) button to add a texture op
- UI: fix syntax highlighting/error checking for plain text editors
- UI: fix FPS counter below renderer when limiting FPS
- UI: port values in parameter panel are now always displayed without exponent notation
- UI: object output parameter panel now indicates if a object is null
- UI: file library: removed old files/nonsense files etc. / added glb example files
- UI: editor: url parameters are copied to editor frame, so you can use UrlQueryParams ops to read parameters in the editor
- UI: texteditor: core-ops now format code on save, userops present a "format" button on the editor
- UI: when adding a lib or corelib to an op a modal suggests a reload of the page
Serverside and Access Rights
- server exporter: skip duplicate files in zip file
- server exporter: exported patches show an error message when trying to load files without a webserver
- server: "make owner" now works for non-admins, button is only being shown for owner
- server: collaborators are now copied over to projects when using "save as"
- server: userops are now "shareable" in public patches and between collaborators
- server: corelibs and libs that are attached to userops are now being loaded for collaborators
- server: userops are now available for collaborators on a project
- server: userops are now shared between live/dev/nightly
Core changes
- core: shader respect the hierarchy and extend copies of current shader
- core: patches with lots of ops load a lot faster now
- core: fix bug with blendmode problems/premultiplied colors
- core: fix rare bug producing corrupted textures when loading a new one while old url was still being loaded
- core: fix problems with google swiftshader compatibility
- core: new way of using internal core libs for ops
- core: rewrite cubemap handling
Website
- web: udpated showcase page: undefined
- web: /browser rewrite / more params and linkable results
- web: docs also show "hidden" ports
- web: patch page: show edit button only if user has rights to edit (e.g. secret urls)
Docs
Editor user interface
- UI: undo/redo - fix bugs/add many more actions
- UI: undo/redo - grouping of multiple actions
- UI: undo/redo - Visual undo history list in meta tabs
- UI: preferences - new option for wheelmode - set this to mousewheel if your mousewheel is scrolling / not zooming
- UI: preferences - switch between minimalistic or full op search dialog
- UI: search results - highlight subpatch name when in current subpatch
- UI: search for :outdated - show ops that could be replaced with a newer version or are deprecated
- UI: patch-export - now shows patch variables and exports them to docs.md (again)
- UI: patch-export - now shows callbacks provided by the patch and exports them to docs.md
- UI: op params - show value for connected string input ports
- UI: op params - download button next to file inputs
- UI: subpatch navigation fix positioning
- UI: canvas info area - show webgl version, if not default/v2
- UI: subpatch list is now sorted by name
- UI: fix bug where FPS was counted wrong and too big
Website
- Web: more projects were added to "made with cables" undefined
- Web: better signup email confirmation workflow
- Web: repository for docs: undefined
- Web: fix: loggedin users can now see patches that they have a secret-url for
Ops enhancements and fixes
op enhancement: Ops.Gl.GLTF.GltfScene_v2: hide nodes by names that are in input string array
op enhancement: Ops.Gl.TextureEffects.RectangleTexture_v3 - added centered mode for easier positioning
op enhancement: Ops.Gl.ShaderEffects.VertexDisplacementMap_v2 - colorize options fixed and better control via min/max parameters
op enhancement: Ops.Gl.Meshes.Cube_v2 - select which sides to show / texture mapping bias input / correct mapping of cubemaps
op enhancement: Ops.Devices.Mouse.Mouse_v2 - added parameter to en/disable touch support
op enhancement: Ops.Gl.Shader.PointMaterial_v2 - new texture port for colorize
op enhancement: Ops.Array.Array_v2 - change order of ports, so length is first port
op enhancement: Ops.Gl.TextureEffects.FastBlur - clamp functionality to stop overbleeding
op enhancement: Ops.Gl.TextMeshMSDF_v2: - better converting
op enhancement: Ops.Gl.TextMeshMSDF_v2: - border around characters
op enhancement: Ops.Gl.FontMSDF_v2: - reload files when reuploaded
op enhancement: Ops.WebAudio.TextToSpeech.Say_v2 - has string type input for text
op enhancement: Ops.Value.TriggerOnChangeNumber outputs the current number, for convenience
op fix: Ops.Gl.GLTF.GltfScene_v2 - bug when centering was not working when loading the patch
op fix: Ops.Gl.GLTF.GltfScene_v2 - switch normals checkbox is respected by gltfnode child ops
op fix: Ops.Json.ObjectIsNull now updates nullcheck on change
op fix: Ops.Array.ReduceArray3_v2 - does not add null objects to array
op fix: Ops.Boolean.IfTrueThen_v2 - will no longer trigger output ports without input trigger connected
op fix: Ops.Gl.FontMSDF_v2 fix error when exporting patches using library fonts
op fix: Ops.Points.PointsSphereRandom - fix negative array length bug
op fix: Ops.Points.PointsSphereRandom - generate output array when creatign op
op fix: Ops.Gl.Textures.VideoTexture show error message if video is not loadable
op fix: Ops.Gl.CubeMap.CubeMapMaterial_v2: - works with WebGL1 now
New ops
- new op: Ops.Array.ArraySetNumber3 - set number values in an array3
- new op: Ops.String.OrString - outputs the first valid string
- new op: Ops.Gl.Textures.TextTexture_v3 : can now render text directly / includes hard edges shader
- new op: Ops.Gl.GLTF.GltfNodeTransforms - get transforms of multiple nodes as an array
- new op: Ops.Array.RouteArray - Route an array to an output port
- new op: Ops.Json.RouteObject - Route an object to an output port
- new op: Ops.String.RouteString - Route a string to an output port
- new op: Ops.Boolean.RouteBoolean - Route a boolean to an output port
core
- core: fix: it was possible to create textures bigger than allowed by webgl implementation
- core: fix: cases when op libraries where not loaded
- core: core is now able to load "modules" seperatly, export only consinsts of used modules
- core: ability to load and export core libraries as they are used
New ops
- new op: Ops.Gl.TextMeshMSDF_v2 - Draw text using MSDF rendering
- new op: Ops.Gl.FontMSDF - Define a MSDF font
- new op: Ops.Gl.TextureEffects.Noise.HexagonNoise - Hexagonal Noise texture
- new op: Ops.Lottie.LottieTexturePlayer - Play a Lottie animation in a texture
- new op: Ops.Gl.Shader.BasicMaterial_v3 - Internal changes optimized shader/better texture handling
- new op: Ops.Gl.Meshes.FloorGrid - draw a grid on the floor
- new op: Ops.Html.YoutubePlayer - play a youtube video in a HTML element
- new op: Ops.Html.ModalOverlay - create a modal HTML overlay with a darkened background
- new op: Ops.Html.WindowClose - Close current window
- new op: Ops.Website.ForceHttps - will redirect to same URL using https protocol
- new op: Ops.String.LoremIpsum - Lorem ipsum dolor sit amet
- new op: Ops.String.AddLineBreaks - Insert a linebreak after n characters
- new op: Ops.String.LineBreaksHtml - Convert linebreaks to html breaks
- new op: Ops.Array.ArraySetNumber - set a number at index in an array
- new op: Ops.Trigger.IsTriggered - outputs true if was triggered last frame
- new op: Ops.Trigger.TriggerString - trigger a string
- new op: Ops.Debug.ConsoleLog - output values to the console
- new op: Ops.Vars.VarSetTexture - Set a texture variable
- new op: Ops.Vars.VarGetTexture - Get a texture variable
- new op: Ops.String.FilterValidString - Filter valid strings (not null,undefined or empty)
- new op: Ops.Value.FilterValidNumber - Filter valid numbers
- new op: Ops.Array.FilterValidArray - Filter valid arrays
- new op: Ops.Json.FilterValidObject - Filter valid objects
- new op: Ops.Json.ObjectSetString - set string value in an object by key
- new op: Ops.Boolean.BoolToString - convert boolean to string
- new op: Ops.Gl.Textures.SwitchTextures_v2 - now only works when triggered
- new op: Ops.Gl.TextureEffects.Stripes_v3 - draws on top of other textures without blend modes
- new op: Ops.Gl.TextureEffects.Waveform_v2 - draws on top of other textures without blend modes
- new op: Ops.Gl.TextureEffects.WaveformGradient_v2 - draws on top of other textures without blend modes
- new op: Ops.Value.Integer - Stores an integer and allows it to be reused in other parts of the patch.
- new op: Ops.Array.ArrayOfObjectsFilterByKeyValue: filter objects in array of objects by key & value
- new op: Ops.Array.ArrayOfObjectsFilterKeys: remove keys from objects in array of objects
- new op: Ops.Array.ArrayOfObjectsToString: turn an array of objects into a string
- new op: Ops.Net.SocketCluster.SocketCluster - websocket functions
- new op: Ops.Sidebar.Incrementor - Steps through numerical or array values one by one
Editor user interface
- UI: canvas menu for seting up which op transform gizmos and helper are shown
- UI: canvas focus button to quickly change aspect ratio or resolution of renderer
- UI: better support and automatic detection of touchpads and apple mouse
- UI: file view: more file type icons / library files can now be downloaded/searched etc
- UI: ops working with files now show filename in op extenede title
- UI: search: pressing shift clicking bookmarks/search results will only show op parameters, without scrolling to op (or switching to subpatch)
- UI: search: ctrl+f/cmd+f always shows search tab
- UI: search: see all recently used ops
- UI: better error display of ops
- UI: fix: editor does not show save button when in read-only mode
- UI: code tab edit op button reads "edit" when user has rights to edit the op
- UI: op history: press j/k to cycle between last selected ops
- UI: editor will pause rendering after 60 seconds of inactivity
- UI: fixed bug when cursor keys did not work in parameter input fields
- UI: op parameter header shows if there is a newer version of op available / better warning message and link on op doc page.
- UI: export patch: option to include all files of the patch
- UI: command palette: added timeline play/pause/rewind commands
- UI: varGet/varSet ops filter variables only show by correct type
- UI: better cache invalidating when uploading json or gltf files
- UI: performance optimizations of animated op output parameters
- UI: Mesh helpers now work in WebGL1 aswell
- UI: cables code-editor now adheres to es2017 standards (async/await)
- UI: fix bug with "show/hide helpermeshes" not being followed
- UI: Comment op can no longer throw an error due to MathParser.eval()
Op enhancements and fixes
new op version: Ops.Gl.ShaderEffects.ColorArea_v2 - internally copying the shader / fixing the shaderStack
new op version: Ops.Vars.VarSetNumber_v2 - added a button for creating new variables / removed invalid variables
new op version: Ops.Devices.Mouse.MouseWheel_v2 - new version / more compatible values between browsers and os's
new op version: Ops.Gl.Meshes.Rectangle_v2 - rebuild only when needed / needs trigger to build geometry
op enhancement: Ops.Gl.Phong.LambertMaterial_v2 - add diffuse texture, add lighting calculations for all lights, new falloff mode, works on iOS
op enhancement: Ops.Gl.TextureEffects.PseudoLensFlares - add iOS compatibility
op enhancement: Ops.Devices.Midi.MidiMonitor: add device name info
op enhancement: Ops.Net.CorsProxy_v2 now urlencodes given strings to always make them work with the actual proxy
op enhancement: Ops.Json.AjaxRequest_v2 now has a trigger to reload data
op enhancement: Ops.Gl.ShaderEffects.ColorArea_v2 - added box area shape
op enhancement: Ops.Gl.Textures.WebcamTexture - added parameters: resolution and facing direction(user/environment)
op enhancement: Ops.Gl.Performance - shows gpu performance when possible (chrome) / better colors / more options
op enhancement: Ops.Html.CSS_v2 - You can now use {{ASSETPATH}} to get a URL to file Assets
op enhancement: Ops.Gl.Shader.ShaderInfo - works now even if shader is not used
op enhancement: Ops.Json.ObjectSetObject - fix string input
op enhancement: Ops.Value.Preset - move preset up/down
op enhancement: Ops.Gl.Texture_v2 - op active boolean input, handy for loading textures later
op enhancement: Ops.Gl.Texture_v2 - new URL string input field
op enhancement: Ops.Gl.MeshInstancer_v3 - performance improvement / uploads only data that has changed
op enhancement: Ops.Devices.Mobile.MotionSensor_v2 - added rotation rate outputs
op enhancement: Ops.Html.TransformElement - new parameters: scale / rotate / alignment
op enhancement: Ops.Gl.RenderAnim_v2 - transparency checkbox
op enhancement: Ops.Gl.InteractiveRectangle - option to not render the rectangle, but still be interactive...
op enhancement: Ops.Sidebar.ColorPicker - now has hex out
op enhancement: Ops.Cables.FPS - get averaged fps over n seconds
op enhancement: Ops.Boolean.ParseBoolean_v2 - new string port type
op enhancement: Ops.Gl.MeshInstancer_v3 - added material blend modes - Multiply, add and Normal
op enhancement: Ops.Gl.Shader.Shader2Texture - Custom resolutions can now be used again
op enhancement: Ops.Devices.Mouse.Mouse_v2 - Keeps mouse on the last position when it leaves the canvas and smooth is enabled.
op enhancement: Ops.Html.IFrame_v2 - shows border correctly when "show border" option is enabled
op enhancement: Ops.Exp.Gl.DeviceOrientationCamera - works correctly on IOS and android
op enhancement: Ops.Gl.TextureEffects.Blur - Gives a warning if a full screen blur is used.
op enhancement: Ops.Gl.Meshes.RectangleFrame - Rendering can now be disabled
op enhancement: Ops.Points.PointsSphereRandom and Ops.Points.PointsCube now output total amount of points and array length
op enhancement: Ops.Array.SimplexArray now has an array input for time based values
op enhancement: Ops.Array.PerlinArray now has an array input for time based values
op enhancement: Ops.Array.ArrayGetNumber - now checks if the array value is a number
op enhancement: Ops.Gl.TextureEffects.WaveformGradient_v2 - now has a 'square' mode.
op enhancement: Ops.Gl.Meshes.Cone - Now has texture co-ordinates
op enhancement: array math, array logic , math and comparison ops are much faster now.
op enhancement: Ops.Array.InterpolateArrays - is much faster now
op enhancement: Ops.Gl.ShowNormals_v2 - rework op, add color & fix geometry input
op enhancement: multiple HTML and CSS ops now use the correct string input ports
op fix: Ops.Array.ArraySetArray no longer crashes if 2nd array is not connected
op fix: Ops.Array.ArrayLogicBetween_v2 - now checks the max value correctly
op fix: Ops.Math.Math - is much faster and no longer redraws UI elements every frame
op fix: Ops.Systems.Lsystem_v2 - now works again with string inputs for rule fields.
op fix: Ops.Sidebar.TextInput_v2 - displays default text when TextArea is selected.
op fix: Ops.Devices.Mobile.MotionSensor2 - now works with android and IOS. RENAME it to Ops.Devices.Mobile.MotionSensor_v2 before the next update
op fix: Ops.Array.ArrayChunk - No longer crashes when chunk size is greater than the length of the incoming array
op fix: Ops.Gl.CubeMap.CubeMapFromTextures_v2: fix asynchronous loading bug, add Y-Up feature
op fix: Ops.Gl.CubeMap.CubeMapCamera_v2: fix wrong cubemap face renders
op fix: Ops.Devices.Midi.MidiInputDevice_v2: now only tracking input devices, not output devices anymore
op fix: Ops.Gl.MeshInstancer_v3 rendering problems cone and torus
op fix: Ops.Gl.ForceCanvasSize - fixed bug: not updating the first time changing to aspect ratio
op fix: Ops.Gl.ForceCanvasSize - fixes for retina/hdpi displays
op fix: Ops.Audio.SpeechRecognition - works continously now
op fix: Ops.Gl.Textures.WebcamTexture - now works on ios
op fix: Ops.Ui.Comment_v2 - fix bug when it was not showing correct text
op fix: Ops.Gl.MeshInstancer_v3 - removing color array resets color to material color, fix blend modes for alpha channel
op fix: Ops.Array.ParseArray_v2 op now updates error-state for "numbers" correctly on change
op fix: Ops.Gl.Phong.PhongMaterial_v4 - correct lighting with mesh instancer
op fix: Ops.Gl.Phong.LambertMaterial_v2 - correct lighting with mesh instancer
op fix: Ops.Gl.CubeMap.CubeMapMaterial_v2: render sides correctly for cubemap & equirectangular, inside or outside of a mesh, flip option for each axis
Website
- web: util page to debug browser events: undefined
- web: tweak front page for mobile devices
- web: my patches list: by default ordered by date of last change
- web: my patches list: tabs for ordering by create/changed date
- web: properly integrated "top of the month" to the search and linked to it from the dashboard (undefined)
- web: likes no longer go off-screen when they are "too many" (undefined)
- web: images on search/overview now load for the first few patches
- web: secret url now loads userlibs and userops
- web: invite collaborator to patches sending mails, not only add them
Core
- core: vars: create variable helper functions also work for strings now
- core: vars: getter ops: only show vars compatible to the selected type
- core: vars: list always sorted by alphabet
- core: performance optimizations
Github
- github: updated coding with cables repo with clear examples of creating port types which are now up to date
Cables CLI
- cables-cli: now supports -h switch to hide "made with cables" (undefined)
- cables-cli: bugfix: make cables-api export return proper 404 and json on "project not found" error
- cables-cli: now supports "--assets" to download all/auto/none assets in export
Daplaya
- daplaya: daplaya no longer displays "made with cables" (undefined)
Discord
- discord: forum/published patches/social media are posted on our new discord - undefined
- New op: Ops.Gl.GLTF.GltfScene - GLTF File Loader and renderer
- New op: Ops.Gl.TextureEffects.ClampTexture - Clamp texture values with remap and smooth remap options
- New op: Ops.Gl.TextureEffects.LensScratches - procedural lens scratches texture generator
- New op: Ops.Gl.TextureEffects.LensDirt - procedural lens dirt texture generator
- New op: Ops.Math.Crossfade - crossfade between 2 values
- New op: Ops.Array.ArrayUnique - filters duplicate items form an array and returns unique values
- New op: Ops.Array.ArrayUniqueItemInfo - gives information about the appearance of items in an array
- New op: Ops.Devices.Mobile.MotionSensor2 - get motion sensors/ gyroscope etc. now works with ios 13 permission system
- New op: Ops.Array.CopyArray - Copy an array with a trigger, reset to use a default array
- New op: Ops.Array.HSBtoRGBArray - generates RGBA array from up to 4 arrays (HSBA)
- New op: Ops.Array.RandomArrays - create 1-, 2-, 3- or 4-dimensional array
- New op: Ops.Array.RandomNumbersArray4_v2 - create random array of 4-tuples
- New op: Ops.Array.SplinesToLineStripArray - Convert an array of splines to one "line stripped" array
- New op: Ops.Gl.ForceCanvasSize - Resize canvas element to a specific pixel size or aspect ratio
- New op: Ops.Gl.Matrix.CameraInfo - get camera attributes
- New op: Ops.Gl.ShaderEffects.AreaScaler_v2 - Scales the size of meshes within the area of influence
- New op: Ops.Gl.ShaderEffects.AreaTranslateFBMNoise - Translate object positions by noise
- New op: Ops.Gl.Array3ToTexture - Convert an array of RGB values to a texture
- New op: Ops.Gl.ShaderEffects.AreaTranslateMeshes - Change the position of all meshes inside of the area of influence
- New op: Ops.Html.ElementSize - Get size and position of a HTML element
- New op: Ops.Math.Compare.CompareNumbers - Performs logical comparisons on numbers (compare, operators)
- Editor: Ops.Sidebar.Sidebar - complete redesign, hopefully looking much better/modern now
- Editor: Search dialog (cmd/ctrl+f) - reworked and put into tabs
- Editor: Search dialog - quickfilter functionality by color/bookmarks/user ops etc.
- Editor: all ops with an inSwitch and inValueSelect now expose an in-port that takes the position of the desired dropdown-value as an input
- Editor: Click link circle to replace link with a new variable (make little VIDEO)
- Editor: export now includes external libraries in single-file-export, some cleanup
- Editor: external libraries can be added to user-ops again
- Editor: FileManager: jpg/png files imagemin optimize button
- Editor: Hold alt/meta and drag mouse/tablet pencil to zoom in/out
- Editor: Mathparser - Number input fields now have a simple math expression parser - VIDEO
- Editor: More accessible bookmark icon
- Editor: New command "create number variable"
- Editor: Open code editor from the op search dialog, handy when your op has code errors...
- Editor: Ops.Value.Preset - many ui tweaks to make it easier to work with
- Editor: Patch settings load and save faster
- Op enhancement: Ops.Gl.FaceCulling_v2 - fix: behaves correctly when using stacked cull modes
- Op enhancement: mouse/touchscreen ops: add element event switch
- Op enhancement: Ops.Anim.Bang - output can be inverted to count from 0-1
- Op enhancement: Ops.Anim.SineAnim - Added cosine mode
- Op enhancement: Ops.Array.Array_v2 - Now has reversed normalized mode going from 1.-0.
- Op enhancement: Ops.Array.CropArray - add startindex parameter
- Op enhancement: Ops.Gl.GradientTexture now takes array as input and can work with alpha (if in array)
- Op enhancement: Ops.Gl.Matrix.CircleTransform - added absolute number parameter
- Op enhancement: Ops.Gl.Matrix.ScreenCoordinates - boolean output if visible in canvas
- Op enhancement: Ops.Gl.Meshes.Cone - rendering can now be disabled.
- Op enhancement: Ops.Gl.Meshes.Cube - switch mapping methods
- Op enhancement: Ops.Gl.Meshes.SimpleSpline - added switch to generate texture coords
- Op enhancement: Ops.Gl.Meshes.TextMesh_v2 - texture mask input
- Op enhancement: Ops.Gl.Meshes.TextMesh_v2 - texture multiply input
- Op enhancement: Ops.Gl.MeshInstancer_v3 - add color array input to MeshInstancer
- Op enhancement: Ops.Gl.Shader.MatCapMaterialNew - tex offset params / tex lookup performance optimization
- Op enhancement: Ops.Gl.ShaderEffects.AreaDiscardPixel - added box shape
- Op enhancement: Ops.Gl.ShaderEffects.AreaDiscardPixel - scale area per axis
- Op enhancement: Ops.Gl.ShaderEffects.MeshPixelNoise - noise has xyz parameters
- Op enhancement: Ops.Gl.Texture - anisotropic texture filtering switch
- Op enhancement: Ops.Gl.TextureEffects.BarrelDistortion_v2 doesn't distort the image when intensity is set to 0
- Op enhancement: Ops.Gl.TextureEffects.CheckerBoard - Added scale from center mode
- Op enhancement: Ops.Gl.TextureEffects.Noise.PixelNoise_v2 - Added scale from center mode
- Op enhancement: Ops.Gl.TextureEffects.Rectangle_v3 - better color drawing / better coordinate system / aspect ratio
- Op enhancement: Ops.Json.AjaxRequest now takes a key/value-object of additional headers (i.e. for authorization tokens)
- Op enhancement: Ops.Json.ParseObject_v2 - better error handling
- Op enhancement: Ops.Math.Sign - Now has a mode to not output zero.
- Op enhancement: Ops.Net.CorsProxy_v2 - refactored to use new string instead of old
- Op enhancement: Ops.Gl.Phong.AmbientLight_v4 - changed default color to
- Op enhancement: Ops.Gl.Phong.PhongMaterial_v4 - works on iOS (light limit on iOS: 6), add more control to Fresnel (width, exponent)
- Op enhancement: Ops.Sidebar.TextInput_v2 - toggle between single input line or multiline textarea- UI: Screenshot button can now produce transparent images
- Op enhancement: Ops.String.LimitLineBreaks_v2 - force number of lines / amount of lines now shown is correct / fix crash
- Op enhancement: Ops.Value.Preset - presets can now be renamed / deleting a preset op will delete internally used variable connections from ports
- Op enhancement: RandomNumber Array Ops - now reaches max value when set to integer mode. Outputs null when array length is set to zero
- Op enhancement: Sidebar input ops have greyout/visible toggles
- Web: a core jsdoc page, this will be improved in the future - undefined
- cables-cli: new version allows for deployment to netlify
- core: cables now fires
CABLES.jsLoaded
event when all javascript libraries are loaded to allow for async loading of the patch, updated export and docs accordingly - core: fix bug in some cases disconnected arrays were still acting as being connected
- From now on, you can now read a full summary of our updates on our blog: undefined
- Web: Welcome page shows latest news from our blog.
- Editor: Text editor colorcoded content type display in tab
- Editor: fix open renderer in new window
- Editor: new background color
- Editor: Attach variables directly to ports without having to add extra ops
- Editor: help nav - list of keyboard shortcuts
- Editor: fix text-editor height bug
- Editor: fix and tweak colorpicker hex input
- Web: You can find cables updates in out blog from now on: undefined
- Web: Welcome page header is now connected to our new blog
- new op: Ops.Gl.PixelProjection
- new op: Ops.Math.MapGeoCoordsSpherical - Map geo locations (latitude - longitude) to spherical coordinates
- new op: Ops.Gl.TextureEffects.GrowPixels - Make one pixel lines thicker via postprocessing
- new op: Ops.Array.MapRangeArray - map numerical values in an array from one range to another
- new op: Ops.Array.SortArrayObjectsByKey - sort objects in an array by value of key (also nested)
- new op: Ops.Date.DateIsoToTimestamp - parse a iso formated date string to javascript timestamp
- new op: Ops.Array.GetValuesFromArrayOfObjects - Get an array of values by key of objects in an
- new op: Ops.Devices.Midi.MidiOutputDevice - Connect to MIDI device input port
- new op: Ops.Devices.Midi.MidiCCOut - Send MIDI CC data to a midi output
- new op: Ops.Devices.Midi.MidiNoteOut - Send midi note data to a midi output
- new op: Ops.Devices.Midi.MidiNRPNOut - Send midi NRPN data to a midi output
- new op: Ops.Gl.Phong.PhongMaterial_v4 - A shaded material for lighting objects
- new op: Ops.Gl.Phong.PointLight_v4 - Point light for phong shading
- new op: Ops.Gl.Phong.DirectionalLight_v4 - Directional light for phong shading
- new op: Ops.Gl.Phong.SpotLight_v4 - Spot light for phong shading
- new op: Ops.Gl.Phong.AmbientLight_v4 - Ambient light for phong material shading
array - op enhancement: Ops.Gl.Orthogonal_v2 - added axis switch
- op enhancement: Ops.Array.ParseArray_v2 - shows error indicator when invalid numeric values
- op enhancement: Ops.Gl.TextureEffects.DrawImage_v2 - transforms also apply to alpha mask
- op enhancement: Ops.Trigger.Repeat_v2 - now direction of index can be selected
- op enhancement: Ops.Devices.TouchGesture - added active bool input
- op enhancement: Ops.Gl.Meshes.SimpleSpline - performance improvement
- op enhancement: Ops.Json3d.Mesh3d - can now load meshes with vertexColors
- op enhancement: Ops.Gl.Meshes.PointCloudFromArray - performance improvement when updating coordinates regularly
- op enhancement: Ops.Devices.TouchScreen has force output - tested with apple pencil pressure/ipad pro
- op enhancement: Ops.Math.AddUp - reset trigger
- op enhancement: Ops.Gl.Shader.MatCapMaterialNew - added opacity texture
- op enhancement: Ops.Gl.TextureEffects.ScaleTexture - now has a mask input to control the scale with a texture
- op enhancement: Ops.Devices.Midi.MidiNote - added array out option for multiple notes
- op enhancement: Ops.Devices.Midi.MidiCC - added array out option for multiple cc values
- Rename Ops.Gl.Matrix.ViewMatrixTranslation to Ops.Gl.Matrix.cameraPosition
- Rename Ops.Gl.CanvasSize to Ops.Gl.CanvasInfo
- Rename Ops.Value.ValueBoolean to Ops.Value.Boolean
- Rename Ops.Gl.TextureEffects.Scroll to Ops.Gl.TextureEffects.ScrollTexture
- Rename Ops.Gl.TextureEffects.Circle to Ops.Gl.TextureEffects.CircleTexture
- Rename Ops.Value.ValueHub to Ops.Value.NumberSequence
- Rename Ops.Gl.Textures.Text_v2 to Ops.Gl.Textures.TextTexture_v2
- Rename Ops.Gl.Textures.Graph to Ops.Gl.Textures.GraphTexture
- Rename Ops.Json3d.Json3dScene2 to Ops.Json3d.Scene3d_v2
- Deprecated Ops.Devices.Midi.MidiKeyPressed
- Deprecated Ops.Value.ValueChanged
- Deprecated Ops.Value.ValueStringEditor
- Deprecated Ops.Gl.Particles.PointCloudFile
- Deprecated Ops.Devices.Midi.MidiSend
- Deprecated Ops.Devices.Midi.LaunchPadScroller
- Editor Preferences: added zoom speed option
- Editor Op port output values: click to copy to clipboard
- Editor: Timeline: easing selection works again
- Editor: Filemanager filters correct files for current port
- Editor: Export compatibility option: ES5 transpilation for older browsers
- Editor: Middle click for quicker linking
- Editor: Fixed text editor tabs height/cutoff problem
- Editor: Op search dialog search algorithm improved, e.g. order of words does not really matter anymore
- Editor: Hold shift key to add ops to selection
- Editor: canvas resolution field now also shows browser zoom level
- Web: user settings op page now is now ordered by date of creation
- Web: Added Github/Coding with cables link to Learn section.
- Cables-cli: updated undefined
- Cables-cli: added "combine-js" and "old-browsers" options to cables-cli
- Core: Fix webgl console warnings in firefox
- new op: Ops.Value.Preset - State management of all parameters connected to it - Create presets of multiple ops
- new op: Ops.Systems.ArraySpray - Particle Spray simulation
- new op: Ops.Mesh.Triangulate2dPath - Triangulate a 2d path to a flat and filled 3d geometry
- new op: Ops.Devices.OSC.OscNumber - Outputs a single number from a user defined OSC address
- new op: Ops.Devices.OSC.OscNumbers - Outputs up to 4 numbers from a user defined OSC address
- new op: Ops.Devices.OSC.OscArray - Outputs an array of data from a user defined OSC address
- new op: Ops.Devices.OSC.OscMessage - Shows the current active address of an incoming OSC message
- new op: Ops.Array.GetValuesFromArrayOfObjects - Get an array of values by key of objects in an array
- new op: Ops.Math.MercatorCoordsArray - Mercator map and center an array of latitudes and longitudes to a local coordinate system
- new op: Ops.Sidebar.LocalTextureFile - Let the user select a local file as a texture
- new op: Ops.Array.ArrayPack - Packs multiple arrays into a new array
- new op: Ops.Array.ShuffleArray3 - Shuffle an array of triplets
- new op: Ops.Array.FlattenArray - Creates a new array with all sub-array selements concatenated into it
- new op: Ops.String.CharacterRotate - String rotate characters like a split-flap display
- new op: Ops.Array.InfoArray2 - min,max and average values of an array3
- new op: Ops.String.NumTotalLineBreaks - Count number of line breaks in a string
- Op Enhancement: TextureEffects.Circle - Circle fix position
- Op Enhancement: Timer op can now be synched to timeline
- Op Enhancement: pointcloudfromarray input for texture coordinates
- Op Enhancement: pointmaterial - lookup texture now also affects mask texture
- Op Enhancement: ObjectGetNumber_v2 - new string type
- Op Enhancement: ObjectGetObject_v2 - new string type
- Op Enhancement: ParseObject_v2 - new string type
- Op Enhancement: SetObjectKeyValue - new string type
- Op Enhancement: TextureEffects.Scroll - mask parameter
- Op Enhancement: PointCloudFromArray - fix crash when switching scramble texcoords
- Op Enhancement: MouseDrag - added input type selection
- Op Enhancement: ShuffleArray rewrite - now works without any triggers
- Op Enhancement: Customshader2 - fix bug where vec3 was not updated after saving shadercode
- Op Enhancement: Array.ArrayLogic user can set value if condition evaluates to true
- Op Enhancement: Array.ArrayLogic now shows selected mode in UI
- Op Enhancement: Array.ArrayLogicArray user can set value if condition evaluates to true or false
- Op Enhancement: Array.ArrayLogicBetween allows pass value when it evaluates to true
- Op Enhancement: Math.RandomNumbers now generates random numbers when op is created and if seed,min and max. "is changed" Option to output floats or integers.
- Op Enhancement: Array.ArrayPack2 - Speed optimization.
- Op Enhancement: Array.ArrayPack3 - Speed optimization.
- Op Enhancement: Array.ArrayPack4 - Speed optimization.
- Op Enhancement: Array.TransformArray3- Speed optimization.
- Op Enhancement: Multiple random number ops can now output floats or integers.
- Op Enhancement: Array.Array3Average now outputs the correct average values of the array
- Op Enhancement: Anim.Smooth doesn't break anymore when inc/dec factor is set to zero
- Op Enhancement: TextureEffects.Shapes2d - now renders correctly on macos
- Op Enhancement: Array.RandomNumbersArray_v2 - Doesn't output an array of 100 when numValues is set to zero.
- Op Enhancement: Gl.MainLoop - Now shows in op title, if it's active or inactive
- Op Enhancement: WebAudio.BiquadFilter - Frequency can now go higher than 1
- Op Enhancement: Exp.Lsystem_v2 - Fixed bug in rule string creation.
- Old Op Gl.ShaderEffects.Fog has been renamed to Ops.Gl.ShaderEffects.FogEffect
- Old Op Gl.TextureEffects.Repeat has been renamed to Ops.Gl.TextureEffects.RepeatTexture
- Old Op Array.Array3Transform has been renamed to Ops.Array.TransformArray3
- Old Op Json3d.Json3dMesh has been deprecated. Please use Ops.Json3d.Mesh3d
- Old Op Trigger.SwitchTrigger has been renamed to Ops.Trigger.RouteTrigger
- Old Op Math.Array3x2dProjection has been renamed to Ops.Math.Array3To2dProjection
- Old Op Array.ArrayPushValue3x has been renamed to Ops.Array.Array3PushNumbers
- Old Op String.Join_v2 has been renamed to Ops.Array.ArrayToString_v3
- Old Op Points.PointsField3d has been renamed to Ops.Points.PointsCube
- Old Op Array.PointArray.Field has been renamed to Ops.Points.PointsPlane
- Old Op Value.Value3 has been renamed to Ops.Value.Trigger3Numbers
- Old Op Math.Random2 has been renamed to Ops.Math.TriggerRandomNumber
- Old Op Array.ArrayRotate has been renamed to Ops.Array.RotateArray
- Old Op Array.Array3Average has been renamed to Ops.Array.Array3GetAverage
- Old Op Array.ArraySmooth has been renamed to Ops.Array.AverageArray
- Old Op Gl.OnResize has been renamed to Ops.Gl.TriggerOnCanvasResize
- Old Op Color.RGBtoHSV has been renamed to Ops.Color.RGBtoHSB
- Old Op Json3d.Json3dMesh2 has been renamed to Ops.Json3d.Mesh3d
- Old Op Json.ObjectGetValue has been renamed to Ops.Json.ObjectGetNumber
- Old Op Array.AverageInterpolationArray has been renamed to Ops.Array.SmoothArray
- Old Op Array.ContinuousNumberArray has been deprecated. Please use Ops.Array.Array_v2
- Old Op Math.Array3xTransform has been renamed to Ops.Array.Array3Transform
- Old Op Array.Array3xAverage has been renamed to Ops.Array.Array3Average
- Old Op Value.Value has been renamed to Ops.Value.Number
- Old Op Math.Array3xMultiplyMatrix has been renamed to Ops.Math.Array3MultiplyMatrix
- Old Op Array.Array3xInterpolateDistributed has been renamed to Ops.Array.Array3InterpolateDistributed
- Old Op Array.Array3xRandomSelection has been renamed to Ops.Array.Array3RandomSelection
- Old Op Array.Array3xGetValues has been deprecated. Please use Ops.Array.Array3GetNumbers
- Old Op Array.ArrayUnpack4x has been renamed to Ops.Array.ArrayUnpack4
- Editor: User settings are now called preferences and have a completly new UI (cables->preferences)
- Editor: You now have to select a license to publish your patch, this license will be shown on the patch page.
- Editor: Show warning icon indicator, when network is disconnected
- Editor: Straight lines mode: cables now have edges
- Editor: Search: (cmd/ctrl+f) now shows where it found the query
- Editor: Search shows you selected ops and last clicked entries
- Editor: Search results can now be navigated using cursor keys
- Editor: Filemanager can switch between icon or list display again
- Editor: Filemanager list mode shows file size and date
- Editor: Filemanager list can be sorted by name/size/date
- Editor: Filemanager search/filter functionality
- Editor: Filemanager shows size when selecting multiple files
- Editor: Exported patch better minification
- Editor: Added LUTmap example files
- Editor: SVG path point converter: Now also parses polygons elements
- Editor: Many tweaks
- Web: browser info page now checks for WebGPU - undefined
- Web: Basic examples page has been cleaned up and has new sections and examples - undefined
- New op: Ops.Array.ArrayPack2 - Packs two individual arrays into a new array
- New op: Ops.TimeLine.TimeLinePlayer - Bundled timeline controls and timeline information
- New op: Ops.Gl.TextureEffects.Shapes2d - Generates lots of 2d shapes as a texture
- New op: Ops.Array.ArrayClamp - Clamps array values to a min and max value
- New op: Ops.Gl.TextureEffects.PaletteTexture - Generate a palette texture with an array input
- New op: Ops.Array.PaletteLibrary - Huge palette library in array form. Use with Palette texture op.
- New op: Ops.Array.ArrayMerge_v2 - Only merges 2 arrays together when 2 are present.
- New op: Ops.Array.ArraySqrt - Calculates the square root of an array
- New op: Ops.String.LimitLineBreaks - Limit number of lines in a string
- New op: Ops.Math.IndexFraction - Return fraction of value by index
- New op: Ops.Gl.Matrix.RandomGridPlacementArrays - Generate recursive random grid positions for instancing
- New op: Ops.Array.ArrayLogicBetween - outputs an array of 0 and 1 if array value is between of min and max or not
- New op: Ops.Html.WindowInfo - size of browser window in pixels
- Enhancement: Mesh Instancing now also works with non-indexed meshes
- Enhancement: Ops.WebAudio.AudioAnalyzer - User can now pick FFT size
- Enhancement: Ops.Gl.Meshes.TriangleArray_v2 - Now renders normals correctly with all materials.
- Enhancement: Ops.Array.ArrayLogic - User can now define a default value when it evaluates to true
- Enhancement: Ops.Gl.Matrix.WASDCamera_v2 - Added speed parameter
- Enhancement: Ops.Gl.TextureEffects.Fog_v2 - Complete overhaul. Much easier to use now. Accepts color gradient texture to control fog color over distance.
- Enhancement: Ops.Array.InterpolateNumbersArray3 - Doesn't output NaN when index is larger than array length
- Op Enhancement: New string version: Ops.String.Join - Join array values to a string
- Op Enhancement: New string version: Ops.Sidebar.SidebarText_v2
- Op Enhancement: Ops.Gl.Meshes.Cylinder_v2 - option flip mapping to horizontal mode
- Op Enhancement: Ops.Gl.TextureEffects.Stripes_v2 - added circular mode
- Op Enhancement: Ops.Gl.TextureEffects.ColorChannel - new alpha masking option
- Op Enhancement: Tweak scaling of Mesh and renamed JsonMesh3d to Ops.Json3d.Mesh3d
- new op: Ops.Gl.Meshes.ParametricSurface - Creates a 3d mesh from Math expressions
- new op: Ops.Array.InterpolateNumbersArray - interpolate between all values of an array
- new op: Ops.Gl.Shader.Shader2Textures - Render a shader to multiple textures
- UI: remove + button/add button / doubleclick on ops in opselect list
- UI: subpatch ports can now be renamed
- UI: fix connecting subpatch outputs in both directions
- UI: fix copy/pasting of whole subpatches
- UI: hovering ports now shows values of arrays/strings etc.
- UI: new tab icons for meta area
- Fix: mainloop active toggle
- Fix: Ops.Math.Random2 - replaced rounding of number to floor for correct random distribution
- API: ops can change title of ports via
render.setUiAttribs({title:"do the rendering"});
- Enhancement: Ops.Gl.Matrix.OrbitControls - reset trigger now also resets position from panning
- Enhancement: customshader2 show uniform types as ports: int,vec2,vec3,vec4
- Enhancement: customshader2 better parsing of uniforms
- Enhancement: Ops.Gl.Phong.LambertMaterial - Added double-sided option
- Enhancement: Ops.Gl.ShowNormals - Added show tangent & bitangent functionality
- Rename: Ops.Json.ObjectGetValue renamed to Ops.Json.ObjectGetNumber
- UI/Web: create patch: more and better patch templates to choose from
- UI: fix bug when no ops are visible anymore, after pressing c
- UI: fix/workaround on chrome mac - big value jumps when dragging parameter
- new op: Ops.Array.SmoothArray - performs average interpolation on array with varying up and down speeds
- new op: Ops.Array.PerlinArray - Creates an array filled with controllable Perlin noise
- new op: Ops.Array.SimplexArray - Creates an array filled with controllable Simplex noise
- new op: Ops.Array.SubdivideArray1 - Subdivides a single array
- new op: Ops.Math.RoundEven - Round to the next even number
- new op: Ops.String.StringEquals - check if content of two strings is the same
- new op: Ops.Gl.ShaderEffects.VertexPositionFromTexture - Set vertex positions from texture color values
- new op: Ops.Sidebar.SidebarVariables - show values of all variables in a sidebar
- new op: Ops.String.RightPadNumber_v2 - Converts a number to a string with x decimal places
- enhancement: Ops.Gl.TextureEffects.Interlace - added X or Y direction to scan lines
- enhancement: Ops.Array.ShuffleArray - now has a shuffle trigger so user can define when shuffle occurs
- enhancement: Ops.Array.Array_v2 - added extra mode for normalized values between 0-1
- enhancement: Ops.Gl.TextureEffects.Noise.PixelNoise_v2 - now has a controllable seed parameter
- enhancement: Ops.Gl.TextureEffects.RotateTexture - texture input for multiplier of the effect
- enhancement: Ops.Gl.TextureEffects.Pixelate - texture input for multiplier of the effect
- enhancement: Ops.Math.PerlinNoise - added seed parameter
- enhancement: fix Ops.Gl.TextureEffects.Noise.PixelNoise_v2 - black and white mode seed now always works
- many renamed ops to new naming guidelines, list of all changes: undefined
- Web: Filter Ops By Collections undefined
- Web: Clean up Layout of op detail page
- UI: show Op Modes in the title, e.g. Blendmodes of TexturEffects
- UI: new inSwitch UI Element for faster switching instead of dropdown element
- UI: Scroll in patch using mousewheel and alt/shift keys
- UI: Coding Ops: checking syntax for errors when coding before saving
- UI: code editor much better auto completion
- UI: Fix more cases of overlapping ops
- UI: newly created user ops should now show up in op search immediately
- UI: create variable shortcut in op select now works for all types
- UI: fixed browser crash/infinite loop when deleting parent op of a newly created port using subpatch "create port"
- Core: cleaned up port create functions undefined
- new op: Ops.Gl.Meshes.RectangleRounded - Draws a rectangle with rounded corners
- new op: Ops.Gl.TextureToPoints - Create points by sampling texture
- new op: Ops.Array.ArrayLogic - Performs logical comparison operations on a single array of numbers
- new op: Ops.Array.ArrayLogicArray - Performs logical comparison operations on two arrays
- new op: Ops.String.ConcatMulti.js - Joins multiple strings together
- new op: Ops.Array.SortArray - Sorts an array of numbers with one of two modes - ascending or descending
- new op: Ops.Array.Array3VectorLength - Returns the length of a vector for every triplet in an array
- new op: Ops.Devices.Midi.MidiTranspose - transposes midi notes by given number
- new op: Ops.Array.Array4toArray3 - convert an array4 to array3 by dropping every 4th number
- Enhancement: Ops.Gl.Meshes.PointCloudFromArray - Array Input for Vertex Colors / control color of every particle
- Enhancement: Ops.Anim.SineAnim - now has trigger out
- Enhancement: Ops.Array.ArrayPack3 - now has trigger out
- Enhancement: Ops.Array.Array_v2 changed dropdown to switch
- Enhancement: Ops.Array.Array_v2 - now shows selected mode in op view
- Enhancement: Ops.Devices.Midi.* - add output port grouping to all Midi ops
- Enhancement: Ops.Devices.MidiNote - add toggle functionality
- Enhancement: Ops.Devices.Midi.MidiNRPN - add clear functionality
- Enhancement: Ops.Gl.Meshes.SimpleWireframe - now also works with unindexed meshes
- Fix: Ops.Html.FontFile - Fixed file loading problems when viewing outside of the editor
- Fix: Ops.Gl.Shader.WireframeMaterial - fix bug when other Materials stop working after using WireframeMaterial
- Lots of smaller tweaks and fixes
- UI: user can change size of texture previewer
- UI: tweaked high contrast mode for cabling outside in sunlight
- new op: Ops.Array.ArrayPack4x - Pack 4 arrays into one array
- new op: Ops.ArrayRandomSelection - Extract a definable amount of values from an array
- new op: Ops.Array.ArrayMath - mathematical modes can be applied to a single array
- new op: Ops.Devices.Midi.MidiInputDevice_v2 - receives midi data from hardware or daw
- new op: Ops.Devices.Midi.MidiCC - receives midi CC data
- new op: Ops.Devices.Midi.MidiNote - receives midi note data
- new op: Ops.Devices.Midi.MidiClock - receieves midi clock signal
- new op: Ops.Devices.Midi.MidiChord3 - maps 3 midi notes to values
- new op: Ops.Devices.Midi.MidiMonitor - detailed information about midi events coming into cables
- new op: Ops.Devices.Midi.MidiNRPN - Read NRPN values from a controller
- new op: Ops.Devices.Midi.MidiNoteFilter - Reads only a specific range of midi notes
- new op: Ops.Array.GateArray - Only allows an array through if pass through is true
- new op: Ops.Array.Array_v2 - combines the old array op and ContinuousNumberArray op into one
- new op: Ops.Array.ArrayToByteBuffer - convert an array to a bye buffer (Uint8ClampedArray)
- new op: Ops.Trigger.TriggerReceive - Send/receive wireles triggers, similar to variables
- new op: Ops.Trigger.TriggerSend - Send/receive wireles triggers, similar to variables
- new op: Ops.Array.Array3 - create an array of num triplets set to default values xyz
- new op: Ops.Json.ObjectSetNumber - set number at key in an object
- new op: Ops.Array.Array4toArray3 - convert an array4 to array3 by dropping every 4th number
- new op: Ops.Bodymovin.LottieSVGPlayer - play lottie/bodymovin animations as SVG in a HTML element
- many new op versions with new string port type
- UI: texture ports: shortcut for creating a texture op
- UI: hide ui elements when maximize renderer
- feature: simpleWireframe now has normals/texturecoordinates
- feature: noise dithering and noise amount added to Ops.Gl.TextureEffects.SSAO2
- feature : Scale array now works with triplets on instanced meshes with Ops.Gl.MeshInstancer_v2
- cleanup: deprecation of ops that are not needed any longer
- cleanup: deprecation of tone.js ops
- fixed safari render to hdr/floaring point textures
- added tons of documentation/examples/etc.
- UI: Only latest op version will be shown from now on
- UI: Op version number hidden in op list/selector (e.g. Ops.Anim.Timer2 is now listed as Ops.Anim.Timer (v2))
- UI: Exporting option to export a patch as a single js file including json data, for faster loading of exported patches
- UI: op add dialog now also searches for multiple keywords, e.g. "interpolate array"
- UI: -/+ keys zoom in/out patch
- UI: touchpadmode tweaks / now in user settings menu
- UI: use cursor keys to change selection of ops (experimental)
- new op: Ops.Gl.Shader.IBLMaterial3 - v3 - Overall improvements and extra options
- new op: Ops.Gl.ShaderEffects.PerlinAreaDeform3 - v3 - Calculate normals and more/better modes
- new op: Ops.Exp.Gl.Physics.CastRay - Cast a ray and test intersection with physics bodies
- new op: Ops.Points.PointsField3d - Create a 3d point field with a definable amount of xyz points
- new op: Ops.Gl.Shader.CustomShader2 - Now parses uniforms from source code, uniforms don't disappear when not in use
- new op: Ops.Gl.Geometry.AlignGeometry - Align a geometry / change pivot/center point of geometry
- new op: Ops.Gl.SurfaceScatterInstanced3 - v3 - Scatter object on the surface of a mesh - more distribution modes / etc.
- new op: Ops.Gl.Matrix.ScreenPosTo3d2 - v2 - Convert screen coordinates to 3d coordinates
- new op: Ops.Gl.TextureFromColorArray - Create a texture from an array of numbers
- new op: Ops.Gl.Vr.MainloopWebVr - Rewritten WebVR Mainloop works with or without vr / added vr start button / etc.
- new op: Ops.Gl.TextureEffects.Wobble - Waving wobble motion effect
- new op: Ops.Json.GetStringFromObject - Get string from object
- new op: Ops.Value.SwitchFile - switch between files
- new op: Ops.String.StringNew2Old - temporary string port converter
- new op: Ops.String.StringOld2New - temporary string port converter
- new op: Ops.String.SwitchStringBoolean - Switch between two strings with a boolean
- new op: Ops.String.GateString - Output string if pass through is true
- new op: Ops.Json.GateObject - Output object if pass through is true
- new op: Ops.String.SwitchString - Switch between multiple strings with an index
- new op: Ops.Website.InfoURL - Information about the current URL
- new op: Ops.Cables.AssetPathURL - outputs the path to the assets
- new op: Ops.Html.BackgroundImage - Set a background image of a HTML element
- new op: Ops.Html.ToggleClass - Add or remove css class from a HTML element
- new op: Ops.Html.ElementChilds - Set childs of a HTML Element
- new op: Ops.Math.Compare.GreaterOrEquals - Result is true if number 2 is greater or equals number 1
- new op: Ops.Gl.Shader.ShaderDefine - Set shader defines
- new op: Ops.String.StringEditor - Editor op for large strings with syntax highlighting
- new op: Ops.Trigger.SetNumberOnTrigger - Putput number when triggered
- new op: Ops.Trigger.TriggerOnChangeArray - Triggers when array has changed
- new op: Ops.Trigger.TriggerOnChangeString - Triggers when string has changed
- new op: Ops.Array.ArrayCeil - Round numbers up
- new op: Ops.Array.ArrayFloor - Round numbers down
- new op: Ops.Array.ArrayFract - Each number in an array becomes the fractional remainder
- tweak: Ops.Gl.Shader.CustomShader: now works with uniform float arrays as input
- tweak: Ops.Gl.TextureEffects.DrawImageNew - added new aspect correct mode, also image scrolling
- tweak: Ops.Gl.MorphGeometries - now also morphs normals and tangents
- tweak: Ops.Gl.MainLoop: show transparent background checkerboard when clear checkbox is unchecked
- tweak: Ops.Array.ParseArray - By default array content is parsed as numbers
- tweak: Ops.Gl.ShaderEffects.AreaDiscardPixel - added repeat and diagonal modes
- tweak: Ops.Gl.Meshes.Cylinder2 - toggle mesh top/bottom caps
- tweak: Ops.Gl.TextureEffects.ScaleTexture - more parameters for positioning and origin of scaling
- tweak: Ops.Exp.Gl.ShaderEffects.LimitMeshByTexCoord - added more axis options
- fix: Ops.Gl.MeshMorph - Geometry parameter being below 0 or above 7 no longer throws an error
- fix: Ops.Array.PointArray.Field - now updates the array correctly when columns and rows parameter is changed.
- fix: Ops.Gl.Meshes.Cylinder2 - now renders correctly with IBLMaterial
- fix: Ops.Array.Array3xRandomSelection - doesn't output the same co-ordinates twice
- fix: Ops.Array.RandomArray - can now have a length of 0
- fix: Ops.Array.Array3xGetValues - now accepts floats as input for the index and makes it an integer
- fix: Ops.WebAudio.MicrophoneIn - working again
- UI: fix bug where new string type output preview was not updating
- UI: fix comment collision positioning with other ops
- UI: fixed bugs with HDPI displays
- web: fix link to my likes in "my" menu
- converted json3d files are smaller now, saving float arrays base64 encoded
- Embedding: pre initializing variable values (undefined)


- New op: Ops.Array.ArrayRotate - Rotates the contents of an array
- New op: Ops.Array.ArraySmoothStep - Applies a smoothstep function to the contents of an array
- New op: Ops.Array.ArrayPow - Applies a pow function to the contents of an array
- New op: Ops.Array.ArrayAbs - turns all array contents into positive numbers
- New op: Ops.Array.FillArrayRandomDuplicates - fill up array to reach given size
- New op: Ops.Array.PointArray.FillPointArrayDuplicates - fill up points array to reach given size
- New op: Ops.Points.PointsSphereRandom - Creates random points mapped to a sphere
- Fix: Ops.Gl.Shader.PointMaterial - now has correct sizes
- Fix: customshader better uniform management
- Fix: image compose bugs when using triggeronce
- Fix: ios artifacts when patch is running in iframe
- Feature: Ops.Gl.Textures.VideoTexture - output transparent texture while loading
- Feature: BoolAnim animate only one direction
- UI: add comments attached to any op in your patch
- UI: texture preview button for incoming texture ports
- UI: quick way of adding variables
- UI: fix wrong unlinking of ops when inserting non fitting op into link center
- UI: undo of deleting op restores old values
- Web: patch page menu show qr code for faster mobile access
- Web: fullscreen button resizes canvas, no fullscreen mode available on ios
- Web: better navigation menus
- new op: Ops.Gl.Meshes.SimpleWireframe - very simple wireframe renderer
- new op: Ops.Gl.TextureEffects.Emboss - emboss image effect
- new op: Ops.Gl.Textures.NoiseTexture - simple noise texture generator
- new op: Ops.Gl.AspectRatio - set aspect ration (replaces viewport/letterbox ops)
- feature: Ops.Gl.Texture2ColorArray now has floating point output from 0. to 1. works with HDR textures
- feature: Ops.Gl.TextureEffects.ChromaticAberration - added blendmodes
- feature: Ops.Gl.TextureEffects.Kaleidoscope - added blendmodes
- feature: Ops.Gl.TextureEffects.Vignette2 - added blendmodes
- feature: Ops.Gl.TextureEffects.Posterize - added blendmodes
- feature: Ops.Gl.TextureEffects.Rectangle2 - added blendmodes
- feature: Ops.Gl.TextureEffects.Twirl3 - added blendmodes
- web: ops can be assigned to collections - undefined
- web: op page can now list related ops
- web: op page list of latest changes to this op
- web: op page can now list op issues, e.g. not working on mobile
- web: fix order of op reference list
- UI: undo/redo now also works for parameter inputs
- UI: undo/redo tweaks/fixes
- new op: Ops.Gl.TextureEffects.WaveformGradient - Generate different texture waveforms. Sine, sawtooth and triangle.
- new op: Ops.Gl.TextureEffects.ScaleTexture - scale texture in an image compose
- new op: Ops.Gl.TextureEffects.GammaCorrection - Allows for Gamma correction of a texture
- new op: Ops.Gl.TextureEffects.Noise.PixelNoise2 - pixelated noise
- new op: Ops.Array.ArrayPack3 - pack 3 arrays into one
- new op: Ops.Array.ArrayUnpack3 - Splits a xyz array into 3 individual arrays
- new op: Ops.Array.ArrayUnpack4 - Splits a xyzw array into 4 individual arrays
- new op: Ops.Array.PointArray.Field - generate coordinates for a rectangular field of points
- new op: Ops.Array.Spline.RedistributeSplinePoints - recalculate a spline / change number of points
- new op: Ops.Math.PowerOfTwoSize - Return the value as next power of two
- new op: Ops.Math.FlipSign - positive numbers become negative and vice versa
- new op: lots of new ops with new string ports
- feature: Ops.Gl.TesselateGeometry - also tesselates tangents/bitangents
- feature: Ops.Gl.MeshInstancer - input for rotations / limiting etc
- fix: Ops.Gl.Meshes.TextMesh3 - center align correct
- fix: Ops.Gl.Textures.WebcamTexture - handle all new super awesome funny security restrictions of browsers
- fix: Ops.Gl.Shader.CustomShader - hides default internal uniforms/matrices
- UI: snappier UI - performance optimizations in big patches / less patch redraws
- UI: ( X ) mark not working ops when minimum link requirements are not met
- UI: Firefox UI Fixes/Tweaks, now should work 100%
- UI: texture preview now visualizes transparency
- UI: new texture previewer as overlay
- UI: new upload dialog
- UI: new UI tips & tricks dialog
- UI: many performance optimizations
- UI: mousewheel zooming viewbox rewrite / general patch tweaks and optimizations
- UI: of small tweaks and fixes
- WEB: shorter patch URL/id
- new op: Ops.Math.Sign - get sign of value (-1 if negative or 1 if positive)
- new op: Ops.Gl.TextureEffects.RotateTexture - rotate image in imagecompose
- new op: Ops.Html.SetCssVariableColor - set CSS variable color value
- new op: Ops.Html.SetCssVariableString - set CSS variable value
- new op: Ops.Html.GetCssVariable - read value of CSS variables
- new op: Ops.Array.SortArray3xByDistance - sort an array by distance to previous point
- ui: new patch settings user interface
- web: tweaked sections on home page, fixed "top of the month" and added "all time top patches"
- better validity check for opname when creating an ops
- high contrast theme better
- deprecated ops and renamed newer version
- lots of tweaks/changes/cleanups
- new op: Ops.Gl.TextureEffects.Waveform - New op to create different waveform textures
- new op: Ops.Patch.PlayButton - wait until user pressed the play button
- new op: Ops.Gl.Orthogonal2 - easier isometric/orthogonal projection rendering
- new op: Ops.Gl.DownloadTexture - download a texture as image file
- new op: Ops.Gl.TextureEffects.RotateTexture - rotate current state of image compose
- tweak op: Ops.Gl.TextureEffects.Repeat - blend modes added
- tweak op: Ops.Gl.TextureEffects.Stripes2 - Color values now work with gradient enabled
- tweak op: Ops.Gl.TextureEffects.Desaturate - added mask parameter
- tweak op: Ops.Gl.TextureEffects.Color - new mask parameter
- web: cables.gl homepage - display of latest videos/news/forum entries and user activity
- web: updated made-with-cables undefined
- editor: clone op now also copies op attachments
- core: new String port type - soon there will be an extra port type for strings
- fix simplespline performance issue
- fix webgl 1.0 compatibility issues
- copy cat cables video: elite dangerous loading screen undefined
- Render2Texture op tutorial undefined
- Random Numbers op tutorial undefined
- Average Interpolation op tutorial undefined
- Basic material op tutorial undefined
- Transform and Scale op tutorial undefined
- How to add custom controls tutorial undefined
- Switch trigger op tutorial undefined
- new op: Ops.Gl.TextureEffects.GlitchNoise - creates glitched black and white textures
- new op: Ops.Gl.TextureEffects.PseudoLensFlares - simulate lensflare effect
- new op: Ops.Gl.TextureEffects.PixelDisplacement3 - mirror wrap mode and input modes selectable / added blendmodes
- new op: Ops.Gl.Meshes.Cylinder2 - rewrite - inner radius parameter to make holes in cylinders
- new op: Ops.Gl.Meshes.Sphere2 - rewrite - fixed some problems with duplicate faces
- Ops.Gl.TextureEffects.Stripes2 - free rotation + added blendmodes
- Ops.Gl.TextureEffects.Noise.Noise Ops.Gl.TextureEffects.Noise.PixelNoise - added new RGB color noise switch
- added blending and blendmodes to existing ops: TriangleNoise CheckerBoard EdgeDetection2 SimplexNoise CellularNoise Border Pixelate Vignette2 Depthtexture
- mesh ops: fixing most primitives with correct tangents/bitangents
- UI: snap to grid - snap ops to grid - usersettings and shortcuts undefined
- UI: click in background to find ops by colors if you have colored ops
- UI: comments can now be colored
- UI: copy+pasted ops are selected and can be moved together
- UI: click parameter name to create and link op undefined
- UI: texture previewer tweaks
- VIDEO: undefined - Depth Texture Focus tricks tutorial
- VIDEO: our new channel "Byte Size Tutorials" undefined
- new op: Ops.Gl.Matrix.Billboard - Rotate an object to always face the camera
- new op: Ops.Exp.Lsystem - An LSystem is a parallel string rewriting system see: undefined
- new op: Ops.Trigger.Past - Triggers only once when threshold is crossed
- new op: Ops.Json.ObjectSwitcher.js - Allows switching between objects
- new op: Ops.Gl.Meshes.Cross - Draws a cross mesh with controllable thickness and length.
- new op: Ops.Array.ArraySin - Performs a sin or cos operation on the contents of an array
- new op: Ops.Array.ArraySum - Adds one number to all values in an array
- new op: Ops.Array.ArraySubtract - Subtracts one number from all values in an array
- new op: Ops.Array.ArrayDivide - Divides all values in an array by one number
- new op: Ops.Array.ArrayModulo - Applies a modulo operation to all values in an array
- new op: Ops.Array.ArrayMin - Applies a min operation to all values in an array
- new op: Ops.Array.ArrayMax - Applies a max operation to all values in an array
- new op: Ops.String.RightPadNumber - number to a string, adds zeroes to reach num decimal places
- new op: Ops.Audio.MidiJsonNote - Filter midiJson for notes
- rectangle can now have more than 64k vertices
- web: "my patches"-page can now be filtered
- web: menu nav now optimized for mobile devices
- new command: "find unconnected ops"
- new command: "find user ops"
- fix: render2texture: check for max number of MSAA samples
- UI: you can set color marker for ops manually undefined
- UI: find better score for ops in current subpatch / show color marker in results
- UI: fix bug (wrong axis) when pressing A to align ops
- UI: show multiple lines when dragging multiple links at the same time
- UI: reset op parameters to default values via op contextmenu
- UI: added user ops namespace color for better visibility
- UI: clone op dialog if you don't own the patch
- UI: many little fixes and tweaks
- javascript: op coding: better error handling
- javascript: reduced global scope vars
- updated made with cables undefined
- better browser info / responsive layout undefined
- new tutorial: how to use LSystem undefined
- new tutorial: custom shader undefined
- documentation: added "Creating attachments" section
- see new features in our blog: undefined
- new op: Ops.Gl.Shader.IBLMaterial2
- new op: Ops.Gl.TextureEffects.DepthTextureFocus
- new op: Ops.Gl.DirectionalTranslate
- new op: Ops.Array.ArraySmooth
- new op: Ops.Gl.Render2Textures
- new op: Ops.Gl.ShaderEffects.Render2TexturesSlots
- new op: Ops.Html.CSSFilter
- new op: Ops.Html.TransformElement
- new op: Ops.Html.CSSProperty
- new op: Ops.Html.CSS3DElement
- new op: Ops.Value.PreviousValueStore
- new op: Ops.Array.ArrayMath
- new op: Ops.Website.LocalStorage
- new op: Ops.Gl.Matrix.InterpolateMatrix
- new op: Ops.Array.ArraySwitch
- new op: Ops.Json.ObjectIsNull
- new op: Ops.Value.FileInput
- new op: Ops.Exp.Gl.Shader.SetMaterialParameters
- feature: editor is now minimizable (via button or escape)
- feature: better serverside file editor support
- feature: ops using cubemaps now supports single texture equirectangular maps
- feature: new file operation: resize image to next power of two width/height
- feature: new file operation: resize image to 50% of original size
- feature: new file operation: convert png to jpg
- tweak: json3dscene - overwrite material
- tweak: new multi texture preview
- tweak: better preview image quality
- tweak: executing crashed op code will show dialog to reload patch
- tweak: file browser: show file suffix in icon view
- tweak: better visual "saving" indicator
- fix: multi level subpatch backbutton now switches to parent subpatch
- fix: editor stays open after reload for all type of files
- fix: "stuck cursor image" issue
- fix: executing op code will reload multiple instances properly
- doc: more in-depth op coding documentation at undefined
- new op: Ops.Gl.GlPrimitive - Force rendering of meshes using points,lines or triangles
- new op: Ops.Gl.Texture2ColorArray - Extract colors from a texture [thanks @lj]
- new op: Ops.Gl.Canvas2Texture - Convert a canvas to texture [thanks @lj]
- new op: Ops.Math.Degrees , Ops.Math.Radians - convert radians to degrees and vice versa [thanks @action]
- worley/cellular/fbm/layer-noise added switch to be tileable
- patch embedding: new option
glCanvasResizeToParent:true
- fix: customshader bug: not able to save project after editing uniforms
- fix: webgl 1.0 framebuffer forgetting selected filtering
- loaded projects now contain all ops of all users of this patch
- texteditor fix undo history/seperate editor instances for every tab
- new commands
pause
/resume execution
- fix cursor scrolling in op search dialog
- show "edit code" button when selecting user owned op
- edit string parameter button bigger
- possibility to copy patch (and error message) when saving a patch, without having write access
- many little tweaks and fixes
- new op Ops.Gl.Matrix.Camera - easier camera op by @action
- editor: use browser default antialias setting
- web: layout op reference page
- web: users will stay logged in, even when restarting the browser
- embedding patches: quicker way to set variable values:
patch.setVariable(name,value)
- ui: linking an input port to Ops.Value.Value will adopt the previous value and set a title
- ui: dragging the patch (right click or pressing space) will not loose selection anymore
- ui: fix "view op code"
- doc: added 9 tipps to UI walktghrough undefined
- new op: Ops.Gl.TextureEffects.Noise.WorleyNoise
- new op: Ops.Gl.Shader.CustomShader
- new op: Ops.Gl.Shader.Shader2Texture
- web: you can now set your password in settings
- UI: project settings: owner is able to change the patch owner
- UI: new value dragging user interface / dragging values now works on whole field / from left to right
- UI: op parameter: spacing between value groups
- UI: text-editor: switch between files via dropdown menu
- fixed: webgl warning VertexAttribDivisor
- fixed op textmesh border (premultiplied blendmode)
- new op: Ops.WebAudio.WebAudioContextRunner - Helper op for unmuting on iOS & Chrome
- new op: Ops.Sidebar.ColorPicker - Lets you enter / pick a color in the sidebar
- new op: Ops.Sidebar.DropDown - Drop-down for the sidebar
- new op: Ops.Sidebar.TextInput - Enter text in the sidebar
- fix: chrome 66 automatically muting audio playback (sigh)
- web: improved search functionality undefined
- web: added possibility to search for ops
- ui: changed default file list view to list
- ui: changing file list view will be set after reload
- ui: file view and timeline opened state will be set after reload
- ui: new command:
create new file
- ui: it is now possible to edit files on the server (
.json
,.csv
,.frag
,.vert
)
- new op: Ops.Gl.Textures.Histogram - Graphical representation of distribution of color in a texture
- new op: Ops.Math.Phyllotaxis2 - Coordinate generation like arrangement of leaves in some plants
- new op: Ops.Anim.LFO - Low-frequency oscillation for animations
- example: Ops.Array.ArrayInterpolate - interpolate between two arrays
- example: Ops.Exp.Gl.VectorFieldArray
- mini howto: convert files, e.g. SVG to Mesh: undefined
- web: better changelog / tweaked acces rights examples
- ui: much better sidebar ui style / can be minimized
- new op: Ops.Gl.ShaderEffects.SplineRepeatInstanced - repeat a mesh along a spline using instancing
- new op: Ops.ShaderEffects.TransformInstanced - transform instanced meshes
- new op: Ops.Gl.MorphGeometries - morph between two geometries
- new op: Ops.Gl.TextureEffects.Noise.PixelNoise - pixelated noise
- new op: Ops.Gl.TextureEffects.Noise.PolkaDotNoise - noise circles
- new op: Ops.Trigger.SceneMixer – enable / disable multiple triggers with a boolean
- new op: Ops.Value.ValueHub – Sequence for values
- new op: Ops.Anim.AverageInterpolation - replaces old approachInterpolation
- op Ops.Json3d.Json3dMesh - new option to merge and draw all meshes at once
- op Ops.Gl.MainLoop - fix HDPI support
- new tutorial: How to use send data from an Arduino to cables: <undefined>
- ui: timeline
b
/n
hotkeys to mark loop area begin and end - ui: new command: scale renderer canvas
- web: you can update your email in settings->account
- core: performance optimizations when drawing many objects
- serverside: svg converter can now hndle multiple pathes
- serverside: exports contain doc.txt with list of used variables
- serverside: cables moved to a new server
- secret url: share URL to patch viewer without publishing / needing a login
- cli-update: Version 0.2.0 of the cables command line tool (undefined) has been released with some new features
- ui: search in patch : score system / ranking of renamed ops better
- ui: show warning when patch was saved on server and your current version is out of date
- file info: .3d.json files - see what uses how much space in 3d files
- file converter: .3d.json files - remove unwanted content for size optimization (texcoord/tangents, etc...)
- new op: Ops.Gl.ShaderEffects.GrassWobble - simulate grass motion in wind vertex shader
- new experimental op: Ops.Anim.Snap - Snap at certain points (e.g. while scrolling)
- new experimental op: Ops.Exp.RenderAnim - export an animation as webm video or png image sequence
- new op: Ops.Gl.Geometry.ScaleGeometry - uniform scaling of geometry vertices
- new op: Ops.Boolean.TriggerBoolean - trigger true or false values
- new op: Ops.Gl.TextureEffects.Twirl2 - better twirl texture effect
- new op: Ops.Gl.Geometry.SortGeometry - sort geometry triangles by position
- new op: Ops.Trigger.IfEqualsThen - trigger if values re equal
- new op: Ops.Gl.GlInfo - information about webgl/canvas
- new op: Ops.Math.Speed - Measure speed of how much a value changes
- new op: Ops.Vars.SetVariableByTrigger - set variable only after being triggered
- new op: Ops.Json.ObjectRelay - Let’s a object through only if control bool is true
- new op: Ops.Boolean.Not - better op name / result is false if input is true and vice versa
- tweak new op version - Ops.Math.Max2 - Returns the biggest number
- tweak new op version: Ops.Gl.Shader.BasicMaterialNew - alpha mask channel method selection
- tweak new op version: Ops.Gl.ShaderEffects.PerlinAreaDeform2 - normals calculation (experimental) / different methods
- Tweak: Ops.Exp.Gl.MatCapMaterialNew - simple default matcap texture
- Op search: faster / score: additional score for shorter namespaces / better sorting
- UI: safari fixes for search/op search and correct mousebuttons
- UI: new basic gradient editor
- UI: timeline mousewheel valuescale / several fixes/tweaks
- Update Tone.js library to r11
- new op: Ops.Gl.TextureEffects.LUTMap - Apply color filter/effects by using a lookup texture
- new op: Ops.Gl.GradientTexture - gradient texture and new gradient ui editor
- new op: Ops.Gl.ShaderEffects.AreaDiscardPixel - Do not draw pixels inside a 3d area
- new op: Ops.Array.Array3xSplinePositionAtDistance - Get position in array3x/spline at distance from start
- new op: Ops.Value.ValueRelay – Let’s a value through only if control bool is true
- new op: Ops.Array.ArrayBreakOut – Breaks out the values of an array
- new op: Ops.Array.ExclusiveBoolStateArray – Array filled with “0”, only one can be “1"
- new op: Ops.Value.MinimumSafeInteger – Returns the minimum safe integer
- new op: Ops.Value.MaximumSafeInteger – Returns the maximum safe integer
- new op: Ops.Patch.LoadingStatusTask - Creates custom loading tasks
- new op: Ops.Value.TriggerOnChange - triggers next everytime the input value changed
- new op: Ops.Cables.PatchConfig - Read patch config when embedding on another page
- new op: Ops.Json.ObjectTrigger - set output object when triggered
- new op: Ops.Json.ObjectOr - result is first connected valid object
- new op: Ops.Gl.ShaderEffects.InstancedPerlinPosition - displace position of instanced object by perlin noise value
- new op: Ops.Html.ElementFadeInOut - fade html elements in and out
- new op: Ops.Array.ArrayMergeSimple - merge two arrays
- new op: Ops.Math.Random2 - generate random number between min and max
- new op: Ops.Anim.FrameRangeAnim - Parses string containing ranges of frames and play as coherent animation
- new op: Ops.Gl.InteractiveRectangle - simple interaction op without picker/pickingmaterial
- new op: Ops.Json3d.SceneInfo - Information about the current 3d scene
- new op: Ops.Net.CorsProxy - cables experimental cors proxy
- new op: Ops.Html.DivElement - html div element
- new op: Ops.Array.ArrayInterpolateOffset - Interpolate between two arrays, only a few numbers at the same time
- new op: Ops.Debug.GlDebug - See current gl states and error message
- new op: Ops.Gl.Depth2 - set Depth testing parameters
- new op: Ops.Sidebar.Button - display a button in the sidebar
- new op: Ops.Sidebar.DisplayValue - display a value in the sidebar
- new op: Ops.TimeLine.TimelineValue - Get timeline value at [time]
- new op: Ops.Math.Ease - Map a value to an easing curve
- new op: Ops.Math.Pi - pi number
- new op: Ops.Math.DeltaSum - Add delta values to an clamped absolute value
- new op: Ops.Trigger.RandomTrigger - Randomly trigger output ports
- new op: Ops.Array.RingBuffer - Array of fixed size, index is automatically incremented and restarts after reaching the end
- new op: Ops.Gl.Textures.CopyTexture - Copy a texture and optionally resize it
- new op: Ops.Array.Array3xGetValuesInterpolated - Get interpolated values between the indices of an array3x
- new op: Ops.Value.ValueSwitchBoolean - Switch between two values by a boolean
- new op: Ops.Json.ParseObject - parse string into object
- new op: Ops.Array.Array3xSplineLength - Sum of distances between points/items in an array3x
- new op: Ops.Array.Array1xTo3x - Convert array to array3x
- new op: Ops.Array.Array3xGetValues - Get 3 values from an array3x
- new op: Ops.Array.Array3xMultiply - Multiply every XYZ member of array3x
- new op: Ops.Array.ArrayMerge - Merge/concat two arrays
- new op: Ops.String.HashIdDecode - read back integers from a hashid
- new op: Ops.String.HashIdEncode - generate short unique ids from integers
- new op: Ops.String.Base64Decode - decode base64 string
- new op: Ops.String.Base64Encode - encode base64 string
- change default depth test method to LESS OR EQUAL for easier 2d stuff
- experimental open renderer in new window button
- Editor user settings: hide minimap option
- Editor user settings: straight lines option
- File selector button much better and more readable
- new op: Ops.Array.ArraySum
- new op: Ops.Gl.Meshes.Star
- new op: Ops.Exp.Gl.ShaderEffects.Fur
- new op: Ops.Math.MercatorCoord
- new op: Ops.Gl.DrawTextureMapping
- new op: Ops.Exp.Gl.ShaderEffects.LimitMeshByTexCoord
- new op: Ops.Exp.Gl.Matrix.RandomInstancer
- new op: Ops.Gl.MeshInstancer
- new op: Ops.Exp.MatrixToCssTransform
- new op: Ops.Html.IFrame
- new op: Ops.Gl.ShaderEffects.Twist2
- new op: Ops.Gl.TextureEffects.RoundCorners
- new op: Ops.Gl.TextureEffects.Twirl
- new op: Ops.Json.CsvColumnArray
- new op: Ops.Json.CsvJsonFile
- new op: Ops.Math.NumberDivisible
- json3dscene2: more options / better generated op order/structure
- animation renderer can now render to .WEBM video files
- UI: show error message when uploading unknown filetypes
- UI: show upload progress bar
- UI: show current file filter in file library header
- new op: Ops.Gl.Mesh.Polyhedron - generate polyhedron meshes. example: <undefined>
- new op: Ops.Gl.Geometry.DivideGeometry - disconnect faces/polygons of a mesh
- new op: Ops.Gl.ShaderEffects.ExplodeDividedMesh - explode a (divided) mesh in the direction of faces normals. example: <undefined>
- new op: Ops.Gl.ShaderEffects.ScaleByNormal - scale an object in the direction of face normals. example: <undefined>
- new op: Ops.Boolean.MonoFlop - trigger switches bool to true, turns back to false automatically
- new op: Ops.String.StringIterator - Iterate over every character of a string
- new op: Ops.Math.PointInRectangle2d - test if a point is in or outside of a rectangle
- new op: Ops.Math.AddUp - add up numbers
- new op: Ops.Math.CircleCoordinates - calculates x,y coordinate of a circle
- new op: Ops.Math.OneMinus - subtract a number from one
- new op: Ops.String.RandomString - generate a random string of given characters
- new op: Ops.Timeline.GotoFrame - jump to a key in the timeline
- new op: Ops.Debug.Console - show console log output on the screen
- new op: Ops.Array.ArraySetObject - put an object at index in an array
- new op: Ops.Array.Array3xAverage - average x,y,z values of an array3d
- new op: Ops.Array.Array3xAnalyze - min,max and average values of an array3x
- new op: Ops.Array.Array3xReverse – Reverses an array with value triplets, e.g.
[1, 2, 3, 4, 5, 6] —> [4, 5, 6, 1, 2, 3]
- new op: Ops.Boolean.IfFalseThen - trigger childs if value is false
- new op: Ops.Gl.OnResize - trigger when canvas was resized
- new op: Ops.Gl.Geometry.GeometryInfo - information about a geometry
- new op: Ops.Gl.Geometry.TransformGeometry - transform vertices of geometry
- new op: Ops.Gl.Geometry.CenterGeometry - center an object to the average x,y,z position of its vertices
- new op: Ops.Gl.Geometry.GeometryPoints - get vertices of a geometry as array3x
- new op: Ops.Gl.Geometry.GeometryBounds - boundings of a geometry / draw a bounding box
- op-rename: Ops.Math.Sinus —> Ops.Math.Sine
- fix: Ops.Array.ArrayReverse – Does not reverse the input array, creates a copy
- fix: Ops.Gl.Matrix.ScreenCoordinates - better accuracy
- new op: Ops.Gl.Screenshot - download the current screen as .png file by triggering
- new op: Ops.Gl.QrCode – generates a QR-Code, example: <undefined>
- new op: Ops.Devices.Mobile.LockOrientation - force screen orientation
- fix: ArrayBuffer3x - added reset button - does not start at 0,0,0, but on first value given
- new command: reset renderer size
- fix: animation renderer: speed + less problems when resizing canvas
- fix: removed ipad “rubberbanding” when viewing patch in new window
- fix: mousepicker compatibility with hires screens
- fix: command: set renderer size can now set size bigger than browser window.
- op: TextureEffects.ChromaticAberration - new parameters: smooth and masking
- ui: Op Select - browse ops by namespace
- fix: patch export now includes all (external) libraries
- new op: Waveform – renders the waveform of an audio file, example: <undefined>
- new op: Ops.Gl.TextureEffects.Noise.RectangularNoise
- new op: Ops.Net.AjaxRequestString
- ui: [ALT]+[right mouse]+drag on existing link will copy link to another port
- new command (CMD+P): toggle window fullscreen show editor in fullscreen
- new command (CMD+P): toggle editor show/hide toggle editor
- search now shows subpatch path of op
- op fix: Ops.Gl.TextureEffects.DepthTexture - working as expected again
- op tweak: Ops.Gl.TextureEffects.Circle - position and correct aspect ratio
- ui fix: playing timeline does not stop when pressing any key / toggle play with space key
- sandboxing security improvements
- new op: Ops.Gl.TextureEffects.ColorMap - map colors to luminance
- new op: Ops.Gl.ShaderEffects.Bend - bend objects along an axis (thanks kusma)
- op fix: Ops.Json.ObjectGetObject – Key input works again
- op fix: Ops.Json.ObjectGetValue – Key input works again
- ui: faster startup/loading time of big patches
- timeline: overview double click toggle area to whole project length
- timeline: cursor position percentage display
- patch page: tweaked info display / mobile optimized
- tweaked/fixed animation renderer/exporter
- new video tutorial: [embed a cables patch into your website](undefined)
- performance tweaks: freeShape / Pointcollector
- new op: Ops.Gl.TextureArrayLoaderFromArray
- new op: Ops.Array.ArrayReverse
- Ops.Gl.Performance - toggle visibility
- profiler: Peak CPU Usage analysis
- timeline: “Show all Values” fixed scaling problems and other small tweaks
- timeline: metatab shows all keyframed op ports
- timeline: resize visible area
- responsive and nicer browser check <undefined>
- Ops.Gl.Mainloop - support for retina/high DPI screens
- tweaked ios safari patch iframe/canvas
- new op Ops.SetVariableString: Set a string variable from
- new op: Ops.Gl.ShaderEffects.DeformArea deform spherical area
- new op: Ops.Gl.ShaderEffects.PerlinAreaDeform perlin noise vertex wobble
- new op: Ops.Gl.Meshes.TriangleArray build a mesh out of an array of points
- new op: Ops.Gl.Meshes.Cube2 cube with correct size
- new op: Ops.WebAudio.TextToSpeech.Say - text-to-speech, say things, Example: undefined
- new op: Ops.Exp.Gl.ShadowSource, Ops.Exp.Gl.ShaderEffects.Shadow very early, experimental shadowmapping
- UI: transform gizmo for transform ops undefined
- misc: Many fixes and ui tweaks
- new op: Ops.Gl.TextureEffects.SSAO2 - new screen space ambient occlustion
- new op: Ops.Gl.TesselateGeometry - create more triangles in a geometry/mesh
- new op: Ops.String.SubString - subset of a string between one index and another
- new op: Ops.String.StringLength - number of characters in a string
- new op: Ops.String.StringTrim - remove whitespace from start and end of string
- new op: Ops.String.Lowercase
- Ops.Gl.TextureEffects.Color - finally has blendmodes
- Ops.Gl.TextureEffects.Vignette - better controls + color
- matcapMaterialNew experimental screenSpace normal calculation in shader
- UI: dragging values of parameters is much slower now / shift accelerates
- UI: dragging integer port values now only results in integers
- UI: fixed loading of old patch version
- core: grey defaultshader now works with shaderEffects/shaderModules
- core: better switching between glsl version 1 and 3 / compatibility defined
- tweaked names for many ops
- web: changed font for better readability and get rid of typekit once and for all
- web: examples page revamped
- new op: Ops.Date.DateDifference - get difference from two timestamps (countdown)
- new op: Ops.Date.DateTimestamp - get Timestamp from a date
- new op: Ops.String.LeftPad - create a fixed length string from a number 1 -> 0001
- new op: Ops.Anim.InOutInAnim - animates after a trigger from 1 to 0 to 1
- new op: Ops.String.StringBreak - insert linebreaks into a string after [num] chars
- fix: phongmaterial works now with shadereffects like pixelMeshNoise, fog, areaColor
- new op: Ops.Gl.ShaderEffects.Fog - draw fog while rendering meshes, before postprocessing - example: <undefined>
- new op: Ops.Gl.ShaderEffects.ColorArea - colorize pixels of meshes in an specific area - example: <undefined>
- tweaks Ops.Gl.Matrix.OrbitControls - many tweaks and outputs degrees
- CGL: auto shader module grouping for module prefixes
- new op: Ops.Gl.Phyllotaxis calculate phyllotaxis pattern coordinates
- ui: animation render as modal window / new command “animation renderer” +progressbar
- new op: Ops.Math.GaussianRandomArray - random numbers fitting a Gaussian, or normal, distribution
- new op: Ops.Gl.ShaderEffects.MeshPixelNoise simple 3d space color noise for meshes without needing textures or texture coordinates
- new op: Ops.Array.ArrayContains, Ops.String.StringContains - check if an array contains a string or number
- new op: Ops.Boolean.TriggerChangedTrue - trigger next only after value was changed to true
- new op: Ops.String.Join - join array values to a string
- ui: outdated ops warning: offer to create new version if exists / outdated op warning is now visible in patch
- ui: better comments
- ui: rewrite texture previewer - much better performance
- ui: sidebar customize drag’n’drop interface
- experimental data flow visualization of the patch : press
cmd+p
and then enterflow
undefined - new op: Ops.Variable / Ops.SetVariable for new patch variables system
- new op: Ops.Gl.TextureEffects.CheckerBoard
- new op: Ops.Boolean.isZero, Ops.Boolean.isOne
- new op: Ops.Gl.TextureEffects.PolarCoords
- new op: Ops.Html.CSS - style html elements
- new op: Ops.Devices.TouchScreen - touch events and coordinates from multiple fingers
- all mouse ops work with touch devices now and emulate a left mouse button
- New Op: Ops.Html.WindowHasFocus - detect if the browser window/tab has focus
- ui: SubPatch navigation breadcrumb
- UI: preview image: background toggle by click to see transparency
- ui: fix: copy and paste subpatches
- ui: fix export finished window overflow
- ui: fix bug where previewer made everyting really slow
- ui: escape: much faster and reactive op add/search
- ui: more commands
- Ops.Devices.Mouse.MouseDrag - add option to not limit the value range
- CMD: new command show changelog
- UI: create project by choosing from predefined templates
- UI: rework: bookmarks
- UI: show changelog since last us
- ui button to report errors
- ops display red dot when has an error
- ui: code editor does not rescale patch
- ui: file library/editor do not overlap sidebar
- ui: usersettings dialog
- ui: more commandpalette commands
- ui: fix hover info area
- ui: added a (customisable) sidebar – to customise hit
cmd + shift + p
, enter a command and tick the pin icon (edited) - ui: CMD+ENTER - toggle maximize renderer
- ui: command palette shows all commands
- ui: new command open patch website
- new ops: cubemapCamera, cubeMapFromTextures, cubeMapMaterial
- fix Ops.Gl.Meshes.Sphere mesh glitches
- right click drag multiple links at once
- rework: search (CMD+F)
- rework: add op UI
- UI: add op search much faster
- UI: rendering op layout as images/svg
- UI: op highlight animation after creating/search+click
- UI: copy/paste visual feedback
- UI: rework icons/cursor when dragging links
- UI: op namespace colors everywhere
- UI: better Project settings Tag-UI
- UI: new feature: command palette (CMD+P)
- UI: theme: high contrast mode
- feature: randomanim: pause between animations
- new op: Ops.Gl.GridTransform - transform and arrange elements into a grid
- fix: basicMaterial - fix bug, texture was showing correct only after reload
- fix: svgTexture - fixed problem, project could not be saved
- fix: webCamTexture - performance tweak / enabled/disabled switch (edited)
- fix: Ops.Gl.Texture wasn’t setting filter correctly in some cases (edited)
- published video tutorials at: undefined