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