Revision control
++ {
++ "QEP": {
++ "QQEM": "0.43",
++ "connections": [
++ {
++ "fromId": 0,
++ "toId": 3
++ },
++ {
++ "fromId": 3,
++ "toId": 1
++ }
++ ],
++ "exportDirectory": ".",
++ "exportFlags": 2,
++ "exportName": "tickershader",
++ "nodes": [
++ {
++ "fragmentCode": [
++ "void main() {",
++ " @nodes",
++ " fragColor = fragColor * qt_Opacity;",
++ "}"
++ ],
++ "name": "Main",
++ "nodeId": 0,
++ "type": 0,
++ "vertexCode": [
++ "void main() {",
++ " texCoord = qt_MultiTexCoord0;",
++ " if (origo == 0)",
++ " fragCoord = vec2(qt_Vertex.x, iResolution.y - qt_Vertex.y);",
++ " else if (origo == 1)",
++ " fragCoord = qt_Vertex.xy;",
++ " else if (origo == 2)",
++ " fragCoord = vec2(iResolution.x - qt_Vertex.x, qt_Vertex.y);",
++ " else",
++ " fragCoord = vec2(iResolution.x - qt_Vertex.x, iResolution.y - qt_Vertex.y);",
++ "#if (HORIZONTAL == 1)",
++ " fragCoord.x += displacement;",
++ "#else",
++ " fragCoord.y += displacement;",
++ "#endif",
++ " vec2 vertCoord = qt_Vertex.xy;",
++ " @nodes",
++ " gl_Position = qt_Matrix * vec4(vertCoord, 0.0, 1.0);",
++ "}"
++ ],
++ "x": 140,
++ "y": 35.400001525878906
++ },
++ {
++ "name": "Output",
++ "nodeId": 1,
++ "type": 1,
++ "x": 140,
++ "y": 592.5999755859375
++ },
++ {
++ "description": "This is an empty node for creating custom effects.",
++ "fragmentCode": [
++ "float createBars(float coord, float spacing, float strokeWidth) {",
++ " float sbar = 1.0 / spacing;// * 0.5;",
++ " float barWidth = strokeWidth / spacing;// * 0.5;",
++ " float firstPos = -((tickLineWidth / spacing) * 0.5);",
++ " float p = firstPos + coord * sbar;",
++ " //float p = (coord - 0.5) * sbar;",
++ " float bar = abs(2.0 * fract(p) - 1.0);",
++ " float barSmoothness = smoothing / spacing;",
++ " bar = smoothstep(1.0 - barWidth - barSmoothness, 1.0 - barWidth + barSmoothness, bar);",
++ " return bar;",
++ "}",
++ "",
++ "@main",
++ "{",
++ " float subLines = 0.0;",
++ " float lines = 0.0;",
++ "#if (HORIZONTAL == 1)",
++ " // sublines",
++ " if (subTicksVisible) {",
++ " if (flipped && fragCoord.y < iResolution.y * subTickLength)",
++ " subLines += createBars(fragCoord.x, spacing * subTickScale, subTickLineWidth);",
++ " if (!flipped && fragCoord.y > iResolution.y * (1.0 - subTickLength))",
++ " subLines += createBars(fragCoord.x, spacing * subTickScale, subTickLineWidth);",
++ " }",
++ " // major lines",
++ " lines += createBars(fragCoord.x, spacing, tickLineWidth);",
++ "#else",
++ " // sublines",
++ " if (subTicksVisible) {",
++ " if (flipped && fragCoord.x < iResolution.x * subTickLength)",
++ " subLines += createBars(fragCoord.y, spacing * subTickScale, subTickLineWidth);",
++ " if (!flipped && fragCoord.x > iResolution.x * (1.0 - subTickLength))",
++ " subLines += createBars(fragCoord.y, spacing * subTickScale, subTickLineWidth);",
++ " }",
++ " // major lines",
++ " lines += createBars(fragCoord.y, spacing, tickLineWidth);",
++ "#endif",
++ " // Combine lines, subLines below",
++ " vec3 lineColor = vec3(0.0);",
++ " float tickColorAlpha = lines * tickColor.a;",
++ " float subTickColorAlpha = subLines * subTickColor.a;",
++ " lineColor = mix(lineColor, subTickColor.rgb, subTickColorAlpha);",
++ " lineColor = mix(lineColor, tickColor.rgb, tickColorAlpha);",
++ " fragColor = vec4(lineColor, min(1.0, subTickColorAlpha + tickColorAlpha));",
++ "}"
++ ],
++ "name": "Grids",
++ "nodeId": 3,
++ "properties": [
++ {
++ "defaultValue": "0",
++ "name": "HORIZONTAL",
++ "type": "define",
++ "value": "0"
++ },
++ {
++ "defaultValue": "0",
++ "maxValue": "3",
++ "minValue": "0",
++ "name": "origo",
++ "type": "int",
++ "value": "0"
++ },
++ {
++ "defaultValue": "true",
++ "name": "subTicksVisible",
++ "type": "bool",
++ "value": "true"
++ },
++ {
++ "defaultValue": "50",
++ "maxValue": "100",
++ "minValue": "10",
++ "name": "spacing",
++ "type": "float",
++ "value": "50"
++ },
++ {
++ "defaultValue": "0.5",
++ "maxValue": "1",
++ "minValue": "0.1",
++ "name": "subTickLength",
++ "type": "float",
++ "value": "0.5"
++ },
++ {
++ "defaultValue": "0",
++ "maxValue": "500",
++ "minValue": "-500",
++ "name": "displacement",
++ "type": "float",
++ "value": "0"
++ },
++ {
++ "defaultValue": "0.5, 0.5, 0.5, 1",
++ "name": "subTickColor",
++ "type": "color",
++ "value": "0.5, 0.5, 0.5, 1"
++ },
++ {
++ "defaultValue": "1, 1, 1, 1",
++ "name": "tickColor",
++ "type": "color",
++ "value": "1, 1, 1, 1"
++ },
++ {
++ "defaultValue": "1",
++ "maxValue": "5",
++ "minValue": "0",
++ "name": "subTickLineWidth",
++ "type": "float",
++ "value": "1"
++ },
++ {
++ "defaultValue": "2",
++ "maxValue": "5",
++ "minValue": "0",
++ "name": "tickLineWidth",
++ "type": "float",
++ "value": "2"
++ },
++ {
++ "defaultValue": "1",
++ "maxValue": "5",
++ "minValue": "0",
++ "name": "smoothing",
++ "type": "float",
++ "value": "1"
++ },
++ {
++ "defaultValue": "0.2",
++ "maxValue": "1",
++ "minValue": "0",
++ "name": "subTickScale",
++ "type": "float",
++ "value": "0.2"
++ },
++ {
++ "defaultValue": "false",
++ "name": "flipped",
++ "type": "bool",
++ "value": "false"
++ }
++ ],
++ "type": 2,
++ "x": 105,
++ "y": 129.55999755859375
++ }
++ ],
++ "version": 1
++ }
++ }