diff options
Diffstat (limited to 'app/gfx/gl/gl_context_mac.cc')
-rw-r--r-- | app/gfx/gl/gl_context_mac.cc | 209 |
1 files changed, 0 insertions, 209 deletions
diff --git a/app/gfx/gl/gl_context_mac.cc b/app/gfx/gl/gl_context_mac.cc deleted file mode 100644 index 3a5e922..0000000 --- a/app/gfx/gl/gl_context_mac.cc +++ /dev/null @@ -1,209 +0,0 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// This file implements the ViewGLContext and PbufferGLContext classes. - -#include "app/gfx/gl/gl_context.h" - -#include <GL/osmesa.h> -#include <OpenGL/OpenGL.h> - -#include "app/gfx/gl/gl_bindings.h" -#include "app/gfx/gl/gl_context_osmesa.h" -#include "app/gfx/gl/gl_context_stub.h" -#include "app/gfx/gl/gl_implementation.h" -#include "base/basictypes.h" -#include "base/logging.h" -#include "base/memory/scoped_ptr.h" - -namespace gfx { - -typedef CGLContextObj GLContextHandle; -typedef CGLPBufferObj PbufferHandle; - -// This class is a wrapper around a GL context used for offscreen rendering. -// It is initially backed by a 1x1 pbuffer. Use it to create an FBO to do useful -// rendering. -class PbufferGLContext : public GLContext { - public: - PbufferGLContext() - : context_(NULL), - pbuffer_(NULL) { - } - - // Initializes the GL context. - bool Initialize(GLContext* shared_context); - - virtual void Destroy(); - virtual bool MakeCurrent(); - virtual bool IsCurrent(); - virtual bool IsOffscreen(); - virtual bool SwapBuffers(); - virtual gfx::Size GetSize(); - virtual void* GetHandle(); - virtual void SetSwapInterval(int interval); - - private: - GLContextHandle context_; - PbufferHandle pbuffer_; - - DISALLOW_COPY_AND_ASSIGN(PbufferGLContext); -}; - -bool GLContext::InitializeOneOff() { - static bool initialized = false; - if (initialized) - return true; - - static const GLImplementation kAllowedGLImplementations[] = { - kGLImplementationDesktopGL, - kGLImplementationOSMesaGL - }; - - if (!InitializeRequestedGLBindings( - kAllowedGLImplementations, - kAllowedGLImplementations + arraysize(kAllowedGLImplementations), - kGLImplementationDesktopGL)) { - LOG(ERROR) << "InitializeRequestedGLBindings failed."; - return false; - } - - initialized = true; - return true; -} - -bool PbufferGLContext::Initialize(GLContext* shared_context) { - // Create a 1x1 pbuffer and associated context to bootstrap things. - static const CGLPixelFormatAttribute attribs[] = { - (CGLPixelFormatAttribute) kCGLPFAPBuffer, - (CGLPixelFormatAttribute) 0 - }; - CGLPixelFormatObj pixel_format; - GLint num_pixel_formats; - if (CGLChoosePixelFormat(attribs, - &pixel_format, - &num_pixel_formats) != kCGLNoError) { - LOG(ERROR) << "Error choosing pixel format."; - Destroy(); - return false; - } - if (!pixel_format) { - LOG(ERROR) << "pixel_format == 0."; - return false; - } - - GLContextHandle shared_handle = NULL; - if (shared_context) - shared_handle = static_cast<GLContextHandle>(shared_context->GetHandle()); - - CGLError res = CGLCreateContext(pixel_format, shared_handle, &context_); - CGLDestroyPixelFormat(pixel_format); - if (res != kCGLNoError) { - LOG(ERROR) << "Error creating context."; - Destroy(); - return false; - } - if (CGLCreatePBuffer(1, 1, - GL_TEXTURE_2D, GL_RGBA, - 0, &pbuffer_) != kCGLNoError) { - LOG(ERROR) << "Error creating pbuffer."; - Destroy(); - return false; - } - if (CGLSetPBuffer(context_, pbuffer_, 0, 0, 0) != kCGLNoError) { - LOG(ERROR) << "Error attaching pbuffer to context."; - Destroy(); - return false; - } - - if (!MakeCurrent()) { - Destroy(); - LOG(ERROR) << "Couldn't make context current for initialization."; - return false; - } - - if (!InitializeCommon()) { - LOG(ERROR) << "GLContext::InitializeCommon failed."; - Destroy(); - return false; - } - - return true; -} - -void PbufferGLContext::Destroy() { - if (context_) { - CGLDestroyContext(context_); - context_ = NULL; - } - - if (pbuffer_) { - CGLDestroyPBuffer(pbuffer_); - pbuffer_ = NULL; - } -} - -bool PbufferGLContext::MakeCurrent() { - if (!IsCurrent()) { - if (CGLSetCurrentContext(context_) != kCGLNoError) { - LOG(ERROR) << "Unable to make gl context current."; - return false; - } - } - - return true; -} - -bool PbufferGLContext::IsCurrent() { - return CGLGetCurrentContext() == context_; -} - -bool PbufferGLContext::IsOffscreen() { - return true; -} - -bool PbufferGLContext::SwapBuffers() { - NOTREACHED() << "Cannot call SwapBuffers on a PbufferGLContext."; - return false; -} - -gfx::Size PbufferGLContext::GetSize() { - NOTREACHED() << "Should not be requesting size of a PbufferGLContext."; - return gfx::Size(1, 1); -} - -void* PbufferGLContext::GetHandle() { - return context_; -} - -void PbufferGLContext::SetSwapInterval(int interval) { - DCHECK(IsCurrent()); - NOTREACHED() << "Attempt to call SetSwapInterval on a PbufferGLContext."; -} - -GLContext* GLContext::CreateOffscreenGLContext(GLContext* shared_context) { - switch (GetGLImplementation()) { - case kGLImplementationDesktopGL: { - scoped_ptr<PbufferGLContext> context(new PbufferGLContext); - if (!context->Initialize(shared_context)) - return NULL; - - return context.release(); - } - case kGLImplementationOSMesaGL: { - scoped_ptr<OSMesaGLContext> context(new OSMesaGLContext); - if (!context->Initialize(OSMESA_RGBA, shared_context)) - return NULL; - - return context.release(); - } - case kGLImplementationMockGL: - return new StubGLContext; - default: - NOTREACHED(); - return NULL; - } -} - -} // namespace gfx |