Home | History | Annotate | Download | only in iOS
      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 ([EAGLContext currentContext] == EAGLCTX) {
     40         [EAGLContext setCurrentContext:nil];
     41     }
     42     [EAGLCTX release];
     43 }
     44 
     45 const 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 
     58 void SkNativeGLContext::makeCurrent() const {
     59     if (![EAGLContext setCurrentContext:EAGLCTX]) {
     60         SkDebugf("Could not set the context.\n");
     61     }
     62 }
     63 
     64 void SkNativeGLContext::swapBuffers() const { }