13f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com 23f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com/* 33f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com * Copyright 2011 Google Inc. 43f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com * 53f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com * Use of this source code is governed by a BSD-style license that can be 63f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com * found in the LICENSE file. 73f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com */ 83f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com 93f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com 103f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com#include "GrTypes.h" 113f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com 122df70f5e46abf6361a988a2c09d04815f77f19cftomhudson@google.com#include "gl/GrGLConfig.h" 133f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com 143f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com#include "GrGpu.h" 1556a27453dc4275cfafe261230e4fdf06839c0fafbsalomon@google.com#include "gl/GrGpuGL.h" 163f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com 170ad5bd91fd7dc876326ee0832ca8f7947dc1cc24bsalomon@google.comGrGpu* GrGpu::Create(GrBackend backend, GrBackendContext backendContext, GrContext* context) { 183f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com 193f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com const GrGLInterface* glInterface = NULL; 203f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com SkAutoTUnref<const GrGLInterface> glInterfaceUnref; 213f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com 22cff60e9fc895438fae7733789ef0cd02327ca38dbsalomon@google.com if (kOpenGL_GrBackend == backend) { 230ad5bd91fd7dc876326ee0832ca8f7947dc1cc24bsalomon@google.com glInterface = reinterpret_cast<const GrGLInterface*>(backendContext); 243f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com if (NULL == glInterface) { 253f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com glInterface = GrGLDefaultInterface(); 263f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com // By calling GrGLDefaultInterface we've taken a ref on the 273f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com // returned object. We only want to hold that ref until after 283f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com // the GrGpu is constructed and has taken ownership. 293f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com glInterfaceUnref.reset(glInterface); 303f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com } 313f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com if (NULL == glInterface) { 323f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com#if GR_DEBUG 333f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GrPrintf("No GL interface provided!\n"); 343f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com#endif 353f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com return NULL; 363f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com } 37860f3b88452e3dd2cf47282f1a1527e8876d41e1robertphillips@google.com GrGLContext ctx(glInterface); 38860f3b88452e3dd2cf47282f1a1527e8876d41e1robertphillips@google.com if (ctx.isInitialized()) { 39860f3b88452e3dd2cf47282f1a1527e8876d41e1robertphillips@google.com return SkNEW_ARGS(GrGpuGL, (ctx, context)); 403f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com } 413f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com } 42d1ff62bc65c70ac34b972878f125f1645200f41fbsalomon@google.com return NULL; 433f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com} 44