1
0
mirror of synced 2024-11-12 02:00:50 +01:00
Switch-Toolbox/Toolbox/Shader/Path/LineShader2.geom

89 lines
2.3 KiB
Plaintext
Raw Normal View History

2020-02-28 22:49:18 +01:00
#version 330
layout(lines) in;
layout(line_strip, max_vertices = 119) out;
in vec4 color[];
in int gl_PrimitiveIDIn[];
out vec4 fragColor;
uniform mat4 mtxMdl;
uniform mat4 mtxCam;
uniform vec4 pathColor;
uniform int gapIndex;
uniform bool isPickingMode;
uniform float cubeScale;
uniform float controlCubeScale;
float cubeInstanceScale = cubeScale;
vec4 pos;
mat4 mtx = mtxCam*mtxMdl;
vec3 point = gl_in[0].gl_Position.xyz;
vec3 p0 = point;
vec3 p1 = gl_in[1].gl_Position.xyz;
vec4 points[8] = vec4[](
vec4(-1.0,-1.0,-1.0, 0.0),
vec4( 1.0,-1.0,-1.0, 0.0),
vec4(-1.0, 1.0,-1.0, 0.0),
vec4( 1.0, 1.0,-1.0, 0.0),
vec4(-1.0,-1.0, 1.0, 0.0),
vec4( 1.0,-1.0, 1.0, 0.0),
vec4(-1.0, 1.0, 1.0, 0.0),
vec4( 1.0, 1.0, 1.0, 0.0)
);
void face(int p1, int p2, int p4, int p3){
gl_Position = mtx * (pos + points[p1]*cubeInstanceScale); EmitVertex();
gl_Position = mtx * (pos + points[p2]*cubeInstanceScale); EmitVertex();
gl_Position = mtx * (pos + points[p3]*cubeInstanceScale); EmitVertex();
gl_Position = mtx * (pos + points[p4]*cubeInstanceScale); EmitVertex();
gl_Position = mtx * (pos + points[p1]*cubeInstanceScale); EmitVertex();
EndPrimitive();
}
void line(int p1, int p2){
gl_Position = mtx * (pos + points[p1]*cubeInstanceScale); EmitVertex();
gl_Position = mtx * (pos + points[p2]*cubeInstanceScale); EmitVertex();
EndPrimitive();
}
void main(){
if(!isPickingMode){
//draw Point
//outline
fragColor = color[0];
pos = vec4(point,1);
face(0,1,2,3);
face(4,5,6,7);
line(0,4);
line(1,5);
line(2,6);
line(3,7);
cubeInstanceScale = controlCubeScale;
}
//connection line (Point to Point)
if(gl_PrimitiveIDIn[0]!=gapIndex){
if(isPickingMode){
fragColor = pathColor;
gl_Position = mtx * vec4(p0, 1);
EmitVertex();
gl_Position = mtx * vec4(p1, 1);
EmitVertex();
}else{
fragColor = color[0];
gl_Position = mtx * vec4(p0, 1);
EmitVertex();
fragColor = color[1];
gl_Position = mtx * vec4(p1, 1);
EmitVertex();
}
EndPrimitive();
}
}