Port of https://github.com/mapbox/mapbox-gl-js/pull/5101: adds a new render pass `Pass3D` before any other rendering wherein we render layers with 3D passes (fill-extrusion layers) to offscreen framebuffers, sharing a depth renderbuffer between those layers in order to render 3D space correctly. Those framebuffers are saved on the RenderLayers and copied back to the map during the translucent pass. Rendering to offscreen framebuffers before we do any clear + draw means we can avoid expensive framebuffer restores.
33 lines
680 B
C++
33 lines
680 B
C++
#pragma once
|
|
|
|
#include <mbgl/gl/object.hpp>
|
|
#include <mbgl/util/size.hpp>
|
|
|
|
namespace mbgl {
|
|
namespace gl {
|
|
|
|
template <RenderbufferType renderbufferType>
|
|
class Renderbuffer {
|
|
public:
|
|
Renderbuffer(Size size_, UniqueRenderbuffer renderbuffer_, bool dirty_ = false)
|
|
: size(std::move(size_)), renderbuffer(std::move(renderbuffer_)), dirty(dirty_) {
|
|
}
|
|
|
|
using type = std::integral_constant<RenderbufferType, renderbufferType>;
|
|
Size size;
|
|
UniqueRenderbuffer renderbuffer;
|
|
|
|
void shouldClear(bool clear) {
|
|
dirty = clear;
|
|
}
|
|
bool needsClearing() {
|
|
return dirty;
|
|
}
|
|
|
|
private:
|
|
bool dirty;
|
|
};
|
|
|
|
} // namespace gl
|
|
} // namespace mbgl
|