11cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
21cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger/*
31cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Copyright 2011 Google Inc.
41cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger *
51cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Use of this source code is governed by a BSD-style license that can be
61cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * found in the LICENSE file.
71cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger */
81cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
91cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
101cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger#include "GrTypes.h"
111cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
121cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger// must be before GrGLConfig.h
131cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger#if GR_WIN32_BUILD
141cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger//    #include "GrGpuD3D9.h"
151cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger#endif
161cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
174f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger#include "gl/GrGLConfig.h"
181cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
191cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger#include "GrGpu.h"
204f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger#include "gl/GrGpuGLShaders.h"
211cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
221cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGpu* GrGpu::Create(GrEngine engine, GrPlatform3DContext context3D) {
231cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
241cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    const GrGLInterface* glInterface = NULL;
251cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    SkAutoTUnref<const GrGLInterface> glInterfaceUnref;
261cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
271cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    if (kOpenGL_Shaders_GrEngine == engine) {
281cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger        glInterface = reinterpret_cast<const GrGLInterface*>(context3D);
291cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger        if (NULL == glInterface) {
301cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger            glInterface = GrGLDefaultInterface();
311cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger            // By calling GrGLDefaultInterface we've taken a ref on the
321cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger            // returned object. We only want to hold that ref until after
331cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger            // the GrGpu is constructed and has taken ownership.
341cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger            glInterfaceUnref.reset(glInterface);
351cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger        }
361cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger        if (NULL == glInterface) {
371cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger#if GR_DEBUG
381cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger            GrPrintf("No GL interface provided!\n");
391cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger#endif
401cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger            return NULL;
411cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger        }
424f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger        GrGLContextInfo ctxInfo(glInterface);
434f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger        if (ctxInfo.isInitialized()) {
444f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger            return new GrGpuGLShaders(ctxInfo);
451cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger        }
461cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    }
474f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger    return NULL;
481cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger}
49