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 14SkNativeGLContext::AutoContextRestore::AutoContextRestore() { 15 fEAGLContext = [EAGLContext currentContext]; 16 if (EAGLCTX) { 17 [EAGLCTX retain]; 18 } 19} 20 21SkNativeGLContext::AutoContextRestore::~AutoContextRestore() { 22 if (EAGLCTX) { 23 [EAGLContext setCurrentContext:EAGLCTX]; 24 [EAGLCTX release]; 25 } 26} 27 28/////////////////////////////////////////////////////////////////////////////// 29 30SkNativeGLContext::SkNativeGLContext() 31 : fEAGLContext(NULL) { 32} 33 34SkNativeGLContext::~SkNativeGLContext() { 35 this->destroyGLContext(); 36} 37 38void SkNativeGLContext::destroyGLContext() { 39 if ([EAGLContext currentContext] == EAGLCTX) { 40 [EAGLContext setCurrentContext:nil]; 41 } 42 [EAGLCTX release]; 43} 44 45const GrGLInterface* SkNativeGLContext::createGLContext() { 46 fEAGLContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2]; 47 [EAGLContext setCurrentContext:EAGLCTX]; 48 49 const GrGLInterface* interface = GrGLCreateNativeInterface(); 50 if (!interface) { 51 SkDebugf("Failed to create gl interface"); 52 this->destroyGLContext(); 53 return NULL; 54 } 55 return interface; 56} 57 58void SkNativeGLContext::makeCurrent() const { 59 if (![EAGLContext setCurrentContext:EAGLCTX]) { 60 SkDebugf("Could not set the context.\n"); 61 } 62} 63 64void SkNativeGLContext::swapBuffers() const { }