1 2 /* 3 * Copyright 2012 Google Inc. 4 * 5 * Use of this source code is governed by a BSD-style license that can be 6 * found in the LICENSE file. 7 */ 8 9 #include "gl/SkNativeGLContext.h" 10 #import <OpenGLES/EAGL.h> 11 12 #define EAGLCTX ((EAGLContext*)(fEAGLContext)) 13 14 SkNativeGLContext::AutoContextRestore::AutoContextRestore() { 15 fEAGLContext = [EAGLContext currentContext]; 16 if (EAGLCTX) { 17 [EAGLCTX retain]; 18 } 19 } 20 21 SkNativeGLContext::AutoContextRestore::~AutoContextRestore() { 22 if (EAGLCTX) { 23 [EAGLContext setCurrentContext:EAGLCTX]; 24 [EAGLCTX release]; 25 } 26 } 27 28 /////////////////////////////////////////////////////////////////////////////// 29 30 SkNativeGLContext::SkNativeGLContext() 31 : fEAGLContext(NULL) { 32 } 33 34 SkNativeGLContext::~SkNativeGLContext() { 35 this->destroyGLContext(); 36 } 37 38 void SkNativeGLContext::destroyGLContext() { 39 if (fEAGLContext) { 40 if ([EAGLContext currentContext] == EAGLCTX) { 41 [EAGLContext setCurrentContext:nil]; 42 } 43 [EAGLCTX release]; 44 fEAGLContext = NULL; 45 } 46 } 47 48 const GrGLInterface* SkNativeGLContext::createGLContext(GrGLStandard forcedGpuAPI) { 49 if (kGL_GrGLStandard == forcedGpuAPI) { 50 return NULL; 51 } 52 53 fEAGLContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2]; 54 [EAGLContext setCurrentContext:EAGLCTX]; 55 56 const GrGLInterface* interface = GrGLCreateNativeInterface(); 57 if (!interface) { 58 SkDebugf("Failed to create gl interface"); 59 this->destroyGLContext(); 60 return NULL; 61 } 62 return interface; 63 } 64 65 void SkNativeGLContext::makeCurrent() const { 66 if (![EAGLContext setCurrentContext:EAGLCTX]) { 67 SkDebugf("Could not set the context.\n"); 68 } 69 } 70 71 void SkNativeGLContext::swapBuffers() const { } 72