skia2/tools/sk_app/android/Window_android.cpp
Brian Salomon f4ba4ec796 Revert "Revert "Revert "Revert "Don't build GL on Metal, Vulkan, Dawn, Direct3D bots""""
Updated to use sentinel GL context even when GL backend is not built.

This reverts commit 1171d314ef.

Change-Id: Ia94bbe4865ddd4e898446c13886877c539f0eb0b
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/277976
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
2020-03-20 17:11:58 +00:00

90 lines
2.3 KiB
C++

/*
* Copyright 2016 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#include "tools/sk_app/WindowContext.h"
#include "tools/sk_app/android/WindowContextFactory_android.h"
#include "tools/sk_app/android/Window_android.h"
namespace sk_app {
Window* Window::CreateNativeWindow(void* platformData) {
Window_android* window = new Window_android();
if (!window->init((SkiaAndroidApp*)platformData)) {
delete window;
return nullptr;
}
return window;
}
bool Window_android::init(SkiaAndroidApp* skiaAndroidApp) {
SkASSERT(skiaAndroidApp);
fSkiaAndroidApp = skiaAndroidApp;
fSkiaAndroidApp->fWindow = this;
return true;
}
void Window_android::setTitle(const char* title) {
fSkiaAndroidApp->setTitle(title);
}
void Window_android::setUIState(const char* state) {
fSkiaAndroidApp->setUIState(state);
}
bool Window_android::attach(BackendType attachType) {
fBackendType = attachType;
// We delay the creation of fWindowContext until Android informs us that
// the native window is ready to use.
// The creation will be done in initDisplay, which is initiated by kSurfaceCreated event.
return true;
}
void Window_android::initDisplay(ANativeWindow* window) {
SkASSERT(window);
switch (fBackendType) {
#ifdef SK_GL
case kNativeGL_BackendType:
default:
fWindowContext =
window_context_factory::MakeGLForAndroid(window, fRequestedDisplayParams);
break;
#else
default:
#endif
case kRaster_BackendType:
fWindowContext =
window_context_factory::MakeRasterForAndroid(window, fRequestedDisplayParams);
break;
#ifdef SK_VULKAN
case kVulkan_BackendType:
fWindowContext =
window_context_factory::MakeVulkanForAndroid(window, fRequestedDisplayParams);
break;
#endif
}
this->onBackendCreated();
}
void Window_android::onDisplayDestroyed() {
detach();
}
void Window_android::onInval() {
fSkiaAndroidApp->postMessage(Message(kContentInvalidated));
}
void Window_android::paintIfNeeded() {
if (fWindowContext) { // Check if initDisplay has already been called
onPaint();
} else {
markInvalProcessed();
}
}
} // namespace sk_app