• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 
2 /*
3  * Copyright 2011 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 #include "gl/SkNativeGLContext.h"
9 
AutoContextRestore()10 SkNativeGLContext::AutoContextRestore::AutoContextRestore() {
11     fOldAGLContext = aglGetCurrentContext();
12 }
13 
~AutoContextRestore()14 SkNativeGLContext::AutoContextRestore::~AutoContextRestore() {
15     aglSetCurrentContext(fOldAGLContext);
16 }
17 
18 ///////////////////////////////////////////////////////////////////////////////
19 
SkNativeGLContext()20 SkNativeGLContext::SkNativeGLContext()
21     : fContext(NULL) {
22 }
23 
~SkNativeGLContext()24 SkNativeGLContext::~SkNativeGLContext() {
25     this->destroyGLContext();
26 }
27 
destroyGLContext()28 void SkNativeGLContext::destroyGLContext() {
29     if (fContext) {
30         aglDestroyContext(fContext);
31     }
32 }
33 
createGLContext()34 const GrGLInterface* SkNativeGLContext::createGLContext() {
35     GLint major, minor;
36     AGLContext ctx;
37 
38     aglGetVersion(&major, &minor);
39     //SkDebugf("---- agl version %d %d\n", major, minor);
40 
41     const GLint pixelAttrs[] = {
42         AGL_RGBA,
43         AGL_ACCELERATED,
44         AGL_NONE
45     };
46     AGLPixelFormat format = aglChoosePixelFormat(NULL, 0, pixelAttrs);
47     if (NULL == format) {
48         SkDebugf("Format could not be found.\n");
49         this->destroyGLContext();
50         return NULL;
51     }
52     fContext = aglCreateContext(format, NULL);
53     if (NULL == fContext) {
54         SkDebugf("Context could not be created.\n");
55         this->destroyGLContext();
56         return NULL;
57     }
58     aglDestroyPixelFormat(format);
59 
60     aglSetCurrentContext(fContext);
61 
62     const GrGLInterface* interface = GrGLCreateNativeInterface();
63     if (NULL == interface) {
64         SkDebugf("Context could not create GL interface.\n");
65         this->destroyGLContext();
66         return NULL;
67     }
68 
69     return interface;
70 }
71 
makeCurrent() const72 void SkNativeGLContext::makeCurrent() const {
73     aglSetCurrentContext(fContext);
74 }
75