Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(820)

Side by Side Diff: webkit/common/gpu/webgraphicscontext3d_in_process_command_buffer_impl.cc

Issue 22277004: Add gfx::SurfaceFactoryWebview (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: InProcessContext takes attrib struct Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 #include "webkit/common/gpu/webgraphicscontext3d_in_process_command_buffer_impl. h" 5 #include "webkit/common/gpu/webgraphicscontext3d_in_process_command_buffer_impl. h"
6 6
7 #include <GLES2/gl2.h> 7 #include <GLES2/gl2.h>
8 #ifndef GL_GLEXT_PROTOTYPES 8 #ifndef GL_GLEXT_PROTOTYPES
9 #define GL_GLEXT_PROTOTYPES 1 9 #define GL_GLEXT_PROTOTYPES 1
10 #endif 10 #endif
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
66 } // namespace anonymous 66 } // namespace anonymous
67 67
68 // static 68 // static
69 scoped_ptr<WebKit::WebGraphicsContext3D> 69 scoped_ptr<WebKit::WebGraphicsContext3D>
70 WebGraphicsContext3DInProcessCommandBufferImpl::CreateViewContext( 70 WebGraphicsContext3DInProcessCommandBufferImpl::CreateViewContext(
71 const WebKit::WebGraphicsContext3D::Attributes& attributes, 71 const WebKit::WebGraphicsContext3D::Attributes& attributes,
72 gfx::AcceleratedWidget window) { 72 gfx::AcceleratedWidget window) {
73 scoped_ptr<WebKit::WebGraphicsContext3D> context; 73 scoped_ptr<WebKit::WebGraphicsContext3D> context;
74 if (gfx::GLSurface::InitializeOneOff()) { 74 if (gfx::GLSurface::InitializeOneOff()) {
75 context.reset(new WebGraphicsContext3DInProcessCommandBufferImpl( 75 context.reset(new WebGraphicsContext3DInProcessCommandBufferImpl(
76 attributes, false, window)); 76 scoped_ptr< ::gpu::GLInProcessContext>(), attributes, false, window));
77 } 77 }
78 return context.Pass(); 78 return context.Pass();
79 } 79 }
80 80
81 // static 81 // static
82 scoped_ptr<WebKit::WebGraphicsContext3D> 82 scoped_ptr<WebKit::WebGraphicsContext3D>
83 WebGraphicsContext3DInProcessCommandBufferImpl::CreateOffscreenContext( 83 WebGraphicsContext3DInProcessCommandBufferImpl::CreateOffscreenContext(
84 const WebKit::WebGraphicsContext3D::Attributes& attributes) { 84 const WebKit::WebGraphicsContext3D::Attributes& attributes) {
85 return make_scoped_ptr(new WebGraphicsContext3DInProcessCommandBufferImpl( 85 return make_scoped_ptr(new WebGraphicsContext3DInProcessCommandBufferImpl(
86 attributes, true, gfx::kNullAcceleratedWidget)) 86 scoped_ptr< ::gpu::GLInProcessContext>(),
87 attributes,
88 true,
89 gfx::kNullAcceleratedWidget))
90 .PassAs<WebKit::WebGraphicsContext3D>();
91 }
92
93 scoped_ptr<WebKit::WebGraphicsContext3D>
94 WebGraphicsContext3DInProcessCommandBufferImpl::WrapContext(
95 scoped_ptr< ::gpu::GLInProcessContext> context,
96 const WebKit::WebGraphicsContext3D::Attributes& attributes) {
97 return make_scoped_ptr(
98 new WebGraphicsContext3DInProcessCommandBufferImpl(
99 context.Pass(),
100 attributes,
101 true /* is_offscreen. Not used. */,
102 gfx::kNullAcceleratedWidget /* window. Not used. */))
87 .PassAs<WebKit::WebGraphicsContext3D>(); 103 .PassAs<WebKit::WebGraphicsContext3D>();
88 } 104 }
89 105
90 WebGraphicsContext3DInProcessCommandBufferImpl:: 106 WebGraphicsContext3DInProcessCommandBufferImpl::
91 WebGraphicsContext3DInProcessCommandBufferImpl( 107 WebGraphicsContext3DInProcessCommandBufferImpl(
108 scoped_ptr< ::gpu::GLInProcessContext> context,
92 const WebKit::WebGraphicsContext3D::Attributes& attributes, 109 const WebKit::WebGraphicsContext3D::Attributes& attributes,
93 bool is_offscreen, 110 bool is_offscreen,
94 gfx::AcceleratedWidget window) 111 gfx::AcceleratedWidget window)
95 : is_offscreen_(is_offscreen), 112 : is_offscreen_(is_offscreen),
96 window_(window), 113 window_(window),
97 initialized_(false), 114 initialized_(false),
98 initialize_failed_(false), 115 initialize_failed_(false),
116 context_(context.Pass()),
99 gl_(NULL), 117 gl_(NULL),
100 context_lost_callback_(NULL), 118 context_lost_callback_(NULL),
101 context_lost_reason_(GL_NO_ERROR), 119 context_lost_reason_(GL_NO_ERROR),
102 attributes_(attributes), 120 attributes_(attributes),
103 cached_width_(0), 121 cached_width_(0),
104 cached_height_(0) { 122 cached_height_(0) {
105 } 123 }
106 124
107 WebGraphicsContext3DInProcessCommandBufferImpl:: 125 WebGraphicsContext3DInProcessCommandBufferImpl::
108 ~WebGraphicsContext3DInProcessCommandBufferImpl() { 126 ~WebGraphicsContext3DInProcessCommandBufferImpl() {
109 } 127 }
110 128
129 // static
130 void WebGraphicsContext3DInProcessCommandBufferImpl::ConvertAttributes(
131 const WebKit::WebGraphicsContext3D::Attributes& attributes,
132 ::gpu::GLInProcessContextAttribs* output_attribs) {
133 output_attribs->alpha_size = attributes.alpha ? 8 : 0;
134 output_attribs->depth_size = attributes.depth ? 24 : 0;
135 output_attribs->stencil_size = attributes.stencil ? 8 : 0;
136 output_attribs->samples = attributes.antialias ? 4 : 0;
137 output_attribs->sample_buffers = attributes.antialias ? 1 : 0;
138 }
139
111 bool WebGraphicsContext3DInProcessCommandBufferImpl::MaybeInitializeGL() { 140 bool WebGraphicsContext3DInProcessCommandBufferImpl::MaybeInitializeGL() {
112 if (initialized_) 141 if (initialized_)
113 return true; 142 return true;
114 143
115 if (initialize_failed_) 144 if (initialize_failed_)
116 return false; 145 return false;
117 146
118 // Ensure the gles2 library is initialized first in a thread safe way. 147 // Ensure the gles2 library is initialized first in a thread safe way.
119 g_gles2_initializer.Get(); 148 g_gles2_initializer.Get();
120 149
121 // Convert WebGL context creation attributes into GLInProcessContext / EGL 150 if (!context_) {
122 // size requests. 151 const char* preferred_extensions = "*";
123 const int alpha_size = attributes_.alpha ? 8 : 0;
124 const int depth_size = attributes_.depth ? 24 : 0;
125 const int stencil_size = attributes_.stencil ? 8 : 0;
126 const int samples = attributes_.antialias ? 4 : 0;
127 const int sample_buffers = attributes_.antialias ? 1 : 0;
128 const int32 attribs[] = {
129 GLInProcessContext::ALPHA_SIZE, alpha_size,
130 GLInProcessContext::DEPTH_SIZE, depth_size,
131 GLInProcessContext::STENCIL_SIZE, stencil_size,
132 GLInProcessContext::SAMPLES, samples,
133 GLInProcessContext::SAMPLE_BUFFERS, sample_buffers,
134 GLInProcessContext::NONE,
135 };
136 152
137 const char* preferred_extensions = "*"; 153 // TODO(kbr): More work will be needed in this implementation to
154 // properly support GPU switching. Like in the out-of-process
155 // command buffer implementation, all previously created contexts
156 // will need to be lost either when the first context requesting the
157 // discrete GPU is created, or the last one is destroyed.
158 gfx::GpuPreference gpu_preference = gfx::PreferDiscreteGpu;
138 159
139 // TODO(kbr): More work will be needed in this implementation to 160 ::gpu::GLInProcessContextAttribs attrib_struct;
140 // properly support GPU switching. Like in the out-of-process 161 ConvertAttributes(attributes_, &attrib_struct),
141 // command buffer implementation, all previously created contexts
142 // will need to be lost either when the first context requesting the
143 // discrete GPU is created, or the last one is destroyed.
144 gfx::GpuPreference gpu_preference = gfx::PreferDiscreteGpu;
145 162
146 base::Closure context_lost_callback = 163 context_.reset(GLInProcessContext::CreateContext(
147 base::Bind(&WebGraphicsContext3DInProcessCommandBufferImpl::OnContextLost, 164 is_offscreen_,
148 base::Unretained(this)); 165 window_,
166 gfx::Size(1, 1),
167 attributes_.shareResources,
168 preferred_extensions,
169 attrib_struct,
170 gpu_preference));
171 }
149 172
150 context_.reset(GLInProcessContext::CreateContext( 173 if (context_) {
151 is_offscreen_, 174 base::Closure context_lost_callback = base::Bind(
152 window_, 175 &WebGraphicsContext3DInProcessCommandBufferImpl::OnContextLost,
153 gfx::Size(1, 1), 176 base::Unretained(this));
no sievers 2013/08/07 01:52:38 interesting that we pass in 1,1 here
154 attributes_.shareResources, 177 context_->SetContextLostCallback(context_lost_callback);
155 preferred_extensions, 178 } else {
156 attribs,
157 gpu_preference,
158 context_lost_callback));
159
160 if (!context_) {
161 initialize_failed_ = true; 179 initialize_failed_ = true;
162 return false; 180 return false;
163 } 181 }
164 182
165 gl_ = context_->GetImplementation(); 183 gl_ = context_->GetImplementation();
166 184
167 if (gl_ && attributes_.noExtensions) 185 if (gl_ && attributes_.noExtensions)
168 gl_->EnableFeatureCHROMIUM("webgl_enable_glsl_webgl_validation"); 186 gl_->EnableFeatureCHROMIUM("webgl_enable_glsl_webgl_validation");
169 187
170 // Set attributes_ from created offscreen context. 188 // Set attributes_ from created offscreen context.
(...skipping 1014 matching lines...) Expand 10 before | Expand all | Expand 10 after
1185 1203
1186 DELEGATE_TO_GL_9(asyncTexSubImage2DCHROMIUM, AsyncTexSubImage2DCHROMIUM, 1204 DELEGATE_TO_GL_9(asyncTexSubImage2DCHROMIUM, AsyncTexSubImage2DCHROMIUM,
1187 WGC3Denum, WGC3Dint, WGC3Dint, WGC3Dint, WGC3Dsizei, WGC3Dsizei, 1205 WGC3Denum, WGC3Dint, WGC3Dint, WGC3Dint, WGC3Dsizei, WGC3Dsizei,
1188 WGC3Denum, WGC3Denum, const void*) 1206 WGC3Denum, WGC3Denum, const void*)
1189 1207
1190 DELEGATE_TO_GL_1(waitAsyncTexImage2DCHROMIUM, WaitAsyncTexImage2DCHROMIUM, 1208 DELEGATE_TO_GL_1(waitAsyncTexImage2DCHROMIUM, WaitAsyncTexImage2DCHROMIUM,
1191 WGC3Denum) 1209 WGC3Denum)
1192 1210
1193 } // namespace gpu 1211 } // namespace gpu
1194 } // namespace webkit 1212 } // namespace webkit
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698