|
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 { } |