Skip to content
This repository has been archived by the owner on Aug 8, 2023. It is now read-only.

Commit

Permalink
[core] change approach to stencil clipping to (almost) match JS
Browse files Browse the repository at this point in the history
  • Loading branch information
kkaefer committed Apr 29, 2019
1 parent 8f5e1ba commit 0816371
Show file tree
Hide file tree
Showing 27 changed files with 139 additions and 958 deletions.
6 changes: 0 additions & 6 deletions src/core-files.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
"src/csscolorparser/csscolorparser.cpp",
"src/mbgl/actor/mailbox.cpp",
"src/mbgl/actor/scheduler.cpp",
"src/mbgl/algorithm/generate_clip_ids.cpp",
"src/mbgl/annotation/annotation_manager.cpp",
"src/mbgl/annotation/annotation_source.cpp",
"src/mbgl/annotation/annotation_tile.cpp",
Expand Down Expand Up @@ -280,7 +279,6 @@
"src/mbgl/tile/vector_tile.cpp",
"src/mbgl/tile/vector_tile_data.cpp",
"src/mbgl/util/chrono.cpp",
"src/mbgl/util/clip_id.cpp",
"src/mbgl/util/color.cpp",
"src/mbgl/util/compression.cpp",
"src/mbgl/util/constants.cpp",
Expand Down Expand Up @@ -495,9 +493,6 @@
},
"private_headers": {
"csscolorparser/csscolorparser.hpp": "src/csscolorparser/csscolorparser.hpp",
"mbgl/algorithm/covered_by_children.hpp": "src/mbgl/algorithm/covered_by_children.hpp",
"mbgl/algorithm/generate_clip_ids.hpp": "src/mbgl/algorithm/generate_clip_ids.hpp",
"mbgl/algorithm/generate_clip_ids_impl.hpp": "src/mbgl/algorithm/generate_clip_ids_impl.hpp",
"mbgl/algorithm/update_renderables.hpp": "src/mbgl/algorithm/update_renderables.hpp",
"mbgl/algorithm/update_tile_masks.hpp": "src/mbgl/algorithm/update_tile_masks.hpp",
"mbgl/annotation/annotation_manager.hpp": "src/mbgl/annotation/annotation_manager.hpp",
Expand Down Expand Up @@ -750,7 +745,6 @@
"mbgl/tile/tile_observer.hpp": "src/mbgl/tile/tile_observer.hpp",
"mbgl/tile/vector_tile.hpp": "src/mbgl/tile/vector_tile.hpp",
"mbgl/tile/vector_tile_data.hpp": "src/mbgl/tile/vector_tile_data.hpp",
"mbgl/util/clip_id.hpp": "src/mbgl/util/clip_id.hpp",
"mbgl/util/dtoa.hpp": "src/mbgl/util/dtoa.hpp",
"mbgl/util/grid_index.hpp": "src/mbgl/util/grid_index.hpp",
"mbgl/util/hash.hpp": "src/mbgl/util/hash.hpp",
Expand Down
39 changes: 0 additions & 39 deletions src/mbgl/algorithm/covered_by_children.hpp

This file was deleted.

76 changes: 0 additions & 76 deletions src/mbgl/algorithm/generate_clip_ids.cpp

This file was deleted.

36 changes: 0 additions & 36 deletions src/mbgl/algorithm/generate_clip_ids.hpp

This file was deleted.

91 changes: 0 additions & 91 deletions src/mbgl/algorithm/generate_clip_ids_impl.hpp

This file was deleted.

4 changes: 0 additions & 4 deletions src/mbgl/annotation/render_annotation_source.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,6 @@
#include <mbgl/renderer/render_tile.hpp>
#include <mbgl/renderer/paint_parameters.hpp>

#include <mbgl/algorithm/generate_clip_ids.hpp>
#include <mbgl/algorithm/generate_clip_ids_impl.hpp>

#include <mbgl/layermanager/layer_manager.hpp>

namespace mbgl {
Expand Down Expand Up @@ -51,7 +48,6 @@ void RenderAnnotationSource::update(Immutable<style::Source::Impl> baseImpl_,
}

void RenderAnnotationSource::startRender(PaintParameters& parameters) {
parameters.clipIDGenerator.update(tilePyramid.getRenderTiles());
tilePyramid.startRender(parameters);
}

Expand Down
2 changes: 2 additions & 0 deletions src/mbgl/gfx/context.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,8 @@ class Context {
virtual void visualizeStencilBuffer() = 0;
virtual void visualizeDepthBuffer(float depthRangeSize) = 0;
#endif

virtual void clearStencilBuffer(int32_t) = 0;
};

} // namespace gfx
Expand Down
5 changes: 5 additions & 0 deletions src/mbgl/gl/context.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -870,5 +870,10 @@ void Context::visualizeDepthBuffer(const float depthRangeSize) {

#endif

void Context::clearStencilBuffer(const int32_t bits) {
MBGL_CHECK_ERROR(glClearStencil(bits));
MBGL_CHECK_ERROR(glClear(GL_STENCIL_BUFFER_BIT));
}

} // namespace gl
} // namespace mbgl
2 changes: 2 additions & 0 deletions src/mbgl/gl/context.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -247,6 +247,8 @@ class Context final : public gfx::Context {
void visualizeStencilBuffer() override;
void visualizeDepthBuffer(float depthRangeSize) override;
#endif

void clearStencilBuffer(int32_t) override;
};

} // namespace gl
Expand Down
4 changes: 1 addition & 3 deletions src/mbgl/renderer/layers/render_circle_layer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -103,9 +103,7 @@ void RenderCircleLayer::render(PaintParameters& parameters, RenderSource*) {
*parameters.renderPass,
gfx::Triangles(),
parameters.depthModeForSublayer(0, gfx::DepthMaskType::ReadOnly),
parameters.mapMode != MapMode::Continuous
? parameters.stencilModeForClipping(tile.clip)
: gfx::StencilMode::disabled(),
gfx::StencilMode::disabled(),
parameters.colorModeForRenderPass(),
gfx::CullFaceMode::disabled(),
*bucket.indexBuffer,
Expand Down
8 changes: 6 additions & 2 deletions src/mbgl/renderer/layers/render_fill_layer.cpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#include <mbgl/renderer/layers/render_fill_layer.hpp>
#include <mbgl/renderer/buckets/fill_bucket.hpp>
#include <mbgl/renderer/render_tile.hpp>
#include <mbgl/renderer/render_source.hpp>
#include <mbgl/renderer/paint_parameters.hpp>
#include <mbgl/renderer/image_manager.hpp>
#include <mbgl/programs/programs.hpp>
Expand Down Expand Up @@ -73,6 +74,7 @@ bool RenderFillLayer::hasCrossfade() const {

void RenderFillLayer::render(PaintParameters& parameters, RenderSource*) {
if (unevaluated.get<FillPattern>().isUndefined()) {
parameters.renderTileClippingMasks(renderTiles);
for (const RenderTile& tile : renderTiles) {
const LayerRenderData* renderData = tile.tile.getLayerRenderData(*baseImpl);
if (!renderData) {
Expand Down Expand Up @@ -115,7 +117,7 @@ void RenderFillLayer::render(PaintParameters& parameters, RenderSource*) {
*parameters.renderPass,
drawMode,
depthMode,
parameters.stencilModeForClipping(tile.clip),
parameters.stencilModeForClipping(tile.id),
parameters.colorModeForRenderPass(),
gfx::CullFaceMode::disabled(),
indexBuffer,
Expand Down Expand Up @@ -157,6 +159,8 @@ void RenderFillLayer::render(PaintParameters& parameters, RenderSource*) {
return;
}

parameters.renderTileClippingMasks(renderTiles);

for (const RenderTile& tile : renderTiles) {
const LayerRenderData* renderData = tile.tile.getLayerRenderData(*baseImpl);
if (!renderData) {
Expand Down Expand Up @@ -209,7 +213,7 @@ void RenderFillLayer::render(PaintParameters& parameters, RenderSource*) {
*parameters.renderPass,
drawMode,
depthMode,
parameters.stencilModeForClipping(tile.clip),
parameters.stencilModeForClipping(tile.id),
parameters.colorModeForRenderPass(),
gfx::CullFaceMode::disabled(),
indexBuffer,
Expand Down
Loading

0 comments on commit 0816371

Please sign in to comment.