Skip to content

Commit 7cde00d

Browse files
authored
Merge pull request #4023 from vallsv/improve-opengl-markers
Antialiasing on opengl markers
2 parents c4c7afd + 7a083b6 commit 7cde00d

File tree

1 file changed

+27
-40
lines changed

1 file changed

+27
-40
lines changed

src/silx/gui/plot/backends/glutils/GLPlotCurve.py

+27-40
Original file line numberDiff line numberDiff line change
@@ -656,22 +656,14 @@ class Points2D(object):
656656
PLUS: """
657657
float alphaSymbol(vec2 coord, float size) {
658658
vec2 d = abs(size * (coord - vec2(0.5, 0.5)));
659-
if (min(d.x, d.y) < 0.5) {
660-
return 1.0;
661-
} else {
662-
return 0.0;
663-
}
659+
return local_smoothstep(1.5, 0.5, min(d.x, d.y));
664660
}
665661
""",
666662
X_MARKER: """
667663
float alphaSymbol(vec2 coord, float size) {
668664
vec2 pos = floor(size * coord) + 0.5;
669665
vec2 d_x = abs(pos.x + vec2(- pos.y, pos.y - size));
670-
if (min(d_x.x, d_x.y) <= 0.5) {
671-
return 1.0;
672-
} else {
673-
return 0.0;
674-
}
666+
return local_smoothstep(1.5, 0.5, min(d_x.x, d_x.y));
675667
}
676668
""",
677669
ASTERISK: """
@@ -692,22 +684,14 @@ class Points2D(object):
692684
""",
693685
H_LINE: """
694686
float alphaSymbol(vec2 coord, float size) {
695-
float dy = abs(size * (coord.y - 0.5));
696-
if (dy < 0.5) {
697-
return 1.0;
698-
} else {
699-
return 0.0;
700-
}
687+
float d = abs(size * (coord.y - 0.5));
688+
return local_smoothstep(1.5, 0.5, d);
701689
}
702690
""",
703691
V_LINE: """
704692
float alphaSymbol(vec2 coord, float size) {
705-
float dx = abs(size * (coord.x - 0.5));
706-
if (dx < 0.5) {
707-
return 1.0;
708-
} else {
709-
return 0.0;
710-
}
693+
float d = abs(size * (coord.x - 0.5));
694+
return local_smoothstep(1.5, 0.5, d);
711695
}
712696
""",
713697
HEART: """
@@ -721,60 +705,56 @@ class Points2D(object):
721705
float d = (13.0*h - 22.0*h*h + 10.0*h*h*h)/(6.0-5.0*h);
722706
float res = clamp(r-d, 0., 1.);
723707
// antialiasing
724-
res = smoothstep(0.1, 0.001, res);
708+
res = local_smoothstep(0.1, 0.001, res);
725709
return res;
726710
}
727711
""",
728712
TICK_LEFT: """
729713
float alphaSymbol(vec2 coord, float size) {
730714
coord = size * (coord - 0.5);
731715
float dy = abs(coord.y);
732-
if (dy < 0.5 && coord.x < 0.5) {
733-
return 1.0;
734-
} else {
716+
if (coord.x > 0.5) {
735717
return 0.0;
736718
}
719+
return local_smoothstep(1.5, 0.5, dy);
737720
}
738721
""",
739722
TICK_RIGHT: """
740723
float alphaSymbol(vec2 coord, float size) {
741724
coord = size * (coord - 0.5);
742725
float dy = abs(coord.y);
743-
if (dy < 0.5 && coord.x > -0.5) {
744-
return 1.0;
745-
} else {
726+
if (coord.x < -0.5) {
746727
return 0.0;
747728
}
729+
return local_smoothstep(1.5, 0.5, dy);
748730
}
749731
""",
750732
TICK_UP: """
751733
float alphaSymbol(vec2 coord, float size) {
752-
coord = size * (coord - 0.5);
734+
coord = size * (coord - 0.5);
753735
float dx = abs(coord.x);
754-
if (dx < 0.5 && coord.y < 0.5) {
755-
return 1.0;
756-
} else {
736+
if (coord.y > 0.5) {
757737
return 0.0;
758738
}
739+
return local_smoothstep(1.5, 0.5, dx);
759740
}
760741
""",
761742
TICK_DOWN: """
762743
float alphaSymbol(vec2 coord, float size) {
763744
coord = size * (coord - 0.5);
764745
float dx = abs(coord.x);
765-
if (dx < 0.5 && coord.y > -0.5) {
766-
return 1.0;
767-
} else {
746+
if (coord.y < -0.5) {
768747
return 0.0;
769748
}
749+
return local_smoothstep(1.5, 0.5, dx);
770750
}
771751
""",
772752
CARET_LEFT: """
773753
float alphaSymbol(vec2 coord, float size) {
774754
coord = size * (coord - 0.5);
775755
float d = abs(coord.x) - abs(coord.y);
776756
if (d >= -0.1 && coord.x > 0.5) {
777-
return smoothstep(-0.1, 0.1, d);
757+
return local_smoothstep(-0.1, 0.1, d);
778758
} else {
779759
return 0.0;
780760
}
@@ -785,7 +765,7 @@ class Points2D(object):
785765
coord = size * (coord - 0.5);
786766
float d = abs(coord.x) - abs(coord.y);
787767
if (d >= -0.1 && coord.x < 0.5) {
788-
return smoothstep(-0.1, 0.1, d);
768+
return local_smoothstep(-0.1, 0.1, d);
789769
} else {
790770
return 0.0;
791771
}
@@ -796,7 +776,7 @@ class Points2D(object):
796776
coord = size * (coord - 0.5);
797777
float d = abs(coord.y) - abs(coord.x);
798778
if (d >= -0.1 && coord.y > 0.5) {
799-
return smoothstep(-0.1, 0.1, d);
779+
return local_smoothstep(-0.1, 0.1, d);
800780
} else {
801781
return 0.0;
802782
}
@@ -807,7 +787,7 @@ class Points2D(object):
807787
coord = size * (coord - 0.5);
808788
float d = abs(coord.y) - abs(coord.x);
809789
if (d >= -0.1 && coord.y < 0.5) {
810-
return smoothstep(-0.1, 0.1, d);
790+
return local_smoothstep(-0.1, 0.1, d);
811791
} else {
812792
return 0.0;
813793
}
@@ -822,6 +802,13 @@ class Points2D(object):
822802
823803
varying vec4 vColor;
824804
805+
/* smoothstep function implementation to support GLSL 1.20 */
806+
float local_smoothstep(float edge0, float edge1, float x) {
807+
float t;
808+
t = clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0);
809+
return t * t * (3.0 - 2.0 * t);
810+
}
811+
825812
%s
826813
827814
void main(void) {

0 commit comments

Comments
 (0)