Revision control

++ {
++ "QEN": {
++ "description": "Creates ledscreen effect of the source item. Note: Uses source item texture so this node should be used in the beginning of node tree and nodes with color operations applied after it.",
++ "fragmentCode": [
++ "@main",
++ "{",
++ " const float maxLedSize = ledScreenLedSize;",
++ " vec2 center = floor(fragCoord / maxLedSize) * maxLedSize + maxLedSize * 0.5;",
++ " vec3 ledColor = texture(scaledSourceImage, center / iResolution.xy).rgb;",
++ "",
++ "#if LED_SCREEN_SIZE_FROM_COLOR == 1",
++ " vec3 sizeColorMultiplier = vec3(0.8, 0.4, 0.2);",
++ " float ledSize = clamp(dot(ledColor, maxLedSize * sizeColorMultiplier), 0.1, maxLedSize);",
++ "#else",
++ " float ledSize = maxLedSize;",
++ "#endif",
++ "",
++ " float alpha = 0.0;",
++ " if (ledSize > 2.0) {",
++ " float dist = distance(center, fragCoord) * 2.0;",
++ " alpha = smoothstep(1.0, 0.5, dist / ledSize);",
++ " }",
++ "",
++ "#if LED_SCREEN_COLOR_FROM_SOURCE == 1",
++ " fragColor.rgb = ledColor.rgb * alpha;",
++ "#else",
++ " fragColor.rgb = vec3(alpha) * ledScreenLedColor.rgb;",
++ "#endif",
++ "",
++ "}"
++ ],
++ "name": "LedScreen",
++ "properties": [
++ {
++ "defaultValue": "1",
++ "description": "When this is set to 1, the size of the led is determined by its color.",
++ "name": "LED_SCREEN_SIZE_FROM_COLOR",
++ "type": "define"
++ },
++ {
++ "defaultValue": "1",
++ "description": "When this is set to 1, the color of the led is determined by the color of the source item.",
++ "name": "LED_SCREEN_COLOR_FROM_SOURCE",
++ "type": "define"
++ },
++ {
++ "defaultValue": "20",
++ "description": "Size of a single led in pixels.",
++ "maxValue": "50",
++ "minValue": "4",
++ "name": "ledScreenLedSize",
++ "type": "float"
++ },
++ {
++ "defaultValue": "1, 1, 1, 1",
++ "description": "Color of the leds. This only affects when LED_SCREEN_COLOR_FROM_SOURCE is not set.",
++ "name": "ledScreenLedColor",
++ "type": "color"
++ },
++ {
++ "customValue": "scaledSource",
++ "defaultValue": "",
++ "description": "Helper property for the scaled source item.",
++ "name": "scaledSourceImage",
++ "type": "image",
++ "useCustomValue": true
++ }
++ ],
++ "qmlCode": [
++ "ShaderEffectSource {",
++ " id: scaledSource",
++ " sourceItem: source",
++ " textureSize: Qt.size(source.width / ledScreenLedSize, source.height / ledScreenLedSize);",
++ "}"
++ ],
++ "version": 1
++ }
++ }