| |
| /* |
| * Copyright 2011 Google Inc. |
| * |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| #include "gl/SkNativeGLContext.h" |
| |
| SkNativeGLContext::AutoContextRestore::AutoContextRestore() { |
| fOldAGLContext = aglGetCurrentContext(); |
| } |
| |
| SkNativeGLContext::AutoContextRestore::~AutoContextRestore() { |
| aglSetCurrentContext(fOldAGLContext); |
| } |
| |
| /////////////////////////////////////////////////////////////////////////////// |
| |
| SkNativeGLContext::SkNativeGLContext() |
| : fContext(NULL) { |
| } |
| |
| SkNativeGLContext::~SkNativeGLContext() { |
| this->destroyGLContext(); |
| } |
| |
| void SkNativeGLContext::destroyGLContext() { |
| if (fContext) { |
| aglDestroyContext(fContext); |
| } |
| } |
| |
| const GrGLInterface* SkNativeGLContext::createGLContext() { |
| GLint major, minor; |
| // AGLContext ctx; |
| |
| aglGetVersion(&major, &minor); |
| //SkDebugf("---- agl version %d %d\n", major, minor); |
| |
| const GLint pixelAttrs[] = { |
| AGL_RGBA, |
| AGL_ACCELERATED, |
| AGL_NONE |
| }; |
| AGLPixelFormat format = aglChoosePixelFormat(NULL, 0, pixelAttrs); |
| if (NULL == format) { |
| SkDebugf("Format could not be found.\n"); |
| this->destroyGLContext(); |
| return NULL; |
| } |
| fContext = aglCreateContext(format, NULL); |
| if (NULL == fContext) { |
| SkDebugf("Context could not be created.\n"); |
| this->destroyGLContext(); |
| return NULL; |
| } |
| aglDestroyPixelFormat(format); |
| |
| aglSetCurrentContext(fContext); |
| |
| const GrGLInterface* interface = GrGLCreateNativeInterface(); |
| if (NULL == interface) { |
| SkDebugf("Context could not create GL interface.\n"); |
| this->destroyGLContext(); |
| return NULL; |
| } |
| |
| return interface; |
| } |
| |
| void SkNativeGLContext::makeCurrent() const { |
| aglSetCurrentContext(fContext); |
| } |