| Index: src/gpu/gl/mac/SkCreatePlatformGLContext_mac.cpp
|
| diff --git a/src/gpu/gl/mac/SkCreatePlatformGLContext_mac.cpp b/src/gpu/gl/mac/SkCreatePlatformGLContext_mac.cpp
|
| index 35ec2762968b9df918b26491b7a4485e9c8a592e..5ae1aeb3c7255b26250e23a8e06a3a790c7e55a7 100644
|
| --- a/src/gpu/gl/mac/SkCreatePlatformGLContext_mac.cpp
|
| +++ b/src/gpu/gl/mac/SkCreatePlatformGLContext_mac.cpp
|
| @@ -14,39 +14,18 @@ namespace {
|
| class MacGLContext : public SkGLContext {
|
| public:
|
| MacGLContext();
|
| -
|
| - virtual ~MacGLContext();
|
| -
|
| + virtual ~MacGLContext() SK_OVERRIDE;
|
| virtual void makeCurrent() const SK_OVERRIDE;
|
| virtual void swapBuffers() const SK_OVERRIDE;
|
| -protected:
|
| - virtual const GrGLInterface* createGLContext(GrGLStandard forcedGpuAPI) SK_OVERRIDE;
|
| - virtual void destroyGLContext() SK_OVERRIDE;
|
|
|
| private:
|
| + void destroyGLContext();
|
| +
|
| CGLContextObj fContext;
|
| };
|
|
|
| MacGLContext::MacGLContext()
|
| : fContext(NULL) {
|
| -}
|
| -
|
| -MacGLContext::~MacGLContext() {
|
| - this->destroyGLContext();
|
| -}
|
| -
|
| -void MacGLContext::destroyGLContext() {
|
| - if (fContext) {
|
| - CGLReleaseContext(fContext);
|
| - }
|
| -}
|
| -
|
| -const GrGLInterface* MacGLContext::createGLContext(GrGLStandard forcedGpuAPI) {
|
| - SkASSERT(NULL == fContext);
|
| - if (kGLES_GrGLStandard == forcedGpuAPI) {
|
| - return NULL;
|
| - }
|
| -
|
| CGLPixelFormatAttribute attributes[] = {
|
| #if MAC_OS_X_VERSION_10_7
|
| kCGLPFAOpenGLProfile, (CGLPixelFormatAttribute) kCGLOGLPVersion_3_2_Core,
|
| @@ -61,7 +40,7 @@ const GrGLInterface* MacGLContext::createGLContext(GrGLStandard forcedGpuAPI) {
|
|
|
| if (NULL == pixFormat) {
|
| SkDebugf("CGLChoosePixelFormat failed.");
|
| - return NULL;
|
| + return;
|
| }
|
|
|
| CGLCreateContext(pixFormat, NULL, &fContext);
|
| @@ -69,19 +48,34 @@ const GrGLInterface* MacGLContext::createGLContext(GrGLStandard forcedGpuAPI) {
|
|
|
| if (NULL == fContext) {
|
| SkDebugf("CGLCreateContext failed.");
|
| - return NULL;
|
| + return;
|
| }
|
|
|
| CGLSetCurrentContext(fContext);
|
|
|
| - const GrGLInterface* interface = GrGLCreateNativeInterface();
|
| - if (NULL == interface) {
|
| + fGL.reset(GrGLCreateNativeInterface());
|
| + if (NULL == fGL.get()) {
|
| SkDebugf("Context could not create GL interface.\n");
|
| this->destroyGLContext();
|
| - return NULL;
|
| + return;
|
| + }
|
| + if (!fGL->validate()) {
|
| + SkDebugf("Context could not validate GL interface.\n");
|
| + this->destroyGLContext();
|
| + return;
|
| }
|
| +}
|
|
|
| - return interface;
|
| +MacGLContext::~MacGLContext() {
|
| + this->destroyGLContext();
|
| +}
|
| +
|
| +void MacGLContext::destroyGLContext() {
|
| + fGL.reset(NULL);
|
| + if (fContext) {
|
| + CGLReleaseContext(fContext);
|
| + fContext = NULL;
|
| + }
|
| }
|
|
|
| void MacGLContext::makeCurrent() const {
|
| @@ -94,6 +88,14 @@ void MacGLContext::swapBuffers() const {
|
|
|
| } // anonymous namespace
|
|
|
| -SkGLContext* SkCreatePlatformGLContext() {
|
| - return SkNEW(MacGLContext);
|
| +SkGLContext* SkCreatePlatformGLContext(GrGLStandard forcedGpuAPI) {
|
| + if (kGLES_GrGLStandard == forcedGpuAPI) {
|
| + return NULL;
|
| + }
|
| + MacGLContext* ctx = SkNEW(MacGLContext);
|
| + if (!ctx->isValid()) {
|
| + SkDELETE(ctx);
|
| + return NULL;
|
| + }
|
| + return ctx;
|
| }
|
|
|