[aseprite] 215/308: Add support for ANGLE (D3D) on Skia port

Tobias Hansen thansen at moszumanska.debian.org
Tue Mar 8 02:45:12 UTC 2016


This is an automated email from the git hooks/post-receive script.

thansen pushed a commit to branch master
in repository aseprite.

commit fc58daa814b4562bc667400ddb1e8d32046f1469
Author: David Capello <davidcapello at gmail.com>
Date:   Tue Feb 9 23:12:59 2016 -0300

    Add support for ANGLE (D3D) on Skia port
    
    Anyway we've disable the GPU support temporally (related to #960)
---
 src/she/CMakeLists.txt           |   4 +-
 src/she/gl/gl_context.h          |   3 +-
 src/she/gl/gl_context_cgl.h      |   6 +-
 src/she/gl/gl_context_egl.h      | 165 +++++++++++++++++++++++++++++++++++++++
 src/she/gl/gl_context_wgl.h      |   4 +-
 src/she/skia/gl_context_skia.h   |  55 -------------
 src/she/skia/skia_system.h       |   8 +-
 src/she/skia/skia_window_osx.mm  |  50 +++++++++---
 src/she/skia/skia_window_win.cpp |  73 +++++++++++++----
 src/she/skia/skia_window_win.h   |   9 ++-
 10 files changed, 277 insertions(+), 100 deletions(-)

diff --git a/src/she/CMakeLists.txt b/src/she/CMakeLists.txt
index d0f7285..c1d97e2 100644
--- a/src/she/CMakeLists.txt
+++ b/src/she/CMakeLists.txt
@@ -85,12 +85,11 @@ if(USE_SKIA_BACKEND)
   find_library(SKIA_GPU_LIBRARY skia_skgpu PATH "${SKIA_BUILD_OUT_DIR}")
   find_library(SKIA_UTILS_LIBRARY skia_utils PATH "${SKIA_BUILD_OUT_DIR}")
 
-  set(SKIA_LIBEGL_LIBRARY "")
   if(WIN32)
     find_library(SKIA_ETC1_LIBRARY libetc1 PATH "${SKIA_BUILD_OUT_DIR}/obj/gyp")
     find_library(SKIA_LIBSKKTX_LIBRARY libSkKTX PATH "${SKIA_BUILD_OUT_DIR}/obj/gyp")
     find_library(SKIA_OPENGL_LIBRARY opengl32)
-    find_library(SKIA_LIBEGL_LIBRARY libEGL.dll.lib PATH "${SKIA_BUILD_OUT_DIR}")
+    find_library(SKIA_LIBEGL_LIBRARY libEGL.dll PATH "${SKIA_BUILD_OUT_DIR}")
     if(SKIA_LIBEGL_LIBRARY)
       add_definitions(-DSK_ANGLE=1)
     endif()
@@ -98,6 +97,7 @@ if(USE_SKIA_BACKEND)
     find_library(SKIA_ETC1_LIBRARY etc1 PATH "${SKIA_BUILD_OUT_DIR}")
     find_library(SKIA_LIBSKKTX_LIBRARY SkKTX PATH "${SKIA_BUILD_OUT_DIR}")
     find_library(SKIA_OPENGL_LIBRARY opengl)
+    set(SKIA_LIBEGL_LIBRARY "")
   endif()
 
   find_path(SKIA_CONFIG_INCLUDE_DIR SkUserConfig.h HINTS "${SKIA_DIR}/include/config")
diff --git a/src/she/gl/gl_context.h b/src/she/gl/gl_context.h
index 8772ad9..c7f18fe 100644
--- a/src/she/gl/gl_context.h
+++ b/src/she/gl/gl_context.h
@@ -1,5 +1,5 @@
 // SHE library
-// Copyright (C) 2015  David Capello
+// Copyright (C) 2015, 2016  David Capello
 //
 // This file is released under the terms of the MIT license.
 // Read LICENSE.txt for more information.
@@ -17,6 +17,7 @@ public:
   virtual void destroyGLContext() = 0;
   virtual int getStencilBits() = 0;
   virtual int getSampleCount() = 0;
+  virtual void swapBuffers() { }
 };
 
 } // namespace she
diff --git a/src/she/gl/gl_context_cgl.h b/src/she/gl/gl_context_cgl.h
index 24b80b6..277f20e 100644
--- a/src/she/gl/gl_context_cgl.h
+++ b/src/she/gl/gl_context_cgl.h
@@ -1,5 +1,5 @@
 // SHE library
-// Copyright (C) 2015  David Capello
+// Copyright (C) 2015, 2016  David Capello
 //
 // This file is released under the terms of the MIT license.
 // Read LICENSE.txt for more information.
@@ -17,9 +17,7 @@ namespace she {
 
 class GLContextCGL : public GLContext {
 public:
-  typedef void* NativeHandle;
-
-  GLContextCGL(NativeHandle window)
+  GLContextCGL()
     : m_glctx(nullptr)
     , m_stencilBits(0)
     , m_sampleCount(0) {
diff --git a/src/she/gl/gl_context_egl.h b/src/she/gl/gl_context_egl.h
new file mode 100644
index 0000000..f4a661c
--- /dev/null
+++ b/src/she/gl/gl_context_egl.h
@@ -0,0 +1,165 @@
+// SHE library
+// Copyright (C) 2016  David Capello
+//
+// This file is released under the terms of the MIT license.
+// Read LICENSE.txt for more information.
+
+#ifndef SHE_GL_CONTEXT_EGL_INCLUDED
+#define SHE_GL_CONTEXT_EGL_INCLUDED
+#pragma once
+
+#include "she/gl/gl_context.h"
+
+#include <EGL/egl.h>
+#include <EGL/eglext.h>
+
+namespace she {
+
+class GLContextEGL : public GLContext {
+public:
+  GLContextEGL(void* nativeDisplay)
+    : m_nativeDisplay(nativeDisplay)
+    , m_context(EGL_NO_CONTEXT)
+    , m_display(EGL_NO_DISPLAY)
+    , m_surface(EGL_NO_SURFACE)
+  {
+  }
+
+  ~GLContextEGL() {
+    destroyGLContext();
+  }
+
+  bool createGLContext() override {
+    m_display = getD3DEGLDisplay((HDC)GetDC((HWND)m_nativeDisplay));
+    if (m_display == EGL_NO_DISPLAY) {
+      LOG("Cannot create EGL display");
+      return false;
+    }
+
+    EGLint majorVersion;
+    EGLint minorVersion;
+    if (!eglInitialize(m_display, &majorVersion, &minorVersion))
+      return false;
+
+    static const EGLint configAttribs[] = {
+      EGL_SURFACE_TYPE, EGL_PBUFFER_BIT,
+      EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
+      EGL_RED_SIZE, 8,
+      EGL_GREEN_SIZE, 8,
+      EGL_BLUE_SIZE, 8,
+      EGL_ALPHA_SIZE, 8,
+      EGL_NONE
+    };
+    EGLConfig surfaceConfig;
+    EGLint numConfigs;
+    if (!eglChooseConfig(m_display, configAttribs, &surfaceConfig, 1, &numConfigs))
+      return false;
+
+    static const EGLint surfaceAttribs[] = {
+      EGL_WIDTH, 1,
+      EGL_HEIGHT, 1,
+      EGL_NONE
+    };
+    m_surface = eglCreateWindowSurface(
+      m_display,
+      surfaceConfig,
+      (EGLNativeWindowType)m_nativeDisplay,
+      surfaceAttribs);
+    if (m_surface == EGL_NO_SURFACE)
+      return false;
+
+    static const EGLint contextAttribs[] = {
+      EGL_CONTEXT_CLIENT_VERSION, 2,
+      EGL_NONE
+    };
+    m_context = eglCreateContext(m_display, surfaceConfig,
+                                 EGL_NO_CONTEXT,
+                                 contextAttribs);
+    if (m_context == EGL_NO_CONTEXT)
+      return false;
+
+    if (!eglMakeCurrent(m_display, m_surface, m_surface, m_context))
+      return false;
+
+    eglGetConfigAttrib(m_display, surfaceConfig, EGL_STENCIL_SIZE, &m_stencilBits);
+    eglGetConfigAttrib(m_display, surfaceConfig, EGL_SAMPLES, &m_sampleCount);
+
+    return true;
+  }
+
+  void destroyGLContext() override {
+    if (m_display != EGL_NO_DISPLAY) {
+      eglMakeCurrent(m_display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
+
+      if (m_surface != EGL_NO_SURFACE) {
+        eglDestroySurface(m_display, m_surface);
+        m_surface = EGL_NO_SURFACE;
+      }
+
+      if (m_context != EGL_NO_CONTEXT) {
+        eglDestroyContext(m_display, m_context);
+        m_context = EGL_NO_CONTEXT;
+      }
+
+      eglTerminate(m_display);
+      m_display = EGL_NO_DISPLAY;
+    }
+  }
+
+  int getStencilBits() override {
+    return m_stencilBits;
+  }
+
+  int getSampleCount() override {
+    return m_sampleCount;
+  }
+
+  void swapBuffers() override {
+    eglSwapBuffers(m_display, m_surface);
+  }
+
+private:
+  static void* getD3DEGLDisplay(void* nativeDisplay) {
+    PFNEGLGETPLATFORMDISPLAYEXTPROC eglGetPlatformDisplayEXT;
+    eglGetPlatformDisplayEXT =
+      (PFNEGLGETPLATFORMDISPLAYEXTPROC)eglGetProcAddress("eglGetPlatformDisplayEXT");
+    if (!eglGetPlatformDisplayEXT)
+      return eglGetDisplay(static_cast<EGLNativeDisplayType>(nativeDisplay));
+
+    EGLint attribs[3][3] = {
+      {
+        EGL_PLATFORM_ANGLE_TYPE_ANGLE,
+        EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE,
+        EGL_NONE
+      },
+      {
+        EGL_PLATFORM_ANGLE_TYPE_ANGLE,
+        EGL_PLATFORM_ANGLE_TYPE_D3D9_ANGLE,
+        EGL_NONE
+      },
+      {
+        EGL_PLATFORM_ANGLE_TYPE_ANGLE,
+        EGL_PLATFORM_ANGLE_TYPE_OPENGL_ANGLE,
+        EGL_NONE
+      }
+    };
+
+    EGLDisplay display = EGL_NO_DISPLAY;
+    for (int i=0; i<3 && display == EGL_NO_DISPLAY; ++i) {
+      display = eglGetPlatformDisplayEXT(EGL_PLATFORM_ANGLE_ANGLE,
+                                         nativeDisplay, attribs[i]);
+    }
+    return display;
+  }
+
+  void* m_nativeDisplay;
+  void* m_context;
+  void* m_display;
+  void* m_surface;
+  EGLint m_stencilBits;
+  EGLint m_sampleCount;
+};
+
+} // namespace she
+
+#endif
diff --git a/src/she/gl/gl_context_wgl.h b/src/she/gl/gl_context_wgl.h
index 2474726..ce69ad9 100644
--- a/src/she/gl/gl_context_wgl.h
+++ b/src/she/gl/gl_context_wgl.h
@@ -1,5 +1,5 @@
 // SHE library
-// Copyright (C) 2015  David Capello
+// Copyright (C) 2015-2016  David Capello
 //
 // This file is released under the terms of the MIT license.
 // Read LICENSE.txt for more information.
@@ -16,8 +16,6 @@ namespace she {
 
 class GLContextWGL : public GLContext {
 public:
-  typedef HWND NativeHandle;
-
   GLContextWGL(HWND hwnd)
     : m_hwnd(hwnd)
     , m_glrc(nullptr) {
diff --git a/src/she/skia/gl_context_skia.h b/src/she/skia/gl_context_skia.h
deleted file mode 100644
index 9dcb607..0000000
--- a/src/she/skia/gl_context_skia.h
+++ /dev/null
@@ -1,55 +0,0 @@
-// SHE library
-// Copyright (C) 2012-2015  David Capello
-//
-// This file is released under the terms of the MIT license.
-// Read LICENSE.txt for more information.
-
-#ifndef SHE_SKIA_GL_CONTEXT_INCLUDED
-#define SHE_SKIA_GL_CONTEXT_INCLUDED
-#pragma once
-
-#ifndef SK_SUPPORT_GPU
-  #error Skia was compiled without GPU support
-#endif
-
-#include "gl/GrGLInterface.h"
-
-#include <stdexcept>
-
-namespace she {
-
-template<typename Base>
-class GLContextSkia : public Base {
-public:
-  GLContextSkia(typename Base::NativeHandle nativeHandle) : Base(nativeHandle) {
-    Base::createGLContext();
-    if (!createSkiaInterfaces()) {
-      Base::destroyGLContext();
-      throw std::runtime_error("Cannot create OpenGL context");
-    }
-  }
-
-  ~GLContextSkia() {
-    m_gl.reset(nullptr);
-  }
-
-  const GrGLInterface* gl() const {
-    return m_gl.get();
-  }
-
-private:
-  bool createSkiaInterfaces() {
-    SkAutoTUnref<const GrGLInterface> gl(GrGLCreateNativeInterface());
-    if (!gl || !gl->validate())
-      return false;
-
-    m_gl.reset(gl.detach());
-    return true;
-  }
-
-  SkAutoTUnref<const GrGLInterface> m_gl;
-};
-
-} // namespace she
-
-#endif
diff --git a/src/she/skia/skia_system.h b/src/she/skia/skia_system.h
index c5dfea2..46c43e6 100644
--- a/src/she/skia/skia_system.h
+++ b/src/she/skia/skia_system.h
@@ -1,5 +1,5 @@
 // SHE library
-// Copyright (C) 2012-2015  David Capello
+// Copyright (C) 2012-2016  David Capello
 //
 // This file is released under the terms of the MIT license.
 // Read LICENSE.txt for more information.
@@ -48,10 +48,8 @@ public:
       int(Capabilities::MultipleDisplays) |
       int(Capabilities::CanResizeDisplay) |
       int(Capabilities::DisplayScale)
-#ifdef _WIN32
-      // GPU acceleration is available on Windows at this moment
-      | int(Capabilities::GpuAccelerationSwitch)
-#endif
+      // GPU acceleration is disabled at this moment
+      //| int(Capabilities::GpuAccelerationSwitch)
       );
   }
 
diff --git a/src/she/skia/skia_window_osx.mm b/src/she/skia/skia_window_osx.mm
index 82d9ee7..03fafac 100644
--- a/src/she/skia/skia_window_osx.mm
+++ b/src/she/skia/skia_window_osx.mm
@@ -1,5 +1,5 @@
 // SHE library
-// Copyright (C) 2012-2015  David Capello
+// Copyright (C) 2012-2016  David Capello
 //
 // This file is released under the terms of the MIT license.
 // Read LICENSE.txt for more information.
@@ -23,8 +23,8 @@
 #if SK_SUPPORT_GPU
 
   #include "GrContext.h"
+  #include "gl/GrGLInterface.h"
   #include "she/gl/gl_context_cgl.h"
-  #include "she/skia/gl_context_skia.h"
   #include "she/skia/skia_surface.h"
 
 #endif
@@ -39,6 +39,7 @@ public:
     , m_backend(Backend::NONE)
 #if SK_SUPPORT_GPU
     , m_nsGL(nil)
+    , m_skSurface(nullptr)
 #endif
   {
     m_closing = false;
@@ -123,7 +124,7 @@ public:
     bool gpu = she::instance()->gpuAcceleration();
     (void)gpu;
 
-    // Disable GPU acceleration because it isn't ready yet.
+    // Disable GPU acceleration.
     gpu = false;
 
 #if SK_SUPPORT_GPU
@@ -183,19 +184,29 @@ private:
   bool attachGL() {
     if (!m_glCtx) {
       try {
-        auto ctx = new GLContextSkia<GLContextCGL>(nullptr);
+        SkAutoTDelete<GLContext> ctx(new GLContextCGL);
+        if (!ctx->createGLContext())
+          throw std::runtime_error("Cannot create CGL context");
+
+        m_glInterfaces.reset(GrGLCreateNativeInterface());
+        if (!m_glInterfaces || !m_glInterfaces->validate()) {
+          LOG("Cannot create GL interfaces\n");
+          detachGL();
+          return false;
+        }
 
         m_glCtx.reset(ctx);
         m_grCtx.reset(GrContext::Create(kOpenGL_GrBackend,
-                                        (GrBackendContext)m_glCtx->gl()));
+                                        (GrBackendContext)m_glInterfaces.get()));
 
         m_nsGL = [[NSOpenGLContext alloc]
-                   initWithCGLContextObj:m_glCtx->cglContext()];
+                   initWithCGLContextObj:static_cast<GLContextCGL*>(m_glCtx.get())->cglContext()];
 
         [m_nsGL setView:m_window.contentView];
+        LOG("Using CGL backend\n");
       }
       catch (const std::exception& ex) {
-        //LOG("Cannot create GL context: %s\n", ex.what());
+        LOG("Cannot create GL context: %s\n", ex.what());
         detachGL();
         return false;
       }
@@ -206,6 +217,11 @@ private:
   void detachGL() {
     if (m_nsGL)
       m_nsGL = nil;
+
+    setSurface(nullptr);
+    m_skSurfaceDirect.reset(nullptr);
+    m_grRenderTarget.reset(nullptr);
+    m_grCtx.reset(nullptr);
     m_glCtx.reset(nullptr);
   }
 
@@ -222,14 +238,16 @@ private:
     desc.fStencilBits = m_glCtx->getStencilBits();
     desc.fRenderTargetHandle = 0; // direct frame buffer
     m_grRenderTarget.reset(m_grCtx->textureProvider()->wrapBackendRenderTarget(desc));
+
+    setSurface(nullptr); // set m_skSurface comparing with the old m_skSurfaceDirect
     m_skSurfaceDirect.reset(
       SkSurface::NewRenderTargetDirect(m_grRenderTarget));
 
     if (scale == 1) {
-      m_skSurface.reset(m_skSurfaceDirect);
+      setSurface(m_skSurfaceDirect);
     }
     else {
-      m_skSurface.reset(
+      setSurface(
         SkSurface::NewRenderTarget(
           m_grCtx,
           SkSurface::kYes_Budgeted,
@@ -239,13 +257,20 @@ private:
     }
 
     if (!m_skSurface)
-      throw std::runtime_error("Error creating OpenGL surface for main display");
+      throw std::runtime_error("Error creating surface for main display");
 
     m_display->setSkiaSurface(new SkiaSurface(m_skSurface));
 
     if (m_nsGL)
       [m_nsGL update];
   }
+
+  void setSurface(SkSurface* surface) {
+    if (m_skSurface && m_skSurface != m_skSurfaceDirect)
+      delete m_skSurface;
+    m_skSurface = surface;
+  }
+
 #endif
 
   void paintGC(const gfx::Rect& rect) {
@@ -281,12 +306,13 @@ private:
   bool m_closing;
   OSXWindow* m_window;
 #if SK_SUPPORT_GPU
-  base::UniquePtr<GLContextSkia<GLContextCGL> > m_glCtx;
+  base::UniquePtr<GLContext> m_glCtx;
+  SkAutoTUnref<const GrGLInterface> m_glInterfaces;
   NSOpenGLContext* m_nsGL;
   SkAutoTUnref<GrContext> m_grCtx;
   SkAutoTUnref<GrRenderTarget> m_grRenderTarget;
   SkAutoTDelete<SkSurface> m_skSurfaceDirect;
-  SkAutoTDelete<SkSurface> m_skSurface;
+  SkSurface* m_skSurface;
   gfx::Size m_lastSize;
 #endif
 };
diff --git a/src/she/skia/skia_window_win.cpp b/src/she/skia/skia_window_win.cpp
index 544f27b..a8bd5e2 100644
--- a/src/she/skia/skia_window_win.cpp
+++ b/src/she/skia/skia_window_win.cpp
@@ -19,13 +19,16 @@
 
   #include "GrContext.h"
   #include "she/gl/gl_context_wgl.h"
+  #if SK_ANGLE
+    #include "she/gl/gl_context_egl.h"
+  #endif
 
 #endif
 
 #ifdef _WIN32
 
   #include <windows.h>
-  #include "she/win/window_dde.h" // Include this one time to
+  #include "she/win/window_dde.h"
 
 #endif
 
@@ -117,7 +120,8 @@ void SkiaWindow::paintImpl(HDC hdc)
       }
 
       // Flush GL context
-      m_glCtx->gl()->fFunctions.fFlush();
+      m_glInterfaces->fFunctions.fFlush();
+      m_glCtx->swapBuffers();
       break;
 
 #endif // SK_SUPPORT_GPU
@@ -154,20 +158,32 @@ void SkiaWindow::paintHDC(HDC hdc)
 
 #if SK_SUPPORT_GPU
 
-bool SkiaWindow::attachGL()
+#if SK_ANGLE
+
+bool SkiaWindow::attachANGLE()
 {
   if (!m_glCtx) {
     try {
-      auto ctx = new GLContextSkia<GLContextWGL>(handle());
+      SkAutoTDelete<GLContext> ctx(new GLContextEGL(handle()));
+      if (!ctx->createGLContext())
+        throw std::runtime_error("Cannot create EGL context");
+
+      m_glInterfaces.reset(GrGLCreateANGLEInterface());
+      if (!m_glInterfaces || !m_glInterfaces->validate())
+        throw std::runtime_error("Cannot create EGL interfaces\n");
+
       m_stencilBits = ctx->getStencilBits();
       m_sampleCount = ctx->getSampleCount();
 
-      m_glCtx.reset(ctx);
-      m_grCtx.reset(GrContext::Create(kOpenGL_GrBackend,
-                                      (GrBackendContext)m_glCtx->gl()));
+      m_glCtx.reset(ctx.detach());
+      m_grCtx.reset(
+        GrContext::Create(kOpenGL_GrBackend,
+                          (GrBackendContext)m_glInterfaces.get()));
+
+      LOG("Using EGL backend\n");
     }
     catch (const std::exception& ex) {
-      LOG("Cannot create GL context: %s\n", ex.what());
+      LOG("Error initializing EGL backend: %s\n", ex.what());
       detachGL();
     }
   }
@@ -178,14 +194,40 @@ bool SkiaWindow::attachGL()
     return false;
 }
 
-#if SK_ANGLE
+#endif // SK_ANGLE
 
-bool SkiaWindow::attachANGLE()
+bool SkiaWindow::attachGL()
 {
-  return false;                 // TODO
-}
+  if (!m_glCtx) {
+    try {
+      SkAutoTDelete<GLContext> ctx(new GLContextWGL(handle()));
+      if (!ctx->createGLContext())
+        throw std::runtime_error("Cannot create WGL context\n");
 
-#endif // SK_ANGLE
+      m_glInterfaces.reset(GrGLCreateNativeInterface());
+      if (!m_glInterfaces || !m_glInterfaces->validate())
+        throw std::runtime_error("Cannot create WGL interfaces\n");
+
+      m_stencilBits = ctx->getStencilBits();
+      m_sampleCount = ctx->getSampleCount();
+
+      m_glCtx.reset(ctx.detach());
+      m_grCtx.reset(GrContext::Create(kOpenGL_GrBackend,
+                                      (GrBackendContext)m_glInterfaces.get()));
+
+      LOG("Using WGL backend\n");
+    }
+    catch (const std::exception& ex) {
+      LOG("Error initializing WGL backend: %s\n", ex.what());
+      detachGL();
+    }
+  }
+
+  if (m_glCtx)
+    return true;
+  else
+    return false;
+}
 
 void SkiaWindow::detachGL()
 {
@@ -232,7 +274,7 @@ void SkiaWindow::createRenderTarget(const gfx::Size& size)
   }
 
   if (!m_skSurface)
-    throw std::runtime_error("Error creating OpenGL surface for main display");
+    throw std::runtime_error("Error creating surface for main display");
 
   m_display->setSkiaSurface(new SkiaSurface(m_skSurface));
 }
@@ -251,6 +293,9 @@ void SkiaWindow::resizeImpl(const gfx::Size& size)
   bool gpu = instance()->gpuAcceleration();
   (void)gpu;
 
+  // Disable GPU acceleration.
+  gpu = false;
+
 #if SK_SUPPORT_GPU
 #if SK_ANGLE
   if (gpu && attachANGLE()) {
diff --git a/src/she/skia/skia_window_win.h b/src/she/skia/skia_window_win.h
index 34e9c0d..13dd64d 100644
--- a/src/she/skia/skia_window_win.h
+++ b/src/she/skia/skia_window_win.h
@@ -14,8 +14,8 @@
 #include "she/win/window.h"
 
 #if SK_SUPPORT_GPU
-  #include "she/gl/gl_context_wgl.h"
-  #include "she/skia/gl_context_skia.h"
+  #include "gl/GrGLInterface.h"
+  #include "she/gl/gl_context.h"
 #endif
 
 namespace she {
@@ -39,10 +39,10 @@ private:
   void paintHDC(HDC dc);
 
 #if SK_SUPPORT_GPU
-  bool attachGL();
 #if SK_ANGLE
   bool attachANGLE();
 #endif // SK_ANGLE
+  bool attachGL();
   void detachGL();
   void createRenderTarget(const gfx::Size& size);
   void setSurface(SkSurface* surface);
@@ -52,7 +52,8 @@ private:
   SkiaDisplay* m_display;
   Backend m_backend;
 #if SK_SUPPORT_GPU
-  base::UniquePtr<GLContextSkia<GLContextWGL> > m_glCtx;
+  base::UniquePtr<GLContext> m_glCtx;
+  SkAutoTUnref<const GrGLInterface> m_glInterfaces;
   SkAutoTUnref<GrContext> m_grCtx;
   SkAutoTUnref<GrRenderTarget> m_grRenderTarget;
   SkAutoTDelete<SkSurface> m_skSurfaceDirect;

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/aseprite.git



More information about the Pkg-games-commits mailing list