/* * Copyright 2012 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #include "gl/SkNativeGLContext.h" #import <OpenGLES/EAGL.h> #define EAGLCTX ((EAGLContext*)(fEAGLContext)) SkNativeGLContext::AutoContextRestore::AutoContextRestore() { fEAGLContext = [EAGLContext currentContext]; if (EAGLCTX) { [EAGLCTX retain]; } } SkNativeGLContext::AutoContextRestore::~AutoContextRestore() { if (EAGLCTX) { [EAGLContext setCurrentContext:EAGLCTX]; [EAGLCTX release]; } } /////////////////////////////////////////////////////////////////////////////// SkNativeGLContext::SkNativeGLContext() : fEAGLContext(NULL) { } SkNativeGLContext::~SkNativeGLContext() { this->destroyGLContext(); } void SkNativeGLContext::destroyGLContext() { if ([EAGLContext currentContext] == EAGLCTX) { [EAGLContext setCurrentContext:nil]; } [EAGLCTX release]; } const GrGLInterface* SkNativeGLContext::createGLContext() { fEAGLContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2]; [EAGLContext setCurrentContext:EAGLCTX]; const GrGLInterface* interface = GrGLCreateNativeInterface(); if (!interface) { SkDebugf("Failed to create gl interface"); this->destroyGLContext(); return NULL; } return interface; } void SkNativeGLContext::makeCurrent() const { if (![EAGLContext setCurrentContext:EAGLCTX]) { SkDebugf("Could not set the context.\n"); } }