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 10 SkNativeGLContext::AutoContextRestore::AutoContextRestore() { 11 fOldAGLContext = aglGetCurrentContext(); 12 } 13 14 SkNativeGLContext::AutoContextRestore::~AutoContextRestore() { 15 aglSetCurrentContext(fOldAGLContext); 16 } 17 18 /////////////////////////////////////////////////////////////////////////////// 19 20 SkNativeGLContext::SkNativeGLContext() 21 : fContext(NULL) { 22 } 23 24 SkNativeGLContext::~SkNativeGLContext() { 25 this->destroyGLContext(); 26 } 27 28 void SkNativeGLContext::destroyGLContext() { 29 if (fContext) { 30 aglDestroyContext(fContext); 31 } 32 } 33 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 72 void SkNativeGLContext::makeCurrent() const { 73 aglSetCurrentContext(fContext); 74 } 75