| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #if defined(ENABLE_GPU) | 5 #if defined(ENABLE_GPU) |
| 6 | 6 |
| 7 #include "webkit/gpu/webgraphicscontext3d_in_process_command_buffer_impl.h" | 7 #include "webkit/gpu/webgraphicscontext3d_in_process_command_buffer_impl.h" |
| 8 | 8 |
| 9 #include <GLES2/gl2.h> | 9 #include <GLES2/gl2.h> |
| 10 #ifndef GL_GLEXT_PROTOTYPES | 10 #ifndef GL_GLEXT_PROTOTYPES |
| (...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 160 // Return the current error. | 160 // Return the current error. |
| 161 Error GetError(); | 161 Error GetError(); |
| 162 | 162 |
| 163 // Return true if GPU process reported GLInProcessContext lost or there was a | 163 // Return true if GPU process reported GLInProcessContext lost or there was a |
| 164 // problem communicating with the GPU process. | 164 // problem communicating with the GPU process. |
| 165 bool IsCommandBufferContextLost(); | 165 bool IsCommandBufferContextLost(); |
| 166 | 166 |
| 167 CommandBufferService* GetCommandBufferService(); | 167 CommandBufferService* GetCommandBufferService(); |
| 168 | 168 |
| 169 private: | 169 private: |
| 170 GLInProcessContext(GLInProcessContext* parent); | 170 explicit GLInProcessContext(GLInProcessContext* parent); |
| 171 | 171 |
| 172 bool Initialize(bool onscreen, | 172 bool Initialize(bool onscreen, |
| 173 gfx::PluginWindowHandle render_surface, | 173 gfx::PluginWindowHandle render_surface, |
| 174 const gfx::Size& size, | 174 const gfx::Size& size, |
| 175 GLInProcessContext* context_group, | 175 GLInProcessContext* context_group, |
| 176 const char* allowed_extensions, | 176 const char* allowed_extensions, |
| 177 const int32* attrib_list, | 177 const int32* attrib_list, |
| 178 const GURL& active_url, | 178 const GURL& active_url, |
| 179 gfx::GpuPreference gpu_preference); | 179 gfx::GpuPreference gpu_preference); |
| 180 void Destroy(); | 180 void Destroy(); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 202 namespace { | 202 namespace { |
| 203 | 203 |
| 204 const int32 kCommandBufferSize = 1024 * 1024; | 204 const int32 kCommandBufferSize = 1024 * 1024; |
| 205 // TODO(kbr): make the transfer buffer size configurable via context | 205 // TODO(kbr): make the transfer buffer size configurable via context |
| 206 // creation attributes. | 206 // creation attributes. |
| 207 const int32 kTransferBufferSize = 1024 * 1024; | 207 const int32 kTransferBufferSize = 1024 * 1024; |
| 208 | 208 |
| 209 static base::LazyInstance< | 209 static base::LazyInstance< |
| 210 std::set<WebGraphicsContext3DInProcessCommandBufferImpl*> > | 210 std::set<WebGraphicsContext3DInProcessCommandBufferImpl*> > |
| 211 g_all_shared_contexts(base::LINKER_INITIALIZED); | 211 g_all_shared_contexts(base::LINKER_INITIALIZED); |
| 212 static base::LazyInstance<base::Lock> | 212 static base::LazyInstance<base::Lock, |
| 213 base::LeakyLazyInstanceTraits<base::Lock> > |
| 213 g_all_shared_contexts_lock(base::LINKER_INITIALIZED); | 214 g_all_shared_contexts_lock(base::LINKER_INITIALIZED); |
| 214 | 215 |
| 215 // Singleton used to initialize and terminate the gles2 library. | 216 // Singleton used to initialize and terminate the gles2 library. |
| 216 class GLES2Initializer { | 217 class GLES2Initializer { |
| 217 public: | 218 public: |
| 218 GLES2Initializer() { | 219 GLES2Initializer() { |
| 219 gles2::Initialize(); | 220 gles2::Initialize(); |
| 220 } | 221 } |
| 221 | 222 |
| 222 ~GLES2Initializer() { | 223 ~GLES2Initializer() { |
| (...skipping 607 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 830 // framebuffer vertically before reading it back for compositing | 831 // framebuffer vertically before reading it back for compositing |
| 831 // via software. This code was quite complicated, used a lot of | 832 // via software. This code was quite complicated, used a lot of |
| 832 // GPU memory, and didn't provide an obvious speedup. Since this | 833 // GPU memory, and didn't provide an obvious speedup. Since this |
| 833 // vertical flip is only a temporary solution anyway until Chrome | 834 // vertical flip is only a temporary solution anyway until Chrome |
| 834 // is fully GPU composited, it wasn't worth the complexity. | 835 // is fully GPU composited, it wasn't worth the complexity. |
| 835 | 836 |
| 836 bool mustRestoreFBO = (bound_fbo_ != framebuffer); | 837 bool mustRestoreFBO = (bound_fbo_ != framebuffer); |
| 837 if (mustRestoreFBO) { | 838 if (mustRestoreFBO) { |
| 838 gl_->BindFramebuffer(GL_FRAMEBUFFER, framebuffer); | 839 gl_->BindFramebuffer(GL_FRAMEBUFFER, framebuffer); |
| 839 } | 840 } |
| 840 gl_->ReadPixels(0, 0, width, height, | 841 gl_->ReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, pixels); |
| 841 GL_RGBA, GL_UNSIGNED_BYTE, pixels); | |
| 842 | 842 |
| 843 // Swizzle red and blue channels | 843 // Swizzle red and blue channels |
| 844 // TODO(kbr): expose GL_BGRA as extension | 844 // TODO(kbr): expose GL_BGRA as extension |
| 845 for (size_t i = 0; i < buffer_size; i += 4) { | 845 for (size_t i = 0; i < buffer_size; i += 4) { |
| 846 std::swap(pixels[i], pixels[i + 2]); | 846 std::swap(pixels[i], pixels[i + 2]); |
| 847 } | 847 } |
| 848 | 848 |
| 849 if (mustRestoreFBO) { | 849 if (mustRestoreFBO) { |
| 850 gl_->BindFramebuffer(GL_FRAMEBUFFER, bound_fbo_); | 850 gl_->BindFramebuffer(GL_FRAMEBUFFER, bound_fbo_); |
| 851 } | 851 } |
| (...skipping 778 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1630 | 1630 |
| 1631 void WebGraphicsContext3DInProcessCommandBufferImpl::copyTextureToCompositor( | 1631 void WebGraphicsContext3DInProcessCommandBufferImpl::copyTextureToCompositor( |
| 1632 WebGLId texture, WebGLId parentTexture) { | 1632 WebGLId texture, WebGLId parentTexture) { |
| 1633 NOTIMPLEMENTED(); | 1633 NOTIMPLEMENTED(); |
| 1634 } | 1634 } |
| 1635 | 1635 |
| 1636 void WebGraphicsContext3DInProcessCommandBufferImpl::OnSwapBuffersComplete() { | 1636 void WebGraphicsContext3DInProcessCommandBufferImpl::OnSwapBuffersComplete() { |
| 1637 } | 1637 } |
| 1638 | 1638 |
| 1639 void WebGraphicsContext3DInProcessCommandBufferImpl::setContextLostCallback( | 1639 void WebGraphicsContext3DInProcessCommandBufferImpl::setContextLostCallback( |
| 1640 WebGraphicsContext3D::WebGraphicsContextLostCallback* cb) | 1640 WebGraphicsContext3D::WebGraphicsContextLostCallback* cb) { |
| 1641 { | |
| 1642 context_lost_callback_ = cb; | 1641 context_lost_callback_ = cb; |
| 1643 } | 1642 } |
| 1644 | 1643 |
| 1645 WGC3Denum WebGraphicsContext3DInProcessCommandBufferImpl:: | 1644 WGC3Denum WebGraphicsContext3DInProcessCommandBufferImpl:: |
| 1646 getGraphicsResetStatusARB() { | 1645 getGraphicsResetStatusARB() { |
| 1647 return context_lost_reason_; | 1646 return context_lost_reason_; |
| 1648 } | 1647 } |
| 1649 | 1648 |
| 1650 #if WEBKIT_USING_SKIA | 1649 #if WEBKIT_USING_SKIA |
| 1651 GrGLInterface* WebGraphicsContext3DInProcessCommandBufferImpl:: | 1650 GrGLInterface* WebGraphicsContext3DInProcessCommandBufferImpl:: |
| 1652 onCreateGrGLInterface() { | 1651 onCreateGrGLInterface() { |
| 1653 return webkit_glue::CreateCommandBufferSkiaGLBinding(); | 1652 return webkit_glue::CreateCommandBufferSkiaGLBinding(); |
| 1654 } | 1653 } |
| 1655 #endif | 1654 #endif |
| 1656 | 1655 |
| 1657 void WebGraphicsContext3DInProcessCommandBufferImpl::OnContextLost() { | 1656 void WebGraphicsContext3DInProcessCommandBufferImpl::OnContextLost() { |
| 1658 // TODO(kbr): improve the precision here. | 1657 // TODO(kbr): improve the precision here. |
| 1659 context_lost_reason_ = GL_UNKNOWN_CONTEXT_RESET_ARB; | 1658 context_lost_reason_ = GL_UNKNOWN_CONTEXT_RESET_ARB; |
| 1660 if (context_lost_callback_) { | 1659 if (context_lost_callback_) { |
| 1661 context_lost_callback_->onContextLost(); | 1660 context_lost_callback_->onContextLost(); |
| 1662 } | 1661 } |
| 1663 } | 1662 } |
| 1664 | 1663 |
| 1665 } // namespace gpu | 1664 } // namespace gpu |
| 1666 } // namespace webkit | 1665 } // namespace webkit |
| 1667 | 1666 |
| 1668 #endif // defined(ENABLE_GPU) | 1667 #endif // defined(ENABLE_GPU) |
| OLD | NEW |