[core] custom layer - add contextLost callback

- optional callback method that can be used to do cleanup when the context has been lost before re-initialisation
This commit is contained in:
Ivo van Dongen
2017-09-19 10:29:51 +03:00
committed by Ivo van Dongen
parent b0c06c764b
commit 97a010cc9b
5 changed files with 36 additions and 3 deletions

View File

@@ -16,8 +16,12 @@ RenderCustomLayer::RenderCustomLayer(Immutable<style::CustomLayer::Impl> _impl)
RenderCustomLayer::~RenderCustomLayer() {
assert(BackendScope::exists());
if (initialized && !contextDestroyed && impl().deinitializeFn) {
impl().deinitializeFn(impl().context);
if (initialized) {
if (contextDestroyed && impl().contextLostFn ) {
impl().contextLostFn(impl().context);
} else if (!contextDestroyed && impl().deinitializeFn) {
impl().deinitializeFn(impl().context);
}
}
}

View File

@@ -8,9 +8,18 @@ namespace style {
CustomLayer::CustomLayer(const std::string& layerID,
CustomLayerInitializeFunction init,
CustomLayerRenderFunction render,
CustomLayerContextLostFunction contextLost,
CustomLayerDeinitializeFunction deinit,
void* context)
: Layer(makeMutable<Impl>(layerID, init, render, deinit, context)) {
: Layer(makeMutable<Impl>(layerID, init, render, contextLost, deinit, context)) {
}
CustomLayer::CustomLayer(const std::string& layerID,
CustomLayerInitializeFunction init,
CustomLayerRenderFunction render,
CustomLayerDeinitializeFunction deinit,
void* context)
: Layer(makeMutable<Impl>(layerID, init, render, nullptr, deinit, context)) {
}
CustomLayer::~CustomLayer() = default;

View File

@@ -6,12 +6,14 @@ namespace style {
CustomLayer::Impl::Impl(const std::string& id_,
CustomLayerInitializeFunction initializeFn_,
CustomLayerRenderFunction renderFn_,
CustomLayerContextLostFunction contextLostFn_,
CustomLayerDeinitializeFunction deinitializeFn_,
void* context_)
: Layer::Impl(LayerType::Custom, id_, std::string()) {
initializeFn = initializeFn_;
renderFn = renderFn_;
deinitializeFn = deinitializeFn_;
contextLostFn = contextLostFn_;
context = context_;
}

View File

@@ -14,6 +14,7 @@ public:
Impl(const std::string& id,
CustomLayerInitializeFunction,
CustomLayerRenderFunction,
CustomLayerContextLostFunction,
CustomLayerDeinitializeFunction,
void* context);
@@ -22,6 +23,7 @@ public:
CustomLayerInitializeFunction initializeFn = nullptr;
CustomLayerRenderFunction renderFn = nullptr;
CustomLayerContextLostFunction contextLostFn = nullptr;
CustomLayerDeinitializeFunction deinitializeFn = nullptr;
void* context = nullptr;
};