return ret;
}
+sk_sp<const GrGLInterface> GlesDriver::getSkiaInterface() {
+ sk_sp<const GrGLInterface> skiaInterface(GrGLCreateNativeInterface());
+ return skiaInterface;
+}
+
} // namespace debug
} // namespace uirenderer
} // namespace android
#include <GLES3/gl31.h>
#include <GLES3/gl32.h>
+#include <gl/GrGLInterface.h>
#include <memory>
namespace android {
class GlesDriver {
public:
virtual ~GlesDriver() {}
+ virtual sk_sp<const GrGLInterface> getSkiaInterface();
#define GL_ENTRY(ret, api, ...) virtual ret api##_(__VA_ARGS__) = 0;
#include "gles_decls.in"
namespace uirenderer {
namespace debug {
+sk_sp<const GrGLInterface> NullGlesDriver::getSkiaInterface() {
+ sk_sp<const GrGLInterface> skiaInterface(GrGLCreateNullInterface());
+ return skiaInterface;
+}
+
struct {
GLboolean scissorEnabled;
} gState;
class NullGlesDriver : public FatalBaseDriver {
public:
+ virtual sk_sp<const GrGLInterface> 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;
#include <gl/GrGLInterface.h>
#include <string>
+#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
mRenderThread.renderState().onGLContextCreated();
if (Properties::getRenderPipelineType() == RenderPipelineType::SkiaGL) {
+#ifdef HWUI_GLES_WRAP_ENABLED
+ debug::GlesDriver* driver = debug::GlesDriver::get();
+ sk_sp<const GrGLInterface> glInterface(driver->getSkiaInterface());
+#else
sk_sp<const GrGLInterface> glInterface(GrGLCreateNativeInterface());
+#endif
LOG_ALWAYS_FATAL_IF(!glInterface.get());
GrContextOptions options;