From 281544c6dfd793cc1491a323e25fa799c04f4686 Mon Sep 17 00:00:00 2001 From: Christopher Tenter Date: Tue, 29 Apr 2014 11:33:01 +0000 Subject: [PATCH] - IRenderer: renderobjects can request a depth map of the scene, which is optionally rendered in a z-prepass - GLMatrix: extraction of clipping planes in a projection matrix _ ShaderGen: control glsl version in shader descriptor - GLSL::Shader: add suppport for tessellation shaders git-svn-id: http://www.openflipper.org/svnrepo/OpenFlipper/branches/Free@18555 383ad7c9-94d9-4d36-a494-682f7c89f535 --- Shaders/Wireframe/createEdgeQuad.glsl | 25 +++++++++++++++++++++++++ widgets/glWidget/QtBaseViewer.cc | 11 ++++++++++- 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/Shaders/Wireframe/createEdgeQuad.glsl b/Shaders/Wireframe/createEdgeQuad.glsl index ea5d47a3..c4b34093 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 7d80f732..62b4971c 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(); -- GitLab