Do some more refactoring

This commit is contained in:
schmelczerandras 2020-07-30 20:59:37 +02:00
commit 24cc572e47

View file

@ -6,7 +6,7 @@ precision mediump float;
#define CAVE_COLOR vec3(0.36, 0.38, 0.76)
#define AIR_COLOR vec3(0.7)
#define DISTANCE_SCALE {distanceScale}
#define EDGE_SMOOTHING {edgeSmoothing}
#define DISTANCE_OFFSET {distanceOffset}
uniform float maxMinDistance;
@ -23,28 +23,25 @@ in vec2 worldCoordinates;
out vec4 fragmentColor;
void main() {
float realDistance = 0.0;
#if LINE_COUNT > 0
float minDistance = maxMinDistance;
for (int i = 0; i < LINE_COUNT; i++) {
Line line = lines[i];
vec2 pa = worldCoordinates - line.from;
vec2 ba = line.toFromDelta;
float baLength = length(ba);
// todo: do we really want this dot(pa / baLength, ba / baLength)
float h = clamp(dot(pa / baLength, ba / baLength), 0.0, 1.0);
float lineDistance = distance(pa, ba * h) - mix(line.fromRadius, line.toRadius, h);
vec2 pa = worldCoordinates - lines[i].from;
vec2 ba = lines[i].toFromDelta;
float h = clamp(dot(pa, ba) / dot(ba, ba), 0.0, 1.0);
float lineDistance = distance(pa, ba * h) - mix(lines[i].fromRadius, lines[i].toRadius, h);
minDistance = min(minDistance, lineDistance);
}
float distance = -minDistance;
fragmentColor = vec4(
mix(CAVE_COLOR, AIR_COLOR, clamp(distance, -EDGE_SMOOTHING, 0.0) / EDGE_SMOOTHING + 1.0),
distance / DISTANCE_SCALE
);
#else
fragmentColor = vec4(AIR_COLOR, maxMinDistance / DISTANCE_SCALE);
realDistance = -minDistance;
#endif
fragmentColor = vec4(
mix(CAVE_COLOR, AIR_COLOR, clamp(realDistance, 0.0, 1.0)),
(realDistance + DISTANCE_OFFSET) / DISTANCE_SCALE - 1.0/255.0
);
}