• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 { }