| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 // This API is consistent with other OpenGL setup APIs like window's WGL | |
| 6 // and pepper's PGL. This API is used to manage OpenGL contexts in the Chrome | |
| 7 // renderer process in a way that is consistent with other platforms. It is | |
| 8 // a C style API to ease porting of existing OpenGL software to Chrome. | |
| 9 | |
| 10 #ifndef CHROME_RENDERER_GGL_GGL_H_ | |
| 11 #define CHROME_RENDERER_GGL_GGL_H_ | |
| 12 #pragma once | |
| 13 | |
| 14 #include "base/callback.h" | |
| 15 #include "ui/gfx/native_widget_types.h" | |
| 16 #include "ui/gfx/size.h" | |
| 17 | |
| 18 class GpuChannelHost; | |
| 19 class MessageLoop; | |
| 20 class CommandBufferProxy; | |
| 21 | |
| 22 namespace gpu { | |
| 23 namespace gles2 { | |
| 24 class GLES2Implementation; | |
| 25 } | |
| 26 } | |
| 27 | |
| 28 namespace media { | |
| 29 class VideoDecodeContext; | |
| 30 class VideoDecodeEngine; | |
| 31 } | |
| 32 | |
| 33 namespace ggl { | |
| 34 | |
| 35 class Context; | |
| 36 | |
| 37 // These are the same error codes as used by EGL. | |
| 38 enum Error { | |
| 39 SUCCESS = 0x3000, | |
| 40 NOT_INITIALIZED = 0x3001, | |
| 41 BAD_ATTRIBUTE = 0x3004, | |
| 42 BAD_CONTEXT = 0x3006, | |
| 43 CONTEXT_LOST = 0x300E | |
| 44 }; | |
| 45 | |
| 46 // Context configuration attributes. These are the same as used by EGL. | |
| 47 // Attributes are matched using a closest fit algorithm. | |
| 48 const int32 GGL_ALPHA_SIZE = 0x3021; | |
| 49 const int32 GGL_BLUE_SIZE = 0x3022; | |
| 50 const int32 GGL_GREEN_SIZE = 0x3023; | |
| 51 const int32 GGL_RED_SIZE = 0x3024; | |
| 52 const int32 GGL_DEPTH_SIZE = 0x3025; | |
| 53 const int32 GGL_STENCIL_SIZE = 0x3026; | |
| 54 const int32 GGL_SAMPLES = 0x3031; | |
| 55 const int32 GGL_SAMPLE_BUFFERS = 0x3032; | |
| 56 const int32 GGL_NONE = 0x3038; // Attrib list = terminator | |
| 57 | |
| 58 // Initialize the GGL library. This must have completed before any other GGL | |
| 59 // functions are invoked. | |
| 60 bool Initialize(); | |
| 61 | |
| 62 // Terminate the GGL library. This must be called after any other GGL functions | |
| 63 // have completed. | |
| 64 bool Terminate(); | |
| 65 | |
| 66 // Create a GGL context that renders directly to a view. The view and the | |
| 67 // associated window must not be destroyed until the returned context has been | |
| 68 // destroyed, otherwise the GPU process might attempt to render to an invalid | |
| 69 // window handle. | |
| 70 // | |
| 71 // NOTE: on Mac OS X, this entry point is only used to set up the | |
| 72 // accelerated compositor's output. On this platform, we actually pass | |
| 73 // a gfx::PluginWindowHandle in place of the gfx::NativeViewId, | |
| 74 // because the facility to allocate a fake PluginWindowHandle is | |
| 75 // already in place. We could add more entry points and messages to | |
| 76 // allocate both fake PluginWindowHandles and NativeViewIds and map | |
| 77 // from fake NativeViewIds to PluginWindowHandles, but this seems like | |
| 78 // unnecessary complexity at the moment. | |
| 79 // | |
| 80 // The render_view_id is currently also only used on Mac OS X. | |
| 81 // TODO(kbr): clean up the arguments to this function and make them | |
| 82 // more cross-platform. | |
| 83 Context* CreateViewContext(GpuChannelHost* channel, | |
| 84 int render_view_id, | |
| 85 const char* allowed_extensions, | |
| 86 const int32* attrib_list); | |
| 87 | |
| 88 #if defined(OS_MACOSX) | |
| 89 // On Mac OS X only, view contexts actually behave like offscreen contexts, and | |
| 90 // require an explicit resize operation which is slightly different from that | |
| 91 // of offscreen contexts. | |
| 92 void ResizeOnscreenContext(Context* context, const gfx::Size& size); | |
| 93 #endif | |
| 94 | |
| 95 // Create a GGL context that renders to an offscreen frame buffer. If parent is | |
| 96 // not NULL, that context can access a copy of the created | |
| 97 // context's frame buffer that is updated every time SwapBuffers is called. It | |
| 98 // is not as general as shared contexts in other implementations of OpenGL. If | |
| 99 // parent is not NULL, it must be used on the same thread as the parent. A child | |
| 100 // context may not outlive its parent. attrib_list must be NULL or a | |
| 101 // GGL_NONE-terminated list of attribute/value pairs. | |
| 102 Context* CreateOffscreenContext(GpuChannelHost* channel, | |
| 103 Context* parent, | |
| 104 const gfx::Size& size, | |
| 105 const char* allowed_extensions, | |
| 106 const int32* attrib_list); | |
| 107 | |
| 108 // Resize an offscreen frame buffer. The resize occurs on the next call to | |
| 109 // SwapBuffers. This is to avoid waiting until all pending GL calls have been | |
| 110 // executed by the GPU process. Everything rendered up to the call to | |
| 111 // SwapBuffers will be lost. A lost context will be reported if the resize | |
| 112 // fails. | |
| 113 void ResizeOffscreenContext(Context* context, const gfx::Size& size); | |
| 114 | |
| 115 // For an offscreen frame buffer context, return the texture ID with | |
| 116 // respect to the parent context. Returns zero if context does not have a | |
| 117 // parent. | |
| 118 uint32 GetParentTextureId(Context* context); | |
| 119 | |
| 120 // Create a new texture in the parent's context. Returns zero if context | |
| 121 // does not have a parent. | |
| 122 uint32 CreateParentTexture(Context* context, const gfx::Size& size); | |
| 123 | |
| 124 // Deletes a texture in the parent's context. | |
| 125 void DeleteParentTexture(Context* context, uint32 texture); | |
| 126 | |
| 127 // Provides a callback that will be invoked when SwapBuffers has completed | |
| 128 // service side. | |
| 129 void SetSwapBuffersCallback(Context* context, Callback0::Type* callback); | |
| 130 | |
| 131 void SetContextLostCallback(Context* context, Callback0::Type* callback); | |
| 132 | |
| 133 // Set the current GGL context for the calling thread. | |
| 134 bool MakeCurrent(Context* context); | |
| 135 | |
| 136 // For a view context, display everything that has been rendered since the | |
| 137 // last call. For an offscreen context, resolve everything that has been | |
| 138 // rendered since the last call to a copy that can be accessed by the parent | |
| 139 // context. | |
| 140 bool SwapBuffers(Context* context); | |
| 141 | |
| 142 // Destroy the given GGL context. | |
| 143 bool DestroyContext(Context* context); | |
| 144 | |
| 145 // Create a hardware video decode engine corresponding to the context. | |
| 146 media::VideoDecodeEngine* CreateVideoDecodeEngine(Context* context); | |
| 147 | |
| 148 // Create a hardware video decode context to pair with the hardware video | |
| 149 // decode engine. It can also be used with a software decode engine. | |
| 150 // | |
| 151 // Set |hardware_decoder| to true if this context is for a hardware video | |
| 152 // engine. |message_loop| is where the decode context should run on. | |
| 153 media::VideoDecodeContext* CreateVideoDecodeContext(Context* context, | |
| 154 MessageLoop* message_loop, | |
| 155 bool hardware_decoder); | |
| 156 | |
| 157 // TODO(gman): Remove this | |
| 158 void DisableShaderTranslation(Context* context); | |
| 159 | |
| 160 // Allows direct access to the GLES2 implementation so a context | |
| 161 // can be used without making it current. | |
| 162 gpu::gles2::GLES2Implementation* GetImplementation(Context* context); | |
| 163 | |
| 164 // Return the current GGL error. | |
| 165 Error GetError(Context* context); | |
| 166 | |
| 167 // Return true if GPU process reported context lost or there was a problem | |
| 168 // communicating with the GPU process. | |
| 169 bool IsCommandBufferContextLost(Context* context); | |
| 170 | |
| 171 CommandBufferProxy* GetCommandBufferProxy(Context* context); | |
| 172 | |
| 173 } // namespace ggl | |
| 174 | |
| 175 #endif // CHROME_RENDERER_GGL_GGL_H_ | |
| OLD | NEW |