diff options
Diffstat (limited to 'tools/viewer/sk_app/android')
5 files changed, 36 insertions, 12 deletions
diff --git a/tools/viewer/sk_app/android/GLWindowContext_android.cpp b/tools/viewer/sk_app/android/GLWindowContext_android.cpp index a98b5553f8..0b3363354b 100644 --- a/tools/viewer/sk_app/android/GLWindowContext_android.cpp +++ b/tools/viewer/sk_app/android/GLWindowContext_android.cpp @@ -43,11 +43,17 @@ GLWindowContext_android::~GLWindowContext_android() { } void GLWindowContext_android::onInitializeContext(void* platformData, const DisplayParams& params) { - ContextPlatformData_android* androidPlatformData = - reinterpret_cast<ContextPlatformData_android*>(platformData); + if (platformData != nullptr) { + ContextPlatformData_android* androidPlatformData = + reinterpret_cast<ContextPlatformData_android*>(platformData); + fNativeWindow = androidPlatformData->fNativeWindow; + } else { + SkASSERT(fNativeWindow); + } + - fWidth = ANativeWindow_getWidth(androidPlatformData->fNativeWindow); - fHeight = ANativeWindow_getHeight(androidPlatformData->fNativeWindow); + fWidth = ANativeWindow_getWidth(fNativeWindow); + fHeight = ANativeWindow_getHeight(fNativeWindow); fDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY); @@ -81,7 +87,7 @@ void GLWindowContext_android::onInitializeContext(void* platformData, const Disp SkASSERT(EGL_NO_CONTEXT != fEGLContext); fSurface = eglCreateWindowSurface( - fDisplay, surfaceConfig, androidPlatformData->fNativeWindow, nullptr); + fDisplay, surfaceConfig, fNativeWindow, nullptr); SkASSERT(EGL_NO_SURFACE != fSurface); SkAssertResult(eglMakeCurrent(fDisplay, fSurface, fSurface, fEGLContext)); diff --git a/tools/viewer/sk_app/android/GLWindowContext_android.h b/tools/viewer/sk_app/android/GLWindowContext_android.h index 85e65beaa2..5f4c031ed1 100644 --- a/tools/viewer/sk_app/android/GLWindowContext_android.h +++ b/tools/viewer/sk_app/android/GLWindowContext_android.h @@ -13,6 +13,8 @@ #include <EGL/egl.h> +struct ANativeWindow; + namespace sk_app { class GLWindowContext_android : public GLWindowContext { @@ -32,6 +34,9 @@ private: EGLDisplay fDisplay; EGLContext fEGLContext; EGLSurface fSurface; + + // For setDisplayParams and resize which call onInitializeContext with null platformData + ANativeWindow* fNativeWindow = nullptr; }; diff --git a/tools/viewer/sk_app/android/RasterWindowContext_android.cpp b/tools/viewer/sk_app/android/RasterWindowContext_android.cpp index 306f291de8..3ba564635e 100644 --- a/tools/viewer/sk_app/android/RasterWindowContext_android.cpp +++ b/tools/viewer/sk_app/android/RasterWindowContext_android.cpp @@ -32,8 +32,12 @@ RasterWindowContext_android::RasterWindowContext_android( fNativeWindow = androidPlatformData->fNativeWindow; fWidth = ANativeWindow_getWidth(fNativeWindow); fHeight = ANativeWindow_getHeight(fNativeWindow); + this->setBuffersGeometry(); +} + +void RasterWindowContext_android::setBuffersGeometry() { int32_t format; - switch(params.fColorType) { + switch(fDisplayParams.fColorType) { case kRGBA_8888_SkColorType: format = WINDOW_FORMAT_RGBA_8888; break; @@ -46,6 +50,17 @@ RasterWindowContext_android::RasterWindowContext_android( ANativeWindow_setBuffersGeometry(fNativeWindow, fWidth, fHeight, format); } +void RasterWindowContext_android::setDisplayParams(const DisplayParams& params) { + fDisplayParams = params; + this->setBuffersGeometry(); +} + +void RasterWindowContext_android::resize(uint32_t w, uint32_t h) { + fWidth = w; + fHeight = h; + this->setBuffersGeometry(); +} + sk_sp<SkSurface> RasterWindowContext_android::getBackbufferSurface() { if (nullptr == fBackbufferSurface) { ANativeWindow_lock(fNativeWindow, &fBuffer, &fBounds); diff --git a/tools/viewer/sk_app/android/RasterWindowContext_android.h b/tools/viewer/sk_app/android/RasterWindowContext_android.h index 913b06c9dd..7bb24ba30b 100644 --- a/tools/viewer/sk_app/android/RasterWindowContext_android.h +++ b/tools/viewer/sk_app/android/RasterWindowContext_android.h @@ -23,15 +23,12 @@ public: void swapBuffers() override; bool isValid() override { return SkToBool(fNativeWindow); } - void resize(uint32_t w, uint32_t h) override { - SkDEBUGFAIL("Resize is currently unsupported."); - } - void setDisplayParams(const DisplayParams& params) override { - SkDEBUGFAIL("setDisplayParams is currently unsupported."); - } + void resize(uint32_t w, uint32_t h) override; + void setDisplayParams(const DisplayParams& params) override; private: RasterWindowContext_android(void* platformData, const DisplayParams& params); + void setBuffersGeometry(); sk_sp<SkSurface> fBackbufferSurface = nullptr; ANativeWindow* fNativeWindow = nullptr; ANativeWindow_Buffer fBuffer; diff --git a/tools/viewer/sk_app/android/surface_glue_android.cpp b/tools/viewer/sk_app/android/surface_glue_android.cpp index 895b0bc459..0c1ab0cca2 100644 --- a/tools/viewer/sk_app/android/surface_glue_android.cpp +++ b/tools/viewer/sk_app/android/surface_glue_android.cpp @@ -124,6 +124,7 @@ int SkiaAndroidApp::message_callback(int fd, int events, void* data) { skiaAndroidApp->fNativeWindow = message.fNativeWindow; window_android->initDisplay(skiaAndroidApp->fNativeWindow); } + window_android->onResize(width, height); window_android->setContentRect(0, 0, width, height); window_android->paintIfNeeded(); break; |