100 lines
3.8 KiB
GLSL
100 lines
3.8 KiB
GLSL
|
|
attribute vec4 a_target_pt3d;
|
|
attribute vec4 a_center_pt3d;
|
|
attribute vec3 a_indentFactor;
|
|
attribute vec3 a_screenWorldOffset;
|
|
attribute vec2 a_textSize;
|
|
attribute vec4 a_Color;
|
|
attribute float a_relative_mode;
|
|
attribute float a_draw_flags;
|
|
attribute vec4 a_bkgrd_color;
|
|
attribute float a_rel_ext_length;
|
|
attribute float a_con_width;
|
|
|
|
varying vec4 COLORIn;
|
|
|
|
#ifdef use_geometry_shaders
|
|
varying vec4 a_center;
|
|
varying vec4 a_target;
|
|
varying vec2 a_textSizeIn;
|
|
varying vec3 a_screenWorldOffsetIn;
|
|
varying vec2 a_indentFactorIn;
|
|
varying float a_relative_modeIn;
|
|
varying float a_draw_flagsIn;
|
|
varying vec4 a_bkgrd_colorIn;
|
|
varying float a_rel_ext_lengthIn;
|
|
varying float a_con_widthIn;
|
|
varying vec4 COLOR;
|
|
varying float lineEdge;
|
|
varying float aaCutoff;
|
|
#else
|
|
attribute float a_isCenterPt;
|
|
#endif
|
|
|
|
varying vec3 NORMAL;
|
|
varying float fog;
|
|
varying vec2 bgTextureLookup;
|
|
|
|
#define E 2.718281828459045
|
|
|
|
uniform vec2 screenSize;
|
|
uniform float screenOriginVertexScale;
|
|
uniform float labelTextureSize;
|
|
uniform float front;
|
|
uniform float clipRange;
|
|
float PI = 3.14159265358979323846264;
|
|
|
|
#include connector.shared
|
|
|
|
|
|
vec4 getGLPosition(vec4 endpointOnBBX, vec4 transformedTarget, vec4 endpointExtendedOffBBX, float connector_mode_2_4){
|
|
#ifdef use_geometry_shaders
|
|
float a_isCenterPt = 1.;
|
|
#endif
|
|
float isExtended = step(1.5, a_isCenterPt);
|
|
float isTarget = (1.-isExtended) * step(.5, a_isCenterPt );
|
|
float isCenter = (1.-isTarget) * (1.-isExtended);
|
|
return connector_mode_2_4 * ( (isCenter * endpointOnBBX) + (isTarget * transformedTarget) + (isExtended * endpointExtendedOffBBX)) +
|
|
(1.-connector_mode_2_4) * ( (step(.5,a_isCenterPt) * endpointOnBBX) + (1.-step(.5,a_isCenterPt)) * transformedTarget);
|
|
}
|
|
|
|
void main()
|
|
{
|
|
#ifdef use_geometry_shaders
|
|
a_center = a_center_pt3d ;
|
|
a_target = a_target_pt3d ;
|
|
a_textSizeIn = a_textSize;
|
|
a_screenWorldOffsetIn = a_screenWorldOffset;
|
|
a_indentFactorIn = a_indentFactor.xy;
|
|
gl_Position = a_center_pt3d ;
|
|
a_relative_modeIn = a_relative_mode;
|
|
a_draw_flagsIn = a_draw_flags;
|
|
a_bkgrd_colorIn = a_bkgrd_color;
|
|
a_rel_ext_lengthIn = a_rel_ext_length;
|
|
a_con_widthIn = a_con_width;
|
|
#else
|
|
NORMAL = vec3(0.,0.,1.);
|
|
|
|
vec4 transformedCenter, transformedTarget;
|
|
vec2 textSizeInScreen, offset, drawVector;
|
|
float doNotDraw, isProjected, zValue, zTarget;
|
|
float connector_mode_0, connector_mode_1, connector_mode_2, connector_mode_3, connector_mode_4, drawBackgroundOutline, drawBackground, drawConnector, connector_mode_2_4 ;
|
|
getDrawFlags(a_draw_flags, connector_mode_0, connector_mode_1, connector_mode_2, connector_mode_3, connector_mode_4, drawBackgroundOutline, drawBackground, drawConnector);
|
|
connector_mode_2_4 = connector_mode_2 + connector_mode_4;
|
|
calculatePreConnectorInfo(a_center_pt3d, a_target_pt3d, a_textSize, a_indentFactor.xy, a_screenWorldOffset, transformedCenter, transformedTarget, textSizeInScreen, offset, drawVector, doNotDraw, a_relative_mode, isProjected, zValue, a_con_width, zTarget);
|
|
vec4 endpointOnBBX, endpointExtendedOffBBX;
|
|
calculateConnectorInfo(a_center_pt3d, textSizeInScreen, a_textSize, drawVector, offset, fog, transformedCenter, transformedTarget, endpointOnBBX, endpointExtendedOffBBX, connector_mode_0, connector_mode_1, connector_mode_2, connector_mode_3, connector_mode_4, a_rel_ext_length, isProjected, zValue);
|
|
|
|
// if the zValue is not within the clipping planes, then set the transformedTarget z
|
|
// to the zValue as well, to make sure that the connector doesn't get drawn
|
|
float withinView = step(zValue, 1.) * step(-1., zValue);
|
|
transformedTarget.z = withinView * transformedTarget.z + (1.-withinView) * zValue;
|
|
|
|
gl_Position = (1.-doNotDraw) * getGLPosition(endpointOnBBX, transformedTarget, endpointExtendedOffBBX, connector_mode_2_4);
|
|
bgTextureLookup = (gl_Position.xy/gl_Position.w) / 2.0 + 0.5;
|
|
#endif
|
|
|
|
COLORIn = a_Color;
|
|
|
|
}
|