diff --git a/libs/hwui/debug/GlesDriver.cpp b/libs/hwui/debug/GlesDriver.cpp index b8ef639074def..97e8f3a81b743 100644 --- a/libs/hwui/debug/GlesDriver.cpp +++ b/libs/hwui/debug/GlesDriver.cpp @@ -36,6 +36,11 @@ std::unique_ptr GlesDriver::replace(std::unique_ptr&& dr return ret; } +sk_sp GlesDriver::getSkiaInterface() { + sk_sp skiaInterface(GrGLCreateNativeInterface()); + return skiaInterface; +} + } // namespace debug } // namespace uirenderer } // namespace android diff --git a/libs/hwui/debug/GlesDriver.h b/libs/hwui/debug/GlesDriver.h index ca6f4b628eab5..3c36487f72cf4 100644 --- a/libs/hwui/debug/GlesDriver.h +++ b/libs/hwui/debug/GlesDriver.h @@ -28,6 +28,7 @@ #include #include +#include #include namespace android { @@ -39,6 +40,7 @@ namespace debug { class GlesDriver { public: virtual ~GlesDriver() {} + virtual sk_sp getSkiaInterface(); #define GL_ENTRY(ret, api, ...) virtual ret api##_(__VA_ARGS__) = 0; #include "gles_decls.in" diff --git a/libs/hwui/debug/NullGlesDriver.cpp b/libs/hwui/debug/NullGlesDriver.cpp index e9dbc7446f4e3..8fbe4bfe70333 100644 --- a/libs/hwui/debug/NullGlesDriver.cpp +++ b/libs/hwui/debug/NullGlesDriver.cpp @@ -20,6 +20,11 @@ namespace android { namespace uirenderer { namespace debug { +sk_sp NullGlesDriver::getSkiaInterface() { + sk_sp skiaInterface(GrGLCreateNullInterface()); + return skiaInterface; +} + struct { GLboolean scissorEnabled; } gState; diff --git a/libs/hwui/debug/NullGlesDriver.h b/libs/hwui/debug/NullGlesDriver.h index d731379839401..37ca8f34f87b1 100644 --- a/libs/hwui/debug/NullGlesDriver.h +++ b/libs/hwui/debug/NullGlesDriver.h @@ -24,6 +24,8 @@ namespace debug { class NullGlesDriver : public FatalBaseDriver { public: + virtual sk_sp getSkiaInterface() override; + virtual void glGenBuffers_(GLsizei n, GLuint *buffers) override; virtual void glGenFramebuffers_(GLsizei n, GLuint *framebuffers) override; virtual void glGenRenderbuffers_(GLsizei n, GLuint *renderbuffers) override; diff --git a/libs/hwui/renderthread/EglManager.cpp b/libs/hwui/renderthread/EglManager.cpp index beaa85e1e2adf..de95bee39763f 100644 --- a/libs/hwui/renderthread/EglManager.cpp +++ b/libs/hwui/renderthread/EglManager.cpp @@ -30,6 +30,10 @@ #include #include +#ifdef HWUI_GLES_WRAP_ENABLED +#include "debug/GlesDriver.h" +#endif + #define GLES_VERSION 2 // Android-specific addition that is used to show when frames began in systrace @@ -131,7 +135,12 @@ void EglManager::initialize() { mRenderThread.renderState().onGLContextCreated(); if (Properties::getRenderPipelineType() == RenderPipelineType::SkiaGL) { +#ifdef HWUI_GLES_WRAP_ENABLED + debug::GlesDriver* driver = debug::GlesDriver::get(); + sk_sp glInterface(driver->getSkiaInterface()); +#else sk_sp glInterface(GrGLCreateNativeInterface()); +#endif LOG_ALWAYS_FATAL_IF(!glInterface.get()); GrContextOptions options;