From 9daefbdb94822ca94b78eb2d8ada27aebcc5db82 Mon Sep 17 00:00:00 2001 From: Zach Pomerantz Date: Fri, 19 Feb 2016 11:39:11 -0800 Subject: [PATCH] Fix grid antialiasing --- interface/src/ui/overlays/Grid3DOverlay.cpp | 2 +- libraries/render-utils/src/GeometryCache.cpp | 4 +-- libraries/render-utils/src/GeometryCache.h | 2 +- libraries/render-utils/src/grid.slf | 27 ++++++++++---------- 4 files changed, 18 insertions(+), 17 deletions(-) diff --git a/interface/src/ui/overlays/Grid3DOverlay.cpp b/interface/src/ui/overlays/Grid3DOverlay.cpp index d02219bcb6..b47ecdbd6c 100644 --- a/interface/src/ui/overlays/Grid3DOverlay.cpp +++ b/interface/src/ui/overlays/Grid3DOverlay.cpp @@ -81,7 +81,7 @@ void Grid3DOverlay::render(RenderArgs* args) { } const render::ShapeKey Grid3DOverlay::getShapeKey() { - return render::ShapeKey::Builder().withTranslucent(); + return render::ShapeKey::Builder().withOwnPipeline(); } void Grid3DOverlay::setProperties(const QScriptValue& properties) { diff --git a/libraries/render-utils/src/GeometryCache.cpp b/libraries/render-utils/src/GeometryCache.cpp index e1f5ce67ba..0a7ca2a450 100644 --- a/libraries/render-utils/src/GeometryCache.cpp +++ b/libraries/render-utils/src/GeometryCache.cpp @@ -600,9 +600,9 @@ void GeometryCache::renderGrid(gpu::Batch& batch, const glm::vec2& minCorner, co gridBuffer.edit().offset.y = -(majorEdge / majorCols) / 2; gridBuffer.edit().offset.z = -(minorEdge / minorRows) / 2; gridBuffer.edit().offset.w = -(minorEdge / minorCols) / 2; - gridBuffer.edit().balance = glm::vec4(glm::vec2(1.0f - majorEdge), + gridBuffer.edit().edge = glm::vec4(glm::vec2(majorEdge), // If rows or columns are not set, do not draw minor gridlines - glm::vec2((minorRows != 0 && minorCols != 0) ? 1.0f - minorEdge : 0.0f)); + glm::vec2((minorRows != 0 && minorCols != 0) ? minorEdge : 0.0f)); } // Set the grid pipeline diff --git a/libraries/render-utils/src/GeometryCache.h b/libraries/render-utils/src/GeometryCache.h index a10ec84db5..b4b933ecdb 100644 --- a/libraries/render-utils/src/GeometryCache.h +++ b/libraries/render-utils/src/GeometryCache.h @@ -322,7 +322,7 @@ private: // data is arranged as majorRow, majorCol, minorRow, minorCol glm::vec4 period; glm::vec4 offset; - glm::vec4 balance; + glm::vec4 edge; }; using GridBuffer = gpu::BufferView; void useGridPipeline(gpu::Batch& batch, GridBuffer gridBuffer); diff --git a/libraries/render-utils/src/grid.slf b/libraries/render-utils/src/grid.slf index 0c2b00b3b0..04e35ac5ca 100644 --- a/libraries/render-utils/src/grid.slf +++ b/libraries/render-utils/src/grid.slf @@ -11,36 +11,37 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // -float paintStripe(float value, float offset, float scale, float balance) { +float paintStripe(float value, float offset, float scale, float edge) { float width = fwidth(value); float normalizedWidth = width * scale; float x0 = (value + offset) * scale - normalizedWidth / 2; float x1 = x0 + normalizedWidth; - float i0 = balance * floor(x0) + max(0.0, fract(x0) - balance); - float i1 = balance * floor(x1) + max(0.0, fract(x1) - balance); + float balance = 1.0 - edge; + float i0 = edge * floor(x0) + max(0.0, fract(x0) - balance); + float i1 = edge * floor(x1) + max(0.0, fract(x1) - balance); float strip = (i1 - i0) / normalizedWidth; return clamp(strip, 0.0, 1.0); } -float paintGrid(vec2 value, vec2 offset, vec2 scale, vec2 balance) { +float paintGrid(vec2 value, vec2 offset, vec2 scale, vec2 edge) { return max( - paintStripe(value.x, offset.x, scale.x, balance.x), - paintStripe(value.y, offset.y, scale.y, balance.y)); + paintStripe(value.x, offset.x, scale.x, edge.x), + paintStripe(value.y, offset.y, scale.y, edge.y)); } -float paintGridMajorMinor(vec2 value, vec4 offset, vec4 scale, vec4 balance) { +float paintGridMajorMinor(vec2 value, vec4 offset, vec4 scale, vec4 edge) { return max( - paintGrid(value, offset.xy, scale.xy, balance.xy), - paintGrid(value, offset.zw, scale.zw, balance.zw)); + paintGrid(value, offset.xy, scale.xy, edge.xy), + paintGrid(value, offset.zw, scale.zw, edge.zw)); } struct Grid { vec4 period; vec4 offset; - vec4 balance; + vec4 edge; }; uniform gridBuffer { Grid grid; }; @@ -55,10 +56,10 @@ void main(void) { Grid grid = getGrid(); float alpha; - if (grid.balance.z == 0.0) { - alpha = paintGrid(varTexCoord0, grid.offset.xy, grid.period.xy, grid.balance.xy); + if (grid.edge.z == 0.0) { + alpha = paintGrid(varTexCoord0, grid.offset.xy, grid.period.xy, grid.edge.xy); } else { - alpha = paintGridMajorMinor(varTexCoord0, grid.offset, grid.period, grid.balance); + alpha = paintGridMajorMinor(varTexCoord0, grid.offset, grid.period, grid.edge); } if (alpha == 0.0) { discard;