shaders/polyline/polyline.tstypescript
import { ShaderProgram } from "../../webgl/ShaderProgram";
import polyline_tex_vert from "./polyline.vert.glsl";
import polyline_tex_frag from "./polyline_forward.frag.glsl";
import polyline_woit_frag from "./polyline_woit.frag.glsl";
import polyline_plain_vert from "./polyline_plain.vert.glsl";
import polyline_plain_frag from "./polyline_plain.frag.glsl";
import polyline_plain_woit_frag from "./polyline_plain_woit.frag.glsl";
import polyline_picking_vert from "./polyline_picking.vert.glsl";
import polyline_picking_frag from "./polyline_picking.frag.glsl";
const SHARED_UNIFORMS = {
viewport: "vec2",
proj: "mat4",
view: "mat4",
rtcEyePositionHigh: "vec3",
rtcEyePositionLow: "vec3",
thicknessScale: "float",
opacity: "float",
depthOffset: "float",
depthOffsetNear: "float",
visibleSphere: "vec4"
};
const SHARED_ATTRIBUTES = {
prevHigh: "vec3",
currentHigh: "vec3",
nextHigh: "vec3",
prevLow: "vec3",
currentLow: "vec3",
nextLow: "vec3",
order: "float",
color: "vec4",
thickness: "float"
};
export function polylineTex(): ShaderProgram {
return new ShaderProgram("polylineTex", {
uniforms: {
...SHARED_UNIFORMS,
time: "float",
texAtlas: "sampler2d"
},
attributes: {
...SHARED_ATTRIBUTES,
texCoord: "vec4",
textureParams: "vec3",
pathPhase: "float",
boundingSphere: "vec4"
},
vertexShader: polyline_tex_vert,
fragmentShader: polyline_tex_frag
});
}
export function polylinePlain(): ShaderProgram {
return new ShaderProgram("polylinePlain", {
uniforms: {
...SHARED_UNIFORMS
},
attributes: {
...SHARED_ATTRIBUTES
},
vertexShader: polyline_plain_vert,
fragmentShader: polyline_plain_frag
});
}
function createPolylineTexWoitProgram(name: string): ShaderProgram {
return new ShaderProgram(name, {
uniforms: {
...SHARED_UNIFORMS,
useReverseDepth: "float",
time: "float",
texAtlas: "sampler2d"
},
attributes: {
...SHARED_ATTRIBUTES,
texCoord: "vec4",
textureParams: "vec3",
pathPhase: "float",
boundingSphere: "vec4"
},
vertexShader: polyline_tex_vert,
fragmentShader: polyline_woit_frag
});
}
export function polylineTexWoit(): ShaderProgram {
return createPolylineTexWoitProgram("polylineTexWoit");
}
export function polylineWoitTex(): ShaderProgram {
return createPolylineTexWoitProgram("polylineWoitTex");
}
export function polylineWoitPlain(): ShaderProgram {
return new ShaderProgram("polylineWoitPlain", {
uniforms: {
...SHARED_UNIFORMS,
useReverseDepth: "float"
},
attributes: {
...SHARED_ATTRIBUTES
},
vertexShader: polyline_plain_vert,
fragmentShader: polyline_plain_woit_frag
});
}
export function polyline_picking(): ShaderProgram {
return new ShaderProgram("polyline_picking", {
uniforms: {
viewport: "vec2",
proj: "mat4",
view: "mat4",
rtcEyePositionHigh: "vec3",
rtcEyePositionLow: "vec3",
thicknessScale: "float",
depthOffset: "float",
depthOffsetNear: "float",
visibleSphere: "vec4"
},
attributes: {
prevHigh: "vec3",
currentHigh: "vec3",
nextHigh: "vec3",
prevLow: "vec3",
currentLow: "vec3",
nextLow: "vec3",
pickingColor: "vec3",
order: "float",
thickness: "float"
},
vertexShader: polyline_picking_vert,
fragmentShader: polyline_picking_frag
});
}