Index: content/common/gpu/media/rendering_helper_mac.mm |
diff --git a/content/common/gpu/media/rendering_helper_mac.mm b/content/common/gpu/media/rendering_helper_mac.mm |
deleted file mode 100644 |
index ff76338930476821619c8fbcf21240b38253c8d6..0000000000000000000000000000000000000000 |
--- a/content/common/gpu/media/rendering_helper_mac.mm |
+++ /dev/null |
@@ -1,222 +0,0 @@ |
-// Copyright (c) 2012 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. |
- |
-#include "content/common/gpu/media/rendering_helper.h" |
- |
-#import <Cocoa/Cocoa.h> |
-#import <OpenGL/CGLMacro.h> |
- |
-#include "base/mac/scoped_nsautorelease_pool.h" |
-#include "base/memory/scoped_nsobject.h" |
-#include "base/message_loop.h" |
-#include "base/synchronization/waitable_event.h" |
- |
-// Gets the pixel format to be used by the OpenGL view. |
-static scoped_nsobject<NSOpenGLPixelFormat> GetPixelFormat() { |
- NSOpenGLPixelFormatAttribute attributes[] = { |
- NSOpenGLPFAWindow, |
- NSOpenGLPFADoubleBuffer, |
- NSOpenGLPFAAccelerated, |
- NSOpenGLPFANoRecovery, |
- NSOpenGLPFAColorSize, (NSOpenGLPixelFormatAttribute)32, |
- NSOpenGLPFAAlphaSize, (NSOpenGLPixelFormatAttribute)8, |
- NSOpenGLPFADepthSize, (NSOpenGLPixelFormatAttribute)24, |
- (NSOpenGLPixelFormatAttribute)0 |
- }; |
- return scoped_nsobject<NSOpenGLPixelFormat>( |
- [[NSOpenGLPixelFormat alloc] initWithAttributes:attributes]); |
-} |
- |
-// Gets the CGLContext from the given OpenGL view. |
-static CGLContextObj GetCGLContext(NSOpenGLView* gl_view) { |
- return static_cast<CGLContextObj>([[gl_view openGLContext] CGLContextObj]); |
-} |
- |
-// Sets up a view port for the OpenGL view. |
-static void SetupGLViewPort(NSOpenGLView* gl_view, int width, int height) { |
- CGLContextObj cgl_ctx = GetCGLContext(gl_view); |
- glViewport(0, 0, width, height); |
- glClearColor(1.0, 0.0, 0.0, 0.0); |
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); |
- [[gl_view openGLContext] flushBuffer]; |
- CHECK_EQ(static_cast<int>(glGetError()), GL_NO_ERROR); |
-} |
- |
-// Draw the given texture to the OpenGL view. |
-static void DrawTexture(NSOpenGLView* gl_view, |
- GLuint texture_id, |
- bool suppress_swap_to_display) { |
- CGLContextObj cgl_ctx = GetCGLContext(gl_view); |
- [gl_view lockFocus]; |
- |
- GLfloat width = [gl_view bounds].size.width; |
- GLfloat height = [gl_view bounds].size.height; |
- |
- glEnable(GL_TEXTURE_RECTANGLE_ARB); |
- glBindTexture(GL_TEXTURE_RECTANGLE_ARB, texture_id); |
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); |
- |
- glBegin(GL_QUADS); |
- glTexCoord2f(0.0, height); |
- glVertex3f(-1.0, -1.0, 0.0); |
- glTexCoord2f(width, height); |
- glVertex3f(1.0, -1.0, 0.0); |
- glTexCoord2f(width, 0.0); |
- glVertex3f(1.0, 1.0, 0.0); |
- glTexCoord2f(0.0, 0.0); |
- glVertex3f(-1.0, 1.0, 0.0); |
- glEnd(); |
- |
- glBindTexture(GL_TEXTURE_RECTANGLE_ARB, 0); |
- glDisable(GL_TEXTURE_RECTANGLE_ARB); |
- |
- if (!suppress_swap_to_display) |
- [[gl_view openGLContext] flushBuffer]; |
- [gl_view unlockFocus]; |
- CHECK_EQ(static_cast<int>(glGetError()), GL_NO_ERROR); |
-} |
- |
-namespace content { |
- |
-class RenderingHelperMac : public RenderingHelper { |
- public: |
- RenderingHelperMac(); |
- virtual ~RenderingHelperMac(); |
- |
- // Implement RenderingHelper. |
- virtual void Initialize(bool suppress_swap_to_display, |
- int num_windows, |
- const std::vector<gfx::Size>& dimensions, |
- base::WaitableEvent* done) OVERRIDE; |
- virtual void UnInitialize(base::WaitableEvent* done) OVERRIDE; |
- virtual void CreateTexture(int window_id, |
- uint32 texture_target, |
- GLuint* texture_id, |
- base::WaitableEvent* done) OVERRIDE; |
- virtual void RenderTexture(GLuint texture_id) OVERRIDE; |
- virtual void DeleteTexture(GLuint texture_id) OVERRIDE; |
- virtual void* GetGLContext() OVERRIDE; |
- virtual void* GetGLDisplay() OVERRIDE; |
- |
- private: |
- base::MessageLoop* message_loop_; |
- int width_; |
- int height_; |
- bool suppress_swap_to_display_; |
- scoped_nsobject<NSWindow> window_; |
- scoped_nsobject<NSOpenGLView> gl_view_; |
- base::mac::ScopedNSAutoreleasePool pool_; |
-}; |
- |
-// static |
-RenderingHelper* RenderingHelper::Create() { |
- return new RenderingHelperMac; |
-} |
- |
-// static |
-void RenderingHelper::InitializePlatform() { |
- // Initialize the Cocoa framework. |
- base::mac::ScopedNSAutoreleasePool pool_; |
- [NSApplication sharedApplication]; |
-} |
- |
-RenderingHelperMac::RenderingHelperMac() |
- : message_loop_(NULL), |
- width_(0), |
- height_(0), |
- suppress_swap_to_display_(false) { |
-} |
- |
-RenderingHelperMac::~RenderingHelperMac() { |
- CHECK_EQ(width_, 0) << "Must call UnInitialize before dtor."; |
-} |
- |
-void RenderingHelperMac::Initialize( |
- bool suppress_swap_to_display, |
- int num_windows, |
- const std::vector<gfx::Size>& dimensions, |
- base::WaitableEvent* done) { |
- // Use width_ != 0 as a proxy for the class having already been |
- // Initialize()'d, and UnInitialize() before continuing. |
- if (width_) { |
- base::WaitableEvent done2(false, false); |
- UnInitialize(&done2); |
- done2.Wait(); |
- } |
- |
- // A separate window is created for each decoder. Since the Mac API |
- // only supports a single instance only one window should be created. |
- CHECK_EQ(num_windows, 1); |
- |
- // There should be only one window dimension as only one window is created. |
- CHECK_EQ(dimensions.size(), 1U); |
- width_ = dimensions[0].width(); |
- height_ = dimensions[0].height(); |
- suppress_swap_to_display_ = suppress_swap_to_display; |
- message_loop_ = base::MessageLoop::current(); |
- |
- // Create a window to host the OpenGL contents. |
- NSRect rect = NSMakeRect(0, 0, width_, height_); |
- window_.reset([[NSWindow alloc] |
- initWithContentRect:rect |
- styleMask:NSTitledWindowMask |
- backing:NSBackingStoreBuffered |
- defer:NO]); |
- [window_ center]; |
- [window_ makeKeyAndOrderFront:nil]; |
- |
- // Create an OpenGL view. |
- scoped_nsobject<NSOpenGLPixelFormat> pixel_format(GetPixelFormat()); |
- gl_view_.reset([[NSOpenGLView alloc] initWithFrame:rect |
- pixelFormat:pixel_format]); |
- [[window_ contentView] addSubview:gl_view_]; |
- SetupGLViewPort(gl_view_, width_, height_); |
- |
- done->Signal(); |
-} |
- |
-void RenderingHelperMac::UnInitialize(base::WaitableEvent* done) { |
- CHECK_EQ(base::MessageLoop::current(), message_loop_); |
- width_ = 0; |
- height_ = 0; |
- message_loop_ = NULL; |
- [window_ close]; |
- window_.reset(); |
- gl_view_.reset(); |
- done->Signal(); |
-} |
- |
-void RenderingHelperMac::CreateTexture(int window_id, |
- uint32 texture_target, |
- GLuint* texture_id, |
- base::WaitableEvent* done) { |
- CHECK_EQ(base::MessageLoop::current(), message_loop_); |
- CHECK_EQ(static_cast<uint32>(GL_TEXTURE_RECTANGLE_ARB), texture_target); |
- CGLContextObj cgl_ctx = GetCGLContext(gl_view_); |
- glGenTextures(1, texture_id); |
- CHECK_EQ(GL_NO_ERROR, static_cast<int>(glGetError())); |
- done->Signal(); |
-} |
- |
-void RenderingHelperMac::RenderTexture(GLuint texture_id) { |
- CHECK_EQ(base::MessageLoop::current(), message_loop_); |
- DrawTexture(gl_view_, texture_id, suppress_swap_to_display_); |
-} |
- |
-void RenderingHelperMac::DeleteTexture(GLuint texture_id) { |
- CHECK_EQ(base::MessageLoop::current(), message_loop_); |
- CGLContextObj cgl_ctx = GetCGLContext(gl_view_); |
- glDeleteTextures(1, &texture_id); |
- CHECK_EQ(GL_NO_ERROR, static_cast<int>(glGetError())); |
-} |
- |
-void* RenderingHelperMac::GetGLContext() { |
- return GetCGLContext(gl_view_); |
-} |
- |
-void* RenderingHelperMac::GetGLDisplay() { |
- return NULL; |
-} |
- |
-} // namespace content |