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 (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