Index: content/renderer/renderer_gl_context.h |
=================================================================== |
--- content/renderer/renderer_gl_context.h (revision 86484) |
+++ content/renderer/renderer_gl_context.h (working copy) |
@@ -1,239 +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 API is consistent with other OpenGL setup APIs like window's WGL |
-// and pepper's PGL. This API is used to manage OpenGL RendererGLContexts in the |
-// Chrome renderer process in a way that is consistent with other platforms. |
- |
-#ifndef CONTENT_RENDERER_RENDERER_GL_CONTEXT_H_ |
-#define CONTENT_RENDERER_RENDERER_GL_CONTEXT_H_ |
-#pragma once |
- |
-#include "base/callback_old.h" |
-#include "base/memory/ref_counted.h" |
-#include "base/memory/scoped_ptr.h" |
-#include "base/memory/weak_ptr.h" |
-#include "build/build_config.h" |
-#include "ui/gfx/native_widget_types.h" |
-#include "ui/gfx/size.h" |
- |
-class GpuChannelHost; |
-class MessageLoop; |
-class CommandBufferProxy; |
-class GURL; |
-class TransportTextureHost; |
- |
-namespace gpu { |
-namespace gles2 { |
-class GLES2CmdHelper; |
-class GLES2Implementation; |
-} |
-} |
- |
-namespace media { |
-class VideoDecodeContext; |
-class VideoDecodeEngine; |
-class VideoDecodeRendererGLContext; |
-} |
- |
-class RendererGLContext : public base::SupportsWeakPtr<RendererGLContext> { |
- public: |
- // These are the same error codes as used by EGL. |
- enum Error { |
- SUCCESS = 0x3000, |
- NOT_INITIALIZED = 0x3001, |
- BAD_ATTRIBUTE = 0x3004, |
- BAD_RendererGLContext = 0x3006, |
- CONTEXT_LOST = 0x300E |
- }; |
- |
- // RendererGLContext configuration attributes. These are the same as used by |
- // EGL. Attributes are matched using a closest fit algorithm. |
- enum Attribute { |
- ALPHA_SIZE = 0x3021, |
- BLUE_SIZE = 0x3022, |
- GREEN_SIZE = 0x3023, |
- RED_SIZE = 0x3024, |
- DEPTH_SIZE = 0x3025, |
- STENCIL_SIZE = 0x3026, |
- SAMPLES = 0x3031, |
- SAMPLE_BUFFERS = 0x3032, |
- NONE = 0x3038 // Attrib list = terminator |
- }; |
- |
- // Initialize the library. This must have completed before any other |
- // functions are invoked. |
- static bool Initialize(); |
- |
- // Terminate the library. This must be called after any other functions |
- // have completed. |
- static bool Terminate(); |
- |
- ~RendererGLContext(); |
- |
- // Create a RendererGLContext that renders directly to a view. The view and |
- // the associated window must not be destroyed until the returned |
- // RendererGLContext has been destroyed, otherwise the GPU process might |
- // attempt to render to an invalid window handle. |
- // |
- // NOTE: on Mac OS X, this entry point is only used to set up the |
- // accelerated compositor's output. On this platform, we actually pass |
- // a gfx::PluginWindowHandle in place of the gfx::NativeViewId, |
- // because the facility to allocate a fake PluginWindowHandle is |
- // already in place. We could add more entry points and messages to |
- // allocate both fake PluginWindowHandles and NativeViewIds and map |
- // from fake NativeViewIds to PluginWindowHandles, but this seems like |
- // unnecessary complexity at the moment. |
- // |
- // The render_view_id is currently also only used on Mac OS X. |
- // TODO(kbr): clean up the arguments to this function and make them |
- // more cross-platform. |
- static RendererGLContext* CreateViewContext( |
- GpuChannelHost* channel, |
- gfx::PluginWindowHandle render_surface, |
- int render_view_id, |
- const char* allowed_extensions, |
- const int32* attrib_list, |
- const GURL& active_arl); |
- |
-#if defined(OS_MACOSX) |
- // On Mac OS X only, view RendererGLContexts actually behave like offscreen |
- // RendererGLContexts, and require an explicit resize operation which is |
- // slightly different from that of offscreen RendererGLContexts. |
- void ResizeOnscreen(const gfx::Size& size); |
-#endif |
- |
- // Create a RendererGLContext that renders to an offscreen frame buffer. If |
- // parent is not NULL, that RendererGLContext can access a copy of the created |
- // RendererGLContext's frame buffer that is updated every time SwapBuffers is |
- // called. It is not as general as shared RendererGLContexts in other |
- // implementations of OpenGL. If parent is not NULL, it must be used on the |
- // same thread as the parent. A child RendererGLContext may not outlive its |
- // parent. attrib_list must be NULL or a NONE-terminated list of |
- // attribute/value pairs. |
- static RendererGLContext* CreateOffscreenContext( |
- GpuChannelHost* channel, |
- RendererGLContext* parent, |
- const gfx::Size& size, |
- const char* allowed_extensions, |
- const int32* attrib_list, |
- const GURL& active_url); |
- |
- // Resize an offscreen frame buffer. The resize occurs on the next call to |
- // SwapBuffers. This is to avoid waiting until all pending GL calls have been |
- // executed by the GPU process. Everything rendered up to the call to |
- // SwapBuffers will be lost. A lost RendererGLContext will be reported if the |
- // resize fails. |
- void ResizeOffscreen(const gfx::Size& size); |
- |
- // For an offscreen frame buffer RendererGLContext, return the texture ID with |
- // respect to the parent RendererGLContext. Returns zero if RendererGLContext |
- // does not have a parent. |
- uint32 GetParentTextureId(); |
- |
- // Create a new texture in the parent's RendererGLContext. Returns zero if |
- // RendererGLContext does not have a parent. |
- uint32 CreateParentTexture(const gfx::Size& size); |
- |
- // Deletes a texture in the parent's RendererGLContext. |
- void DeleteParentTexture(uint32 texture); |
- |
- // Provides a callback that will be invoked when SwapBuffers has completed |
- // service side. |
- void SetSwapBuffersCallback(Callback0::Type* callback); |
- |
- void SetContextLostCallback(Callback0::Type* callback); |
- |
- // Set the current RendererGLContext for the calling thread. |
- static bool MakeCurrent(RendererGLContext* context); |
- |
- // For a view RendererGLContext, display everything that has been rendered |
- // since the last call. For an offscreen RendererGLContext, resolve everything |
- // that has been rendered since the last call to a copy that can be accessed |
- // by the parent RendererGLContext. |
- bool SwapBuffers(); |
- |
- // Create a hardware video decode engine corresponding to the |
- // RendererGLContext. |
- media::VideoDecodeEngine* CreateVideoDecodeEngine(); |
- |
- // Create a hardware video decode RendererGLContext to pair with the hardware |
- // video decode engine. It can also be used with a software decode engine. |
- // |
- // Set |hardware_decoder| to true if this RendererGLContext is for a hardware |
- // video engine. |message_loop| is where the decode RendererGLContext should |
- // run on. |
- media::VideoDecodeContext* CreateVideoDecodeContext(MessageLoop* message_loop, |
- bool hardware_decoder); |
- |
- // Create a TransportTextureHost object associated with the context. |
- scoped_refptr<TransportTextureHost> CreateTransportTextureHost(); |
- |
- // TODO(gman): Remove this |
- void DisableShaderTranslation(); |
- |
- // Allows direct access to the GLES2 implementation so a RendererGLContext |
- // can be used without making it current. |
- gpu::gles2::GLES2Implementation* GetImplementation(); |
- |
- // Return the current error. |
- Error GetError(); |
- |
- // Return true if GPU process reported RendererGLContext lost or there was a |
- // problem communicating with the GPU process. |
- bool IsCommandBufferContextLost(); |
- |
- CommandBufferProxy* GetCommandBufferProxy(); |
- |
- // Create a latch for synchronization between contexts using glSetLatch and |
- // glWaitLatch. |
- // CreateLatch will only fail if there is a generally unrecoverable |
- // error, in which case 0 is returned. Returns latch_id on success. |
- bool CreateLatch(uint32* ret_latch); |
- |
- // Destroy a latch. |
- bool DestroyLatch(uint32 latch); |
- |
- // All child contexts get a latch pair automatically. These latches are used |
- // for synchronization with parent context. If *this* context does not have a |
- // parent context, these methods will return false. |
- bool GetParentToChildLatch(uint32* parent_to_child_latch); |
- bool GetChildToParentLatch(uint32* child_to_parent_latch); |
- |
- private: |
- RendererGLContext(GpuChannelHost* channel, |
- RendererGLContext* parent); |
- |
- bool Initialize(bool onscreen, |
- gfx::PluginWindowHandle render_surface, |
- int render_view_id, |
- const gfx::Size& size, |
- const char* allowed_extensions, |
- const int32* attrib_list, |
- const GURL& active_url); |
- void Destroy(); |
- |
- void OnSwapBuffers(); |
- void OnContextLost(); |
- |
- scoped_refptr<GpuChannelHost> channel_; |
- base::WeakPtr<RendererGLContext> parent_; |
- scoped_ptr<Callback0::Type> swap_buffers_callback_; |
- scoped_ptr<Callback0::Type> context_lost_callback_; |
- uint32 parent_texture_id_; |
- uint32 child_to_parent_latch_; |
- uint32 parent_to_child_latch_; |
- int32 latch_transfer_buffer_id_; |
- CommandBufferProxy* command_buffer_; |
- gpu::gles2::GLES2CmdHelper* gles2_helper_; |
- int32 transfer_buffer_id_; |
- gpu::gles2::GLES2Implementation* gles2_implementation_; |
- gfx::Size size_; |
- Error last_error_; |
- int frame_number_; |
- |
- DISALLOW_COPY_AND_ASSIGN(RendererGLContext); |
-}; |
- |
-#endif // CONTENT_RENDERER_RENDERER_GL_CONTEXT_H_ |