'<(skia_src_path)/gpu/GrGpuResourcePriv.h',
'<(skia_src_path)/gpu/GrGpuResource.cpp',
'<(skia_src_path)/gpu/GrGpuFactory.cpp',
+ '<(skia_src_path)/gpu/GrGpuFactory.h',
'<(skia_src_path)/gpu/GrIndexBuffer.h',
'<(skia_src_path)/gpu/GrInvariantOutput.cpp',
'<(skia_src_path)/gpu/GrInOrderDrawBuffer.cpp',
*/
-#include "GrTypes.h"
+#include "GrGpuFactory.h"
#include "gl/GrGLConfig.h"
#include "GrGpu.h"
#include "gl/GrGLGpu.h"
-GrGpu* GrGpu::Create(GrBackend backend, GrBackendContext backendContext, GrContext* context) {
-
+static GrGpu* gl_gpu_create(GrBackendContext backendContext, GrContext* context) {
const GrGLInterface* glInterface = NULL;
SkAutoTUnref<const GrGLInterface> glInterfaceUnref;
- if (kOpenGL_GrBackend == backend) {
- glInterface = reinterpret_cast<const GrGLInterface*>(backendContext);
- if (NULL == glInterface) {
- glInterface = GrGLDefaultInterface();
- // By calling GrGLDefaultInterface we've taken a ref on the
- // returned object. We only want to hold that ref until after
- // the GrGpu is constructed and has taken ownership.
- glInterfaceUnref.reset(glInterface);
- }
- if (NULL == glInterface) {
+ glInterface = reinterpret_cast<const GrGLInterface*>(backendContext);
+ if (NULL == glInterface) {
+ glInterface = GrGLDefaultInterface();
+ // By calling GrGLDefaultInterface we've taken a ref on the
+ // returned object. We only want to hold that ref until after
+ // the GrGpu is constructed and has taken ownership.
+ glInterfaceUnref.reset(glInterface);
+ }
+ if (NULL == glInterface) {
#ifdef SK_DEBUG
- SkDebugf("No GL interface provided!\n");
+ SkDebugf("No GL interface provided!\n");
#endif
- return NULL;
- }
- GrGLContext ctx(glInterface);
- if (ctx.isInitialized()) {
- return SkNEW_ARGS(GrGLGpu, (ctx, context));
- }
+ return NULL;
+ }
+ GrGLContext ctx(glInterface);
+ if (ctx.isInitialized()) {
+ return SkNEW_ARGS(GrGLGpu, (ctx, context));
}
return NULL;
}
+
+static const int kMaxNumBackends = 4;
+static CreateGpuProc gGpuFactories[kMaxNumBackends] = {gl_gpu_create, NULL, NULL, NULL};
+
+GrGpuFactoryRegistrar::GrGpuFactoryRegistrar(int i, CreateGpuProc proc) {
+ gGpuFactories[i] = proc;
+}
+
+GrGpu* GrGpu::Create(GrBackend backend, GrBackendContext backendContext, GrContext* context) {
+ SkASSERT((int)backend < kMaxNumBackends);
+ if (!gGpuFactories[backend]) {
+ return NULL;
+ }
+ return (gGpuFactories[backend])(backendContext, context);
+}
--- /dev/null
+/*
+ * Copyright 2015 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#ifndef GrGpuFactory_DEFINED
+#define GrGpuFactory_DEFINED
+
+#include "GrTypes.h"
+
+class GrGpu;
+class GrContext;
+
+typedef GrGpu* (*CreateGpuProc)(GrBackendContext, GrContext*);
+
+class GrGpuFactoryRegistrar {
+public:
+ GrGpuFactoryRegistrar(int i, CreateGpuProc proc);
+};
+
+#endif