diff --git a/Shaders/Wireframe/createEdgeQuad.glsl b/Shaders/Wireframe/createEdgeQuad.glsl index ea5d47a3cbebdbab35e7c3f67bb881cea7c30ef8..c4b34093306eb4134586f558613c5f23de357336 100644 --- a/Shaders/Wireframe/createEdgeQuad.glsl +++ b/Shaders/Wireframe/createEdgeQuad.glsl @@ -2,6 +2,31 @@ // declare IO mapping prototype void sg_MapIO(const int); +void computeEdgeQuadPos(const int v0, const int v1, in vec2 screenSize, in float lineWidth, + out vec4 pos0, out vec4 pos1, out vec4 pos2, out vec4 pos3) +{ + vec4 p0 = gl_in[v0].gl_Position; + vec4 p1 = gl_in[v1].gl_Position; + + // convert to screen space + p0.xy = p0.xy / p0.w * screenSize; + p1.xy = p1.xy / p1.w * screenSize; + + + // compute dir and normal + vec2 lineDir = p1.xy - p0.xy; + vec2 lineNormal = normalize(vec2(-lineDir.y, lineDir.x)); + + + // create screen-aligned quad + vec2 offset = lineNormal * lineWidth; + + pos0 = vec4( (p0.xy + offset) * p0.w / screenSize, p0.z, p0.w); + pos1 = vec4( (p0.xy - offset) * p0.w / screenSize, p0.z, p0.w); + pos2 = vec4( (p1.xy + offset) * p1.w / screenSize, p1.z, p1.w); + pos3 = vec4( (p1.xy - offset) * p1.w / screenSize, p1.z, p1.w); +} + // emit a screen aligned quad along the edge v1-v2 void createEdgeQuad(const int v0, const int v1, in vec2 screenSize, in float lineWidth) { diff --git a/widgets/glWidget/QtBaseViewer.cc b/widgets/glWidget/QtBaseViewer.cc index 7d80f732ec419bc3403cbca7fd46812673202f63..62b4971c10fc627a788c66a027b37c3fb6fed804 100644 --- a/widgets/glWidget/QtBaseViewer.cc +++ b/widgets/glWidget/QtBaseViewer.cc @@ -63,6 +63,7 @@ #include #include #include +#include #include #include @@ -639,7 +640,15 @@ void glViewer::drawScene() if ( renderManager().activeId( properties_.viewerId() ) == 0 ) { drawScene_mono(); } else { - renderManager().active( properties_.viewerId() )->plugin->render(glstate_,properties_); + RenderInterface* renderPlugin = renderManager().active( properties_.viewerId() )->plugin; + + // eventually set viewer id in IRenderer + ACG::IRenderer* shaderRenderPlugin = dynamic_cast(renderPlugin); + + if (shaderRenderPlugin) + shaderRenderPlugin->setViewerID( properties_.viewerId() ); + + renderPlugin->render(glstate_,properties_); } checkGLError();