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 "content/renderer/gpu/webgraphicscontext3d_command_buffer_impl.h" | 7 #include "content/renderer/gpu/webgraphicscontext3d_command_buffer_impl.h" |
8 | 8 |
9 #include "gpu/GLES2/gl2.h" | 9 #include "gpu/GLES2/gl2.h" |
10 #ifndef GL_GLEXT_PROTOTYPES | 10 #ifndef GL_GLEXT_PROTOTYPES |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
59 | 59 |
60 WebGraphicsContext3DCommandBufferImpl:: | 60 WebGraphicsContext3DCommandBufferImpl:: |
61 ~WebGraphicsContext3DCommandBufferImpl() { | 61 ~WebGraphicsContext3DCommandBufferImpl() { |
62 { | 62 { |
63 base::AutoLock lock(g_all_shared_contexts_lock.Get()); | 63 base::AutoLock lock(g_all_shared_contexts_lock.Get()); |
64 g_all_shared_contexts.Pointer()->erase(this); | 64 g_all_shared_contexts.Pointer()->erase(this); |
65 } | 65 } |
66 delete context_; | 66 delete context_; |
67 } | 67 } |
68 | 68 |
69 // This string should only be passed for WebGL contexts. Nothing ELSE!!! | |
70 // Compositor contexts, Canvas2D contexts, Pepper Contexts, nor any other use of | |
71 // a context should not pass this string. | |
72 static const char* kWebGLPreferredGLExtensions = | |
73 "GL_OES_packed_depth_stencil " | |
74 "GL_OES_depth24 " | |
75 "GL_CHROMIUM_webglsl"; | |
76 | |
77 bool WebGraphicsContext3DCommandBufferImpl::initialize( | 69 bool WebGraphicsContext3DCommandBufferImpl::initialize( |
78 WebGraphicsContext3D::Attributes attributes, | 70 WebGraphicsContext3D::Attributes attributes, |
79 WebKit::WebView* web_view, | 71 WebKit::WebView* web_view, |
80 bool render_directly_to_web_view) { | 72 bool render_directly_to_web_view) { |
81 DCHECK(!context_); | 73 DCHECK(!context_); |
82 TRACE_EVENT0("gpu", "WebGfxCtx3DCmdBfrImpl::initialize"); | 74 TRACE_EVENT0("gpu", "WebGfxCtx3DCmdBfrImpl::initialize"); |
83 RenderThread* render_thread = RenderThread::current(); | 75 RenderThread* render_thread = RenderThread::current(); |
84 if (!render_thread) | 76 if (!render_thread) |
85 return false; | 77 return false; |
86 host_ = render_thread->EstablishGpuChannelSync( | 78 host_ = render_thread->EstablishGpuChannelSync( |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
136 RendererGLContext::ALPHA_SIZE, alpha_size, | 128 RendererGLContext::ALPHA_SIZE, alpha_size, |
137 RendererGLContext::DEPTH_SIZE, depth_size, | 129 RendererGLContext::DEPTH_SIZE, depth_size, |
138 RendererGLContext::STENCIL_SIZE, stencil_size, | 130 RendererGLContext::STENCIL_SIZE, stencil_size, |
139 RendererGLContext::SAMPLES, samples, | 131 RendererGLContext::SAMPLES, samples, |
140 RendererGLContext::SAMPLE_BUFFERS, sample_buffers, | 132 RendererGLContext::SAMPLE_BUFFERS, sample_buffers, |
141 RendererGLContext::SHARE_RESOURCES, attributes_.shareResources ? 1 : 0, | 133 RendererGLContext::SHARE_RESOURCES, attributes_.shareResources ? 1 : 0, |
142 RendererGLContext::BIND_GENERATES_RESOURCES, 0, | 134 RendererGLContext::BIND_GENERATES_RESOURCES, 0, |
143 RendererGLContext::NONE, | 135 RendererGLContext::NONE, |
144 }; | 136 }; |
145 | 137 |
146 const char* preferred_extensions = attributes_.noExtensions ? | 138 const char* preferred_extensions = "*"; |
147 kWebGLPreferredGLExtensions : "*"; | |
148 | 139 |
149 // We need to lock g_all_shared_contexts until after RendererGLContext::Create | 140 // We need to lock g_all_shared_contexts until after RendererGLContext::Create |
150 // to ensure that the context we picked for our share group isn't deleted. | 141 // to ensure that the context we picked for our share group isn't deleted. |
151 // (There's also a lock in our destructor.) | 142 // (There's also a lock in our destructor.) |
152 { | 143 { |
153 base::AutoLock lock(g_all_shared_contexts_lock.Get()); | 144 base::AutoLock lock(g_all_shared_contexts_lock.Get()); |
154 RendererGLContext* share_group = NULL; | 145 RendererGLContext* share_group = NULL; |
155 if (attributes_.shareResources) { | 146 if (attributes_.shareResources) { |
156 share_group = g_all_shared_contexts.Pointer()->empty() ? | 147 share_group = g_all_shared_contexts.Pointer()->empty() ? |
157 NULL : (*g_all_shared_contexts.Pointer()->begin())->context_; | 148 NULL : (*g_all_shared_contexts.Pointer()->begin())->context_; |
(...skipping 15 matching lines...) Expand all Loading... |
173 preferred_extensions, | 164 preferred_extensions, |
174 attribs, | 165 attribs, |
175 active_url_); | 166 active_url_); |
176 } | 167 } |
177 } | 168 } |
178 | 169 |
179 if (!context_) | 170 if (!context_) |
180 return false; | 171 return false; |
181 | 172 |
182 gl_ = context_->GetImplementation(); | 173 gl_ = context_->GetImplementation(); |
| 174 |
| 175 // TODO(twiz): This code is too fragile in that it assumes that only WebGL |
| 176 // contexts will request noExtensions. |
| 177 if (gl_ && attributes_.noExtensions) |
| 178 gl_->EnableFeatureCHROMIUM("webgl_enable_glsl_webgl_validation"); |
| 179 |
183 context_->SetContextLostCallback( | 180 context_->SetContextLostCallback( |
184 NewCallback(this, | 181 NewCallback(this, |
185 &WebGraphicsContext3DCommandBufferImpl::OnContextLost)); | 182 &WebGraphicsContext3DCommandBufferImpl::OnContextLost)); |
186 | 183 |
187 // TODO(gman): Remove this. | 184 // TODO(gman): Remove this. |
188 const CommandLine& command_line = *CommandLine::ForCurrentProcess(); | 185 const CommandLine& command_line = *CommandLine::ForCurrentProcess(); |
189 if (command_line.HasSwitch(switches::kDisableGLSLTranslator)) { | 186 if (command_line.HasSwitch(switches::kDisableGLSLTranslator)) { |
190 context_->DisableShaderTranslation(); | 187 context_->DisableShaderTranslation(); |
191 } | 188 } |
192 | 189 |
(...skipping 900 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1093 } | 1090 } |
1094 #ifndef WTF_USE_THREADED_COMPOSITING | 1091 #ifndef WTF_USE_THREADED_COMPOSITING |
1095 RenderView* renderview = | 1092 RenderView* renderview = |
1096 web_view_ ? RenderView::FromWebView(web_view_) : NULL; | 1093 web_view_ ? RenderView::FromWebView(web_view_) : NULL; |
1097 if (renderview) | 1094 if (renderview) |
1098 renderview->OnViewContextSwapBuffersAborted(); | 1095 renderview->OnViewContextSwapBuffersAborted(); |
1099 #endif | 1096 #endif |
1100 } | 1097 } |
1101 | 1098 |
1102 #endif // defined(ENABLE_GPU) | 1099 #endif // defined(ENABLE_GPU) |
OLD | NEW |