| Index: src/gpu/GrGpuFactory.cpp
|
| diff --git a/src/gpu/GrGpuFactory.cpp b/src/gpu/GrGpuFactory.cpp
|
| index 4b09c14e5182ae9e299c073403f5835b3537cec1..74adf98236706662fe04c1582e14276913c007c4 100644
|
| --- a/src/gpu/GrGpuFactory.cpp
|
| +++ b/src/gpu/GrGpuFactory.cpp
|
| @@ -7,37 +7,49 @@
|
| */
|
|
|
|
|
| -#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);
|
| +}
|
|
|