Skip to content

Commit

Permalink
box.geom: GLSL 1.50
Browse files Browse the repository at this point in the history
  • Loading branch information
rhaschke committed Mar 25, 2022
1 parent d50c6c9 commit 03a18a0
Show file tree
Hide file tree
Showing 4 changed files with 52 additions and 7 deletions.
11 changes: 6 additions & 5 deletions ogre_media/materials/glsl150/box.geom
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,9 @@ in VertexData {
vec4 color;
} vdata[];


out vec4 gl_TexCoord[];
// Use exactly these names to map onto gl_Color and gl_TexCoord used by fragment shaders
out vec4 color;
out vec2 TexCoord;

layout(points) in;
layout(triangle_strip, max_vertices=24) out;
Expand All @@ -43,12 +44,12 @@ void emitVertex( int side, vec4 x, vec4 y, vec4 z, vec3 tex, vec4 size_factor )
vec4 pos_rel = tex.x*x + tex.y*y + tex.z*z;
vec4 pos = gl_in[0].gl_Position + vec4( pos_rel * size_factor );
gl_Position = worldviewproj_matrix * pos;
gl_TexCoord[0] = vec4( tex.x*0.5+0.5, tex.y*0.5+0.5, 0.0, 0.0 );
TexCoord = vec2(tex.x*0.5+0.5, tex.y*0.5+0.5);

#ifdef WITH_LIGHTING
gl_FrontColor = vec4( vdata[0].color.rgb * lightness[side], vdata[0].color.a );
color = vec4( vdata[0].color.rgb * lightness[side], vdata[0].color.a );
#else
gl_FrontColor = vdata[0].color;
color = vdata[0].color;
#endif

#ifdef WITH_DEPTH
Expand Down
10 changes: 10 additions & 0 deletions ogre_media/materials/glsl150/glsl150.program
Original file line number Diff line number Diff line change
Expand Up @@ -78,3 +78,13 @@ vertex_program rviz/glsl150/pass_pos_color.vert glsl
{
source pass_pos_color.vert
}

fragment_program rviz/glsl150/smooth_square.frag glsl
{
source smooth_square.frag
default_params
{
param_named_auto highlight custom 5
param_named_auto alpha custom 1
}
}
34 changes: 34 additions & 0 deletions ogre_media/materials/glsl150/smooth_square.frag
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
#version 150

// rasterizes a smooth square with ax,ay in [-0.5..0.5]

uniform vec4 highlight;
uniform float alpha;

in vec4 color;
in vec2 TexCoord;

out vec4 FragColor;

void main()
{
const float outer = 0.48;
const float inner = 0.45;
float ax = TexCoord.x-0.5;
float ay = TexCoord.y-0.5;

// blending factor, varying between 0.0 (at the border) and 1.0 (at the center of the square)
float blend = smoothstep(-outer, -inner, ay) * (1.0 - smoothstep(inner, outer, ay)) *
smoothstep(-outer, -inner, ax) * (1.0 - smoothstep(inner, outer, ax));

#if 1 // high contrast edge (dark edge on light surface / light edge on dark surface)
float inv_blend = 1.0 - blend;
vec3 col = blend * color.rgb + (sign(0.5 - length(vec3(color.rgb))) * vec3(0.2, 0.2, 0.2) + color.rgb) * inv_blend;
#else // alternatively: make color at edge darker
vec3 col = (0.5 + 0.5*blend) * color.rgb;
#endif

col = col + col * highlight.rgb;

FragColor = vec4(col.rgb, alpha * color.a);
}
4 changes: 2 additions & 2 deletions ogre_media/materials/scripts150/point_cloud_box.material
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
material rviz/PointCloudBox
{
/* This material should only be used with glsl < 1.50 */
/* This material should only be used with glsl >= 1.50 */

// the 'gp' techniques need one input vertex per box
// and use geometry shaders to create the geometry
Expand All @@ -11,7 +11,7 @@ material rviz/PointCloudBox
{
vertex_program_ref rviz/glsl150/pass_pos_color.vert {}
geometry_program_ref rviz/glsl150/box.geom(with_lighting) {}
fragment_program_ref rviz/glsl120/smooth_square.frag {}
fragment_program_ref rviz/glsl150/smooth_square.frag {}
}
}

Expand Down

0 comments on commit 03a18a0

Please sign in to comment.