Chromium Code Reviews| 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/webgraphicscontext3d_command_buffer_impl.h" | 7 #include "content/renderer/webgraphicscontext3d_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 |
| 11 #define GL_GLEXT_PROTOTYPES 1 | 11 #define GL_GLEXT_PROTOTYPES 1 |
| 12 #endif | 12 #endif |
| 13 #include <GLES2/gl2ext.h> | 13 #include <GLES2/gl2ext.h> |
| 14 | 14 |
| 15 #include <algorithm> | 15 #include <algorithm> |
| 16 | 16 |
| 17 #include "base/string_tokenizer.h" | 17 #include "base/string_tokenizer.h" |
| 18 #include "base/command_line.h" | 18 #include "base/command_line.h" |
| 19 #include "base/debug/trace_event.h" | 19 #include "base/debug/trace_event.h" |
| 20 #include "base/logging.h" | 20 #include "base/logging.h" |
| 21 #include "base/metrics/histogram.h" | 21 #include "base/metrics/histogram.h" |
| 22 #include "content/common/content_switches.h" | 22 #include "content/common/content_switches.h" |
| 23 #include "content/renderer/gpu_channel_host.h" | 23 #include "content/renderer/gpu_channel_host.h" |
| 24 #include "content/renderer/render_thread.h" | 24 #include "content/renderer/render_thread.h" |
| 25 #include "content/renderer/render_view.h" | 25 #include "content/renderer/render_view.h" |
| 26 #include "gpu/command_buffer/client/gles2_implementation.h" | |
| 26 #include "gpu/command_buffer/common/constants.h" | 27 #include "gpu/command_buffer/common/constants.h" |
| 27 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h" | 28 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h" |
| 28 #include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h" | 29 #include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h" |
| 29 #include "webkit/glue/gl_bindings_skia_cmd_buffer.h" | 30 #include "webkit/glue/gl_bindings_skia_cmd_buffer.h" |
| 30 | 31 |
| 32 #if defined(USE_REAL_GL_API) | |
| 33 #define CALL_GL_IMPL(name) gl##name | |
| 34 inline void WebGraphicsContext3DCommandBufferImpl::localMakeContextCurrent() { | |
| 35 makeContextCurrent(); | |
| 36 } | |
| 37 #else | |
| 38 #define CALL_GL_IMPL(name) (gles2_implementation_->name) | |
| 39 inline void WebGraphicsContext3DCommandBufferImpl::localMakeContextCurrent() { | |
| 40 } | |
| 41 #endif | |
| 42 | |
| 31 WebGraphicsContext3DCommandBufferImpl::WebGraphicsContext3DCommandBufferImpl() | 43 WebGraphicsContext3DCommandBufferImpl::WebGraphicsContext3DCommandBufferImpl() |
| 32 : context_(NULL), | 44 : context_(NULL), |
| 45 gles2_implementation_(NULL), | |
| 33 web_view_(NULL), | 46 web_view_(NULL), |
| 34 #if defined(OS_MACOSX) | 47 #if defined(OS_MACOSX) |
| 35 plugin_handle_(NULL), | 48 plugin_handle_(NULL), |
| 36 #endif // defined(OS_MACOSX) | 49 #endif // defined(OS_MACOSX) |
| 37 context_lost_callback_(0), | 50 context_lost_callback_(0), |
| 38 cached_width_(0), | 51 cached_width_(0), |
| 39 cached_height_(0), | 52 cached_height_(0), |
| 40 bound_fbo_(0) { | 53 bound_fbo_(0) { |
| 41 } | 54 } |
| 42 | 55 |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 137 parent_context, | 150 parent_context, |
| 138 gfx::Size(1, 1), | 151 gfx::Size(1, 1), |
| 139 kWebGraphicsContext3DPerferredGLExtensions, | 152 kWebGraphicsContext3DPerferredGLExtensions, |
| 140 attribs, | 153 attribs, |
| 141 active_url); | 154 active_url); |
| 142 web_view_ = NULL; | 155 web_view_ = NULL; |
| 143 } | 156 } |
| 144 if (!context_) | 157 if (!context_) |
| 145 return false; | 158 return false; |
| 146 | 159 |
| 160 gles2_implementation_ = context_->GetImplementation(); | |
| 147 context_->SetContextLostCallback( | 161 context_->SetContextLostCallback( |
| 148 NewCallback(this, | 162 NewCallback(this, |
| 149 &WebGraphicsContext3DCommandBufferImpl::OnContextLost)); | 163 &WebGraphicsContext3DCommandBufferImpl::OnContextLost)); |
| 150 | 164 |
| 151 // TODO(gman): Remove this. | 165 // TODO(gman): Remove this. |
| 152 const CommandLine& command_line = *CommandLine::ForCurrentProcess(); | 166 const CommandLine& command_line = *CommandLine::ForCurrentProcess(); |
| 153 if (command_line.HasSwitch(switches::kDisableGLSLTranslator)) { | 167 if (command_line.HasSwitch(switches::kDisableGLSLTranslator)) { |
| 154 context_->DisableShaderTranslation(); | 168 context_->DisableShaderTranslation(); |
| 155 } | 169 } |
| 156 | 170 |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 197 | 211 |
| 198 void WebGraphicsContext3DCommandBufferImpl::prepareTexture() { | 212 void WebGraphicsContext3DCommandBufferImpl::prepareTexture() { |
| 199 // Copies the contents of the off-screen render target into the texture | 213 // Copies the contents of the off-screen render target into the texture |
| 200 // used by the compositor. | 214 // used by the compositor. |
| 201 context_->SwapBuffers(); | 215 context_->SwapBuffers(); |
| 202 } | 216 } |
| 203 | 217 |
| 204 void WebGraphicsContext3DCommandBufferImpl::reshape(int width, int height) { | 218 void WebGraphicsContext3DCommandBufferImpl::reshape(int width, int height) { |
| 205 cached_width_ = width; | 219 cached_width_ = width; |
| 206 cached_height_ = height; | 220 cached_height_ = height; |
| 207 makeContextCurrent(); | 221 localMakeContextCurrent(); |
|
Ken Russell (switch to Gerrit)
2011/05/21 01:09:21
I thought the reason for this change was to make t
greggman
2011/05/21 01:22:49
You're right. I changed it to the simpler way.
| |
| 208 | 222 |
| 209 if (web_view_) { | 223 if (web_view_) { |
| 210 #if defined(OS_MACOSX) | 224 #if defined(OS_MACOSX) |
| 211 context_->ResizeOnscreen(gfx::Size(width, height)); | 225 context_->ResizeOnscreen(gfx::Size(width, height)); |
| 212 #else | 226 #else |
| 213 glResizeCHROMIUM(width, height); | 227 CALL_GL_IMPL(ResizeCHROMIUM)(width, height); |
| 214 #endif | 228 #endif |
| 215 } else { | 229 } else { |
| 216 context_->ResizeOffscreen(gfx::Size(width, height)); | 230 context_->ResizeOffscreen(gfx::Size(width, height)); |
| 217 // Force a SwapBuffers to get the framebuffer to resize. | 231 // Force a SwapBuffers to get the framebuffer to resize. |
| 218 context_->SwapBuffers(); | 232 context_->SwapBuffers(); |
| 219 } | 233 } |
| 220 | 234 |
| 221 #ifdef FLIP_FRAMEBUFFER_VERTICALLY | 235 #ifdef FLIP_FRAMEBUFFER_VERTICALLY |
| 222 scanline_.reset(new uint8[width * 4]); | 236 scanline_.reset(new uint8[width * 4]); |
| 223 #endif // FLIP_FRAMEBUFFER_VERTICALLY | 237 #endif // FLIP_FRAMEBUFFER_VERTICALLY |
| 224 } | 238 } |
| 225 | 239 |
| 226 WebGLId WebGraphicsContext3DCommandBufferImpl::createCompositorTexture( | 240 WebGLId WebGraphicsContext3DCommandBufferImpl::createCompositorTexture( |
| 227 WGC3Dsizei width, WGC3Dsizei height) { | 241 WGC3Dsizei width, WGC3Dsizei height) { |
| 228 makeContextCurrent(); | 242 localMakeContextCurrent(); |
| 229 return context_->CreateParentTexture(gfx::Size(width, height)); | 243 return context_->CreateParentTexture(gfx::Size(width, height)); |
| 230 } | 244 } |
| 231 | 245 |
| 232 void WebGraphicsContext3DCommandBufferImpl::deleteCompositorTexture( | 246 void WebGraphicsContext3DCommandBufferImpl::deleteCompositorTexture( |
| 233 WebGLId parent_texture) { | 247 WebGLId parent_texture) { |
| 234 makeContextCurrent(); | 248 localMakeContextCurrent(); |
| 235 context_->DeleteParentTexture(parent_texture); | 249 context_->DeleteParentTexture(parent_texture); |
| 236 } | 250 } |
| 237 | 251 |
| 238 #ifdef FLIP_FRAMEBUFFER_VERTICALLY | 252 #ifdef FLIP_FRAMEBUFFER_VERTICALLY |
| 239 void WebGraphicsContext3DCommandBufferImpl::FlipVertically( | 253 void WebGraphicsContext3DCommandBufferImpl::FlipVertically( |
| 240 uint8* framebuffer, | 254 uint8* framebuffer, |
| 241 unsigned int width, | 255 unsigned int width, |
| 242 unsigned int height) { | 256 unsigned int height) { |
| 243 uint8* scanline = scanline_.get(); | 257 uint8* scanline = scanline_.get(); |
| 244 if (!scanline) | 258 if (!scanline) |
| (...skipping 14 matching lines...) Expand all Loading... | |
| 259 } | 273 } |
| 260 #endif | 274 #endif |
| 261 | 275 |
| 262 bool WebGraphicsContext3DCommandBufferImpl::readBackFramebuffer( | 276 bool WebGraphicsContext3DCommandBufferImpl::readBackFramebuffer( |
| 263 unsigned char* pixels, | 277 unsigned char* pixels, |
| 264 size_t buffer_size) { | 278 size_t buffer_size) { |
| 265 if (buffer_size != static_cast<size_t>(4 * width() * height())) { | 279 if (buffer_size != static_cast<size_t>(4 * width() * height())) { |
| 266 return false; | 280 return false; |
| 267 } | 281 } |
| 268 | 282 |
| 269 makeContextCurrent(); | 283 localMakeContextCurrent(); |
| 270 | 284 |
| 271 // Earlier versions of this code used the GPU to flip the | 285 // Earlier versions of this code used the GPU to flip the |
| 272 // framebuffer vertically before reading it back for compositing | 286 // framebuffer vertically before reading it back for compositing |
| 273 // via software. This code was quite complicated, used a lot of | 287 // via software. This code was quite complicated, used a lot of |
| 274 // GPU memory, and didn't provide an obvious speedup. Since this | 288 // GPU memory, and didn't provide an obvious speedup. Since this |
| 275 // vertical flip is only a temporary solution anyway until Chrome | 289 // vertical flip is only a temporary solution anyway until Chrome |
| 276 // is fully GPU composited, it wasn't worth the complexity. | 290 // is fully GPU composited, it wasn't worth the complexity. |
| 277 | 291 |
| 278 bool mustRestoreFBO = (bound_fbo_ != 0); | 292 bool mustRestoreFBO = (bound_fbo_ != 0); |
| 279 if (mustRestoreFBO) { | 293 if (mustRestoreFBO) { |
| 280 glBindFramebuffer(GL_FRAMEBUFFER, 0); | 294 CALL_GL_IMPL(BindFramebuffer)(GL_FRAMEBUFFER, 0); |
| 281 } | 295 } |
| 282 glReadPixels(0, 0, cached_width_, cached_height_, | 296 CALL_GL_IMPL(ReadPixels)(0, 0, cached_width_, cached_height_, |
| 283 GL_RGBA, GL_UNSIGNED_BYTE, pixels); | 297 GL_RGBA, GL_UNSIGNED_BYTE, pixels); |
| 284 | 298 |
| 285 // Swizzle red and blue channels | 299 // Swizzle red and blue channels |
| 286 // TODO(kbr): expose GL_BGRA as extension | 300 // TODO(kbr): expose GL_BGRA as extension |
| 287 for (size_t i = 0; i < buffer_size; i += 4) { | 301 for (size_t i = 0; i < buffer_size; i += 4) { |
| 288 std::swap(pixels[i], pixels[i + 2]); | 302 std::swap(pixels[i], pixels[i + 2]); |
| 289 } | 303 } |
| 290 | 304 |
| 291 if (mustRestoreFBO) { | 305 if (mustRestoreFBO) { |
| 292 glBindFramebuffer(GL_FRAMEBUFFER, bound_fbo_); | 306 CALL_GL_IMPL(BindFramebuffer)(GL_FRAMEBUFFER, bound_fbo_); |
| 293 } | 307 } |
| 294 | 308 |
| 295 #ifdef FLIP_FRAMEBUFFER_VERTICALLY | 309 #ifdef FLIP_FRAMEBUFFER_VERTICALLY |
| 296 if (pixels) { | 310 if (pixels) { |
| 297 FlipVertically(pixels, cached_width_, cached_height_); | 311 FlipVertically(pixels, cached_width_, cached_height_); |
| 298 } | 312 } |
| 299 #endif | 313 #endif |
| 300 | 314 |
| 301 return true; | 315 return true; |
| 302 } | 316 } |
| 303 | 317 |
| 304 void WebGraphicsContext3DCommandBufferImpl::synthesizeGLError( | 318 void WebGraphicsContext3DCommandBufferImpl::synthesizeGLError( |
| 305 WGC3Denum error) { | 319 WGC3Denum error) { |
| 306 if (find(synthetic_errors_.begin(), synthetic_errors_.end(), error) == | 320 if (find(synthetic_errors_.begin(), synthetic_errors_.end(), error) == |
| 307 synthetic_errors_.end()) { | 321 synthetic_errors_.end()) { |
| 308 synthetic_errors_.push_back(error); | 322 synthetic_errors_.push_back(error); |
| 309 } | 323 } |
| 310 } | 324 } |
| 311 | 325 |
| 312 void* WebGraphicsContext3DCommandBufferImpl::mapBufferSubDataCHROMIUM( | 326 void* WebGraphicsContext3DCommandBufferImpl::mapBufferSubDataCHROMIUM( |
| 313 WGC3Denum target, | 327 WGC3Denum target, |
| 314 WGC3Dintptr offset, | 328 WGC3Dintptr offset, |
| 315 WGC3Dsizeiptr size, | 329 WGC3Dsizeiptr size, |
| 316 WGC3Denum access) { | 330 WGC3Denum access) { |
| 317 makeContextCurrent(); | 331 localMakeContextCurrent(); |
| 318 return glMapBufferSubDataCHROMIUM(target, offset, size, access); | 332 return CALL_GL_IMPL(MapBufferSubDataCHROMIUM)(target, offset, size, access); |
| 319 } | 333 } |
| 320 | 334 |
| 321 void WebGraphicsContext3DCommandBufferImpl::unmapBufferSubDataCHROMIUM( | 335 void WebGraphicsContext3DCommandBufferImpl::unmapBufferSubDataCHROMIUM( |
| 322 const void* mem) { | 336 const void* mem) { |
| 323 makeContextCurrent(); | 337 localMakeContextCurrent(); |
| 324 return glUnmapBufferSubDataCHROMIUM(mem); | 338 return CALL_GL_IMPL(UnmapBufferSubDataCHROMIUM)(mem); |
| 325 } | 339 } |
| 326 | 340 |
| 327 void* WebGraphicsContext3DCommandBufferImpl::mapTexSubImage2DCHROMIUM( | 341 void* WebGraphicsContext3DCommandBufferImpl::mapTexSubImage2DCHROMIUM( |
| 328 WGC3Denum target, | 342 WGC3Denum target, |
| 329 WGC3Dint level, | 343 WGC3Dint level, |
| 330 WGC3Dint xoffset, | 344 WGC3Dint xoffset, |
| 331 WGC3Dint yoffset, | 345 WGC3Dint yoffset, |
| 332 WGC3Dsizei width, | 346 WGC3Dsizei width, |
| 333 WGC3Dsizei height, | 347 WGC3Dsizei height, |
| 334 WGC3Denum format, | 348 WGC3Denum format, |
| 335 WGC3Denum type, | 349 WGC3Denum type, |
| 336 WGC3Denum access) { | 350 WGC3Denum access) { |
| 337 return glMapTexSubImage2DCHROMIUM( | 351 return CALL_GL_IMPL(MapTexSubImage2DCHROMIUM)( |
| 338 target, level, xoffset, yoffset, width, height, format, type, access); | 352 target, level, xoffset, yoffset, width, height, format, type, access); |
| 339 } | 353 } |
| 340 | 354 |
| 341 void WebGraphicsContext3DCommandBufferImpl::unmapTexSubImage2DCHROMIUM( | 355 void WebGraphicsContext3DCommandBufferImpl::unmapTexSubImage2DCHROMIUM( |
| 342 const void* mem) { | 356 const void* mem) { |
| 343 makeContextCurrent(); | 357 localMakeContextCurrent(); |
| 344 glUnmapTexSubImage2DCHROMIUM(mem); | 358 CALL_GL_IMPL(UnmapTexSubImage2DCHROMIUM)(mem); |
| 345 } | 359 } |
| 346 | 360 |
| 347 void WebGraphicsContext3DCommandBufferImpl::copyTextureToParentTextureCHROMIUM( | 361 void WebGraphicsContext3DCommandBufferImpl::copyTextureToParentTextureCHROMIUM( |
| 348 WebGLId texture, WebGLId parentTexture) { | 362 WebGLId texture, WebGLId parentTexture) { |
| 349 copyTextureToCompositor(texture, parentTexture); | 363 copyTextureToCompositor(texture, parentTexture); |
| 350 } | 364 } |
| 351 | 365 |
| 352 void WebGraphicsContext3DCommandBufferImpl::getParentToChildLatchCHROMIUM( | 366 void WebGraphicsContext3DCommandBufferImpl::getParentToChildLatchCHROMIUM( |
| 353 WGC3Duint* latch_id) | 367 WGC3Duint* latch_id) |
| 354 { | 368 { |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 365 if (!context_->GetChildToParentLatch(latch_id)) { | 379 if (!context_->GetChildToParentLatch(latch_id)) { |
| 366 LOG(ERROR) << "getLatch must only be called on child context"; | 380 LOG(ERROR) << "getLatch must only be called on child context"; |
| 367 synthesizeGLError(GL_INVALID_OPERATION); | 381 synthesizeGLError(GL_INVALID_OPERATION); |
| 368 *latch_id = gpu::kInvalidLatchId; | 382 *latch_id = gpu::kInvalidLatchId; |
| 369 } | 383 } |
| 370 } | 384 } |
| 371 | 385 |
| 372 void WebGraphicsContext3DCommandBufferImpl::waitLatchCHROMIUM( | 386 void WebGraphicsContext3DCommandBufferImpl::waitLatchCHROMIUM( |
| 373 WGC3Duint latch_id) | 387 WGC3Duint latch_id) |
| 374 { | 388 { |
| 375 makeContextCurrent(); | 389 localMakeContextCurrent(); |
| 376 glWaitLatchCHROMIUM(latch_id); | 390 CALL_GL_IMPL(WaitLatchCHROMIUM)(latch_id); |
| 377 } | 391 } |
| 378 | 392 |
| 379 void WebGraphicsContext3DCommandBufferImpl::setLatchCHROMIUM( | 393 void WebGraphicsContext3DCommandBufferImpl::setLatchCHROMIUM( |
| 380 WGC3Duint latch_id) | 394 WGC3Duint latch_id) |
| 381 { | 395 { |
| 382 makeContextCurrent(); | 396 localMakeContextCurrent(); |
| 383 glSetLatchCHROMIUM(latch_id); | 397 CALL_GL_IMPL(SetLatchCHROMIUM)(latch_id); |
| 384 glFlush(); // required to ensure set command is sent to GPU process | 398 // required to ensure set command is sent to GPU process |
| 399 CALL_GL_IMPL(Flush)(); | |
| 385 } | 400 } |
| 386 | 401 |
| 387 void WebGraphicsContext3DCommandBufferImpl:: | 402 void WebGraphicsContext3DCommandBufferImpl:: |
| 388 rateLimitOffscreenContextCHROMIUM() { | 403 rateLimitOffscreenContextCHROMIUM() { |
| 389 makeContextCurrent(); | 404 localMakeContextCurrent(); |
| 390 glRateLimitOffscreenContextCHROMIUM(); | 405 CALL_GL_IMPL(RateLimitOffscreenContextCHROMIUM)(); |
| 391 } | 406 } |
| 392 | 407 |
| 393 WebKit::WebString WebGraphicsContext3DCommandBufferImpl:: | 408 WebKit::WebString WebGraphicsContext3DCommandBufferImpl:: |
| 394 getRequestableExtensionsCHROMIUM() { | 409 getRequestableExtensionsCHROMIUM() { |
| 395 makeContextCurrent(); | 410 localMakeContextCurrent(); |
| 396 return WebKit::WebString::fromUTF8(glGetRequestableExtensionsCHROMIUM()); | 411 return WebKit::WebString::fromUTF8( |
| 412 CALL_GL_IMPL(GetRequestableExtensionsCHROMIUM)()); | |
| 397 } | 413 } |
| 398 | 414 |
| 399 void WebGraphicsContext3DCommandBufferImpl::requestExtensionCHROMIUM( | 415 void WebGraphicsContext3DCommandBufferImpl::requestExtensionCHROMIUM( |
| 400 const char* extension) { | 416 const char* extension) { |
| 401 makeContextCurrent(); | 417 localMakeContextCurrent(); |
| 402 glRequestExtensionCHROMIUM(extension); | 418 CALL_GL_IMPL(RequestExtensionCHROMIUM)(extension); |
| 403 } | 419 } |
| 404 | 420 |
| 405 void WebGraphicsContext3DCommandBufferImpl::blitFramebufferCHROMIUM( | 421 void WebGraphicsContext3DCommandBufferImpl::blitFramebufferCHROMIUM( |
| 406 WGC3Dint srcX0, WGC3Dint srcY0, WGC3Dint srcX1, WGC3Dint srcY1, | 422 WGC3Dint srcX0, WGC3Dint srcY0, WGC3Dint srcX1, WGC3Dint srcY1, |
| 407 WGC3Dint dstX0, WGC3Dint dstY0, WGC3Dint dstX1, WGC3Dint dstY1, | 423 WGC3Dint dstX0, WGC3Dint dstY0, WGC3Dint dstX1, WGC3Dint dstY1, |
| 408 WGC3Dbitfield mask, WGC3Denum filter) { | 424 WGC3Dbitfield mask, WGC3Denum filter) { |
| 409 makeContextCurrent(); | 425 localMakeContextCurrent(); |
| 410 glBlitFramebufferEXT(srcX0, srcY0, srcX1, srcY1, | 426 CALL_GL_IMPL(BlitFramebufferEXT)( |
| 411 dstX0, dstY0, dstX1, dstY1, | 427 srcX0, srcY0, srcX1, srcY1, |
| 412 mask, filter); | 428 dstX0, dstY0, dstX1, dstY1, |
| 429 mask, filter); | |
| 413 } | 430 } |
| 414 | 431 |
| 415 void WebGraphicsContext3DCommandBufferImpl:: | 432 void WebGraphicsContext3DCommandBufferImpl:: |
| 416 renderbufferStorageMultisampleCHROMIUM( | 433 renderbufferStorageMultisampleCHROMIUM( |
| 417 WGC3Denum target, WGC3Dsizei samples, WGC3Denum internalformat, | 434 WGC3Denum target, WGC3Dsizei samples, WGC3Denum internalformat, |
| 418 WGC3Dsizei width, WGC3Dsizei height) { | 435 WGC3Dsizei width, WGC3Dsizei height) { |
| 419 makeContextCurrent(); | 436 localMakeContextCurrent(); |
| 420 glRenderbufferStorageMultisampleEXT(target, samples, internalformat, | 437 CALL_GL_IMPL(RenderbufferStorageMultisampleEXT)( |
| 421 width, height); | 438 target, samples, internalformat, width, height); |
| 422 } | 439 } |
| 423 | 440 |
| 424 // Helper macros to reduce the amount of code. | 441 // Helper macros to reduce the amount of code. |
| 425 | 442 |
| 426 #define DELEGATE_TO_GL(name, glname) \ | 443 #define DELEGATE_TO_GL(name, glname) \ |
| 427 void WebGraphicsContext3DCommandBufferImpl::name() { \ | 444 void WebGraphicsContext3DCommandBufferImpl::name() { \ |
| 428 makeContextCurrent(); \ | 445 localMakeContextCurrent(); \ |
| 429 gl##glname(); \ | 446 CALL_GL_IMPL(glname)(); \ |
| 430 } | 447 } |
| 431 | 448 |
| 432 #define DELEGATE_TO_GL_1(name, glname, t1) \ | 449 #define DELEGATE_TO_GL_1(name, glname, t1) \ |
| 433 void WebGraphicsContext3DCommandBufferImpl::name(t1 a1) { \ | 450 void WebGraphicsContext3DCommandBufferImpl::name(t1 a1) { \ |
| 434 makeContextCurrent(); \ | 451 localMakeContextCurrent(); \ |
| 435 gl##glname(a1); \ | 452 CALL_GL_IMPL(glname)(a1); \ |
| 436 } | 453 } |
| 437 | 454 |
| 438 #define DELEGATE_TO_GL_1R(name, glname, t1, rt) \ | 455 #define DELEGATE_TO_GL_1R(name, glname, t1, rt) \ |
| 439 rt WebGraphicsContext3DCommandBufferImpl::name(t1 a1) { \ | 456 rt WebGraphicsContext3DCommandBufferImpl::name(t1 a1) { \ |
| 440 makeContextCurrent(); \ | 457 localMakeContextCurrent(); \ |
| 441 return gl##glname(a1); \ | 458 return CALL_GL_IMPL(glname)(a1); \ |
| 442 } | 459 } |
| 443 | 460 |
| 444 #define DELEGATE_TO_GL_1RB(name, glname, t1, rt) \ | 461 #define DELEGATE_TO_GL_1RB(name, glname, t1, rt) \ |
| 445 rt WebGraphicsContext3DCommandBufferImpl::name(t1 a1) { \ | 462 rt WebGraphicsContext3DCommandBufferImpl::name(t1 a1) { \ |
| 446 makeContextCurrent(); \ | 463 localMakeContextCurrent(); \ |
| 447 return gl##glname(a1) ? true : false; \ | 464 return CALL_GL_IMPL(glname)(a1) ? true : false; \ |
| 448 } | 465 } |
| 449 | 466 |
| 450 #define DELEGATE_TO_GL_2(name, glname, t1, t2) \ | 467 #define DELEGATE_TO_GL_2(name, glname, t1, t2) \ |
| 451 void WebGraphicsContext3DCommandBufferImpl::name(t1 a1, t2 a2) { \ | 468 void WebGraphicsContext3DCommandBufferImpl::name(t1 a1, t2 a2) { \ |
| 452 makeContextCurrent(); \ | 469 localMakeContextCurrent(); \ |
| 453 gl##glname(a1, a2); \ | 470 CALL_GL_IMPL(glname)(a1, a2); \ |
| 454 } | 471 } |
| 455 | 472 |
| 456 #define DELEGATE_TO_GL_2R(name, glname, t1, t2, rt) \ | 473 #define DELEGATE_TO_GL_2R(name, glname, t1, t2, rt) \ |
| 457 rt WebGraphicsContext3DCommandBufferImpl::name(t1 a1, t2 a2) { \ | 474 rt WebGraphicsContext3DCommandBufferImpl::name(t1 a1, t2 a2) { \ |
| 458 makeContextCurrent(); \ | 475 localMakeContextCurrent(); \ |
| 459 return gl##glname(a1, a2); \ | 476 return CALL_GL_IMPL(glname)(a1, a2); \ |
| 460 } | 477 } |
| 461 | 478 |
| 462 #define DELEGATE_TO_GL_3(name, glname, t1, t2, t3) \ | 479 #define DELEGATE_TO_GL_3(name, glname, t1, t2, t3) \ |
| 463 void WebGraphicsContext3DCommandBufferImpl::name(t1 a1, t2 a2, t3 a3) { \ | 480 void WebGraphicsContext3DCommandBufferImpl::name(t1 a1, t2 a2, t3 a3) { \ |
| 464 makeContextCurrent(); \ | 481 localMakeContextCurrent(); \ |
| 465 gl##glname(a1, a2, a3); \ | 482 CALL_GL_IMPL(glname)(a1, a2, a3); \ |
| 466 } | 483 } |
| 467 | 484 |
| 468 #define DELEGATE_TO_GL_4(name, glname, t1, t2, t3, t4) \ | 485 #define DELEGATE_TO_GL_4(name, glname, t1, t2, t3, t4) \ |
| 469 void WebGraphicsContext3DCommandBufferImpl::name(t1 a1, t2 a2, t3 a3, t4 a4) { \ | 486 void WebGraphicsContext3DCommandBufferImpl::name(t1 a1, t2 a2, t3 a3, t4 a4) { \ |
| 470 makeContextCurrent(); \ | 487 localMakeContextCurrent(); \ |
| 471 gl##glname(a1, a2, a3, a4); \ | 488 CALL_GL_IMPL(glname)(a1, a2, a3, a4); \ |
| 472 } | 489 } |
| 473 | 490 |
| 474 #define DELEGATE_TO_GL_5(name, glname, t1, t2, t3, t4, t5) \ | 491 #define DELEGATE_TO_GL_5(name, glname, t1, t2, t3, t4, t5) \ |
| 475 void WebGraphicsContext3DCommandBufferImpl::name(t1 a1, t2 a2, t3 a3, \ | 492 void WebGraphicsContext3DCommandBufferImpl::name(t1 a1, t2 a2, t3 a3, \ |
| 476 t4 a4, t5 a5) { \ | 493 t4 a4, t5 a5) { \ |
| 477 makeContextCurrent(); \ | 494 localMakeContextCurrent(); \ |
| 478 gl##glname(a1, a2, a3, a4, a5); \ | 495 CALL_GL_IMPL(glname)(a1, a2, a3, a4, a5); \ |
| 479 } | 496 } |
| 480 | 497 |
| 481 #define DELEGATE_TO_GL_6(name, glname, t1, t2, t3, t4, t5, t6) \ | 498 #define DELEGATE_TO_GL_6(name, glname, t1, t2, t3, t4, t5, t6) \ |
| 482 void WebGraphicsContext3DCommandBufferImpl::name(t1 a1, t2 a2, t3 a3, \ | 499 void WebGraphicsContext3DCommandBufferImpl::name(t1 a1, t2 a2, t3 a3, \ |
| 483 t4 a4, t5 a5, t6 a6) { \ | 500 t4 a4, t5 a5, t6 a6) { \ |
| 484 makeContextCurrent(); \ | 501 localMakeContextCurrent(); \ |
| 485 gl##glname(a1, a2, a3, a4, a5, a6); \ | 502 CALL_GL_IMPL(glname)(a1, a2, a3, a4, a5, a6); \ |
| 486 } | 503 } |
| 487 | 504 |
| 488 #define DELEGATE_TO_GL_7(name, glname, t1, t2, t3, t4, t5, t6, t7) \ | 505 #define DELEGATE_TO_GL_7(name, glname, t1, t2, t3, t4, t5, t6, t7) \ |
| 489 void WebGraphicsContext3DCommandBufferImpl::name(t1 a1, t2 a2, t3 a3, \ | 506 void WebGraphicsContext3DCommandBufferImpl::name(t1 a1, t2 a2, t3 a3, \ |
| 490 t4 a4, t5 a5, t6 a6, t7 a7) { \ | 507 t4 a4, t5 a5, t6 a6, t7 a7) { \ |
| 491 makeContextCurrent(); \ | 508 localMakeContextCurrent(); \ |
| 492 gl##glname(a1, a2, a3, a4, a5, a6, a7); \ | 509 CALL_GL_IMPL(glname)(a1, a2, a3, a4, a5, a6, a7); \ |
| 493 } | 510 } |
| 494 | 511 |
| 495 #define DELEGATE_TO_GL_8(name, glname, t1, t2, t3, t4, t5, t6, t7, t8) \ | 512 #define DELEGATE_TO_GL_8(name, glname, t1, t2, t3, t4, t5, t6, t7, t8) \ |
| 496 void WebGraphicsContext3DCommandBufferImpl::name(t1 a1, t2 a2, t3 a3, \ | 513 void WebGraphicsContext3DCommandBufferImpl::name(t1 a1, t2 a2, t3 a3, \ |
| 497 t4 a4, t5 a5, t6 a6, \ | 514 t4 a4, t5 a5, t6 a6, \ |
| 498 t7 a7, t8 a8) { \ | 515 t7 a7, t8 a8) { \ |
| 499 makeContextCurrent(); \ | 516 localMakeContextCurrent(); \ |
| 500 gl##glname(a1, a2, a3, a4, a5, a6, a7, a8); \ | 517 CALL_GL_IMPL(glname)(a1, a2, a3, a4, a5, a6, a7, a8); \ |
| 501 } | 518 } |
| 502 | 519 |
| 503 #define DELEGATE_TO_GL_9(name, glname, t1, t2, t3, t4, t5, t6, t7, t8, t9) \ | 520 #define DELEGATE_TO_GL_9(name, glname, t1, t2, t3, t4, t5, t6, t7, t8, t9) \ |
| 504 void WebGraphicsContext3DCommandBufferImpl::name(t1 a1, t2 a2, t3 a3, \ | 521 void WebGraphicsContext3DCommandBufferImpl::name(t1 a1, t2 a2, t3 a3, \ |
| 505 t4 a4, t5 a5, t6 a6, \ | 522 t4 a4, t5 a5, t6 a6, \ |
| 506 t7 a7, t8 a8, t9 a9) { \ | 523 t7 a7, t8 a8, t9 a9) { \ |
| 507 makeContextCurrent(); \ | 524 localMakeContextCurrent(); \ |
| 508 gl##glname(a1, a2, a3, a4, a5, a6, a7, a8, a9); \ | 525 CALL_GL_IMPL(glname)(a1, a2, a3, a4, a5, a6, a7, a8, a9); \ |
| 509 } | 526 } |
| 510 | 527 |
| 511 DELEGATE_TO_GL_1(activeTexture, ActiveTexture, WGC3Denum) | 528 DELEGATE_TO_GL_1(activeTexture, ActiveTexture, WGC3Denum) |
| 512 | 529 |
| 513 DELEGATE_TO_GL_2(attachShader, AttachShader, WebGLId, WebGLId) | 530 DELEGATE_TO_GL_2(attachShader, AttachShader, WebGLId, WebGLId) |
| 514 | 531 |
| 515 DELEGATE_TO_GL_3(bindAttribLocation, BindAttribLocation, WebGLId, | 532 DELEGATE_TO_GL_3(bindAttribLocation, BindAttribLocation, WebGLId, |
| 516 WGC3Duint, const WGC3Dchar*) | 533 WGC3Duint, const WGC3Dchar*) |
| 517 | 534 |
| 518 DELEGATE_TO_GL_2(bindBuffer, BindBuffer, WGC3Denum, WebGLId) | 535 DELEGATE_TO_GL_2(bindBuffer, BindBuffer, WGC3Denum, WebGLId) |
| 519 | 536 |
| 520 void WebGraphicsContext3DCommandBufferImpl::bindFramebuffer( | 537 void WebGraphicsContext3DCommandBufferImpl::bindFramebuffer( |
| 521 WGC3Denum target, | 538 WGC3Denum target, |
| 522 WebGLId framebuffer) { | 539 WebGLId framebuffer) { |
| 523 makeContextCurrent(); | 540 localMakeContextCurrent(); |
| 524 glBindFramebuffer(target, framebuffer); | 541 CALL_GL_IMPL(BindFramebuffer)(target, framebuffer); |
| 525 bound_fbo_ = framebuffer; | 542 bound_fbo_ = framebuffer; |
| 526 } | 543 } |
| 527 | 544 |
| 528 DELEGATE_TO_GL_2(bindRenderbuffer, BindRenderbuffer, WGC3Denum, WebGLId) | 545 DELEGATE_TO_GL_2(bindRenderbuffer, BindRenderbuffer, WGC3Denum, WebGLId) |
| 529 | 546 |
| 530 DELEGATE_TO_GL_2(bindTexture, BindTexture, WGC3Denum, WebGLId) | 547 DELEGATE_TO_GL_2(bindTexture, BindTexture, WGC3Denum, WebGLId) |
| 531 | 548 |
| 532 DELEGATE_TO_GL_4(blendColor, BlendColor, | 549 DELEGATE_TO_GL_4(blendColor, BlendColor, |
| 533 WGC3Dclampf, WGC3Dclampf, WGC3Dclampf, WGC3Dclampf) | 550 WGC3Dclampf, WGC3Dclampf, WGC3Dclampf, WGC3Dclampf) |
| 534 | 551 |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 587 | 604 |
| 588 DELEGATE_TO_GL_1(disableVertexAttribArray, DisableVertexAttribArray, | 605 DELEGATE_TO_GL_1(disableVertexAttribArray, DisableVertexAttribArray, |
| 589 WGC3Duint) | 606 WGC3Duint) |
| 590 | 607 |
| 591 DELEGATE_TO_GL_3(drawArrays, DrawArrays, WGC3Denum, WGC3Dint, WGC3Dsizei) | 608 DELEGATE_TO_GL_3(drawArrays, DrawArrays, WGC3Denum, WGC3Dint, WGC3Dsizei) |
| 592 | 609 |
| 593 void WebGraphicsContext3DCommandBufferImpl::drawElements(WGC3Denum mode, | 610 void WebGraphicsContext3DCommandBufferImpl::drawElements(WGC3Denum mode, |
| 594 WGC3Dsizei count, | 611 WGC3Dsizei count, |
| 595 WGC3Denum type, | 612 WGC3Denum type, |
| 596 WGC3Dintptr offset) { | 613 WGC3Dintptr offset) { |
| 597 makeContextCurrent(); | 614 localMakeContextCurrent(); |
| 598 glDrawElements(mode, count, type, | 615 CALL_GL_IMPL(DrawElements)( |
| 599 reinterpret_cast<void*>(static_cast<intptr_t>(offset))); | 616 mode, count, type, |
| 617 reinterpret_cast<void*>(static_cast<intptr_t>(offset))); | |
| 600 } | 618 } |
| 601 | 619 |
| 602 DELEGATE_TO_GL_1(enable, Enable, WGC3Denum) | 620 DELEGATE_TO_GL_1(enable, Enable, WGC3Denum) |
| 603 | 621 |
| 604 DELEGATE_TO_GL_1(enableVertexAttribArray, EnableVertexAttribArray, | 622 DELEGATE_TO_GL_1(enableVertexAttribArray, EnableVertexAttribArray, |
| 605 WGC3Duint) | 623 WGC3Duint) |
| 606 | 624 |
| 607 DELEGATE_TO_GL(finish, Finish) | 625 DELEGATE_TO_GL(finish, Finish) |
| 608 | 626 |
| 609 DELEGATE_TO_GL(flush, Flush) | 627 DELEGATE_TO_GL(flush, Flush) |
| 610 | 628 |
| 611 DELEGATE_TO_GL_4(framebufferRenderbuffer, FramebufferRenderbuffer, | 629 DELEGATE_TO_GL_4(framebufferRenderbuffer, FramebufferRenderbuffer, |
| 612 WGC3Denum, WGC3Denum, WGC3Denum, WebGLId) | 630 WGC3Denum, WGC3Denum, WGC3Denum, WebGLId) |
| 613 | 631 |
| 614 DELEGATE_TO_GL_5(framebufferTexture2D, FramebufferTexture2D, | 632 DELEGATE_TO_GL_5(framebufferTexture2D, FramebufferTexture2D, |
| 615 WGC3Denum, WGC3Denum, WGC3Denum, WebGLId, WGC3Dint) | 633 WGC3Denum, WGC3Denum, WGC3Denum, WebGLId, WGC3Dint) |
| 616 | 634 |
| 617 DELEGATE_TO_GL_1(frontFace, FrontFace, WGC3Denum) | 635 DELEGATE_TO_GL_1(frontFace, FrontFace, WGC3Denum) |
| 618 | 636 |
| 619 DELEGATE_TO_GL_1(generateMipmap, GenerateMipmap, WGC3Denum) | 637 DELEGATE_TO_GL_1(generateMipmap, GenerateMipmap, WGC3Denum) |
| 620 | 638 |
| 621 bool WebGraphicsContext3DCommandBufferImpl::getActiveAttrib( | 639 bool WebGraphicsContext3DCommandBufferImpl::getActiveAttrib( |
| 622 WebGLId program, WGC3Duint index, ActiveInfo& info) { | 640 WebGLId program, WGC3Duint index, ActiveInfo& info) { |
| 623 makeContextCurrent(); | 641 localMakeContextCurrent(); |
| 624 if (!program) { | 642 if (!program) { |
| 625 synthesizeGLError(GL_INVALID_VALUE); | 643 synthesizeGLError(GL_INVALID_VALUE); |
| 626 return false; | 644 return false; |
| 627 } | 645 } |
| 628 GLint max_name_length = -1; | 646 GLint max_name_length = -1; |
| 629 glGetProgramiv(program, GL_ACTIVE_ATTRIBUTE_MAX_LENGTH, &max_name_length); | 647 CALL_GL_IMPL(GetProgramiv)( |
| 648 program, GL_ACTIVE_ATTRIBUTE_MAX_LENGTH, &max_name_length); | |
| 630 if (max_name_length < 0) | 649 if (max_name_length < 0) |
| 631 return false; | 650 return false; |
| 632 scoped_array<GLchar> name(new GLchar[max_name_length]); | 651 scoped_array<GLchar> name(new GLchar[max_name_length]); |
| 633 if (!name.get()) { | 652 if (!name.get()) { |
| 634 synthesizeGLError(GL_OUT_OF_MEMORY); | 653 synthesizeGLError(GL_OUT_OF_MEMORY); |
| 635 return false; | 654 return false; |
| 636 } | 655 } |
| 637 GLsizei length = 0; | 656 GLsizei length = 0; |
| 638 GLint size = -1; | 657 GLint size = -1; |
| 639 GLenum type = 0; | 658 GLenum type = 0; |
| 640 glGetActiveAttrib(program, index, max_name_length, | 659 CALL_GL_IMPL(GetActiveAttrib)( |
| 641 &length, &size, &type, name.get()); | 660 program, index, max_name_length, &length, &size, &type, name.get()); |
| 642 if (size < 0) { | 661 if (size < 0) { |
| 643 return false; | 662 return false; |
| 644 } | 663 } |
| 645 info.name = WebKit::WebString::fromUTF8(name.get(), length); | 664 info.name = WebKit::WebString::fromUTF8(name.get(), length); |
| 646 info.type = type; | 665 info.type = type; |
| 647 info.size = size; | 666 info.size = size; |
| 648 return true; | 667 return true; |
| 649 } | 668 } |
| 650 | 669 |
| 651 bool WebGraphicsContext3DCommandBufferImpl::getActiveUniform( | 670 bool WebGraphicsContext3DCommandBufferImpl::getActiveUniform( |
| 652 WebGLId program, WGC3Duint index, ActiveInfo& info) { | 671 WebGLId program, WGC3Duint index, ActiveInfo& info) { |
| 653 makeContextCurrent(); | 672 localMakeContextCurrent(); |
| 654 GLint max_name_length = -1; | 673 GLint max_name_length = -1; |
| 655 glGetProgramiv(program, GL_ACTIVE_UNIFORM_MAX_LENGTH, &max_name_length); | 674 CALL_GL_IMPL(GetProgramiv)( |
| 675 program, GL_ACTIVE_UNIFORM_MAX_LENGTH, &max_name_length); | |
| 656 if (max_name_length < 0) | 676 if (max_name_length < 0) |
| 657 return false; | 677 return false; |
| 658 scoped_array<GLchar> name(new GLchar[max_name_length]); | 678 scoped_array<GLchar> name(new GLchar[max_name_length]); |
| 659 if (!name.get()) { | 679 if (!name.get()) { |
| 660 synthesizeGLError(GL_OUT_OF_MEMORY); | 680 synthesizeGLError(GL_OUT_OF_MEMORY); |
| 661 return false; | 681 return false; |
| 662 } | 682 } |
| 663 GLsizei length = 0; | 683 GLsizei length = 0; |
| 664 GLint size = -1; | 684 GLint size = -1; |
| 665 GLenum type = 0; | 685 GLenum type = 0; |
| 666 glGetActiveUniform(program, index, max_name_length, | 686 CALL_GL_IMPL(GetActiveUniform)( |
| 667 &length, &size, &type, name.get()); | 687 program, index, max_name_length, &length, &size, &type, name.get()); |
| 668 if (size < 0) { | 688 if (size < 0) { |
| 669 return false; | 689 return false; |
| 670 } | 690 } |
| 671 info.name = WebKit::WebString::fromUTF8(name.get(), length); | 691 info.name = WebKit::WebString::fromUTF8(name.get(), length); |
| 672 info.type = type; | 692 info.type = type; |
| 673 info.size = size; | 693 info.size = size; |
| 674 return true; | 694 return true; |
| 675 } | 695 } |
| 676 | 696 |
| 677 DELEGATE_TO_GL_4(getAttachedShaders, GetAttachedShaders, | 697 DELEGATE_TO_GL_4(getAttachedShaders, GetAttachedShaders, |
| (...skipping 13 matching lines...) Expand all Loading... | |
| 691 } | 711 } |
| 692 | 712 |
| 693 WGC3Denum WebGraphicsContext3DCommandBufferImpl::getError() { | 713 WGC3Denum WebGraphicsContext3DCommandBufferImpl::getError() { |
| 694 if (!synthetic_errors_.empty()) { | 714 if (!synthetic_errors_.empty()) { |
| 695 std::vector<WGC3Denum>::iterator iter = synthetic_errors_.begin(); | 715 std::vector<WGC3Denum>::iterator iter = synthetic_errors_.begin(); |
| 696 WGC3Denum err = *iter; | 716 WGC3Denum err = *iter; |
| 697 synthetic_errors_.erase(iter); | 717 synthetic_errors_.erase(iter); |
| 698 return err; | 718 return err; |
| 699 } | 719 } |
| 700 | 720 |
| 701 makeContextCurrent(); | 721 localMakeContextCurrent(); |
| 702 return glGetError(); | 722 return CALL_GL_IMPL(GetError)(); |
| 703 } | 723 } |
| 704 | 724 |
| 705 bool WebGraphicsContext3DCommandBufferImpl::isContextLost() { | 725 bool WebGraphicsContext3DCommandBufferImpl::isContextLost() { |
| 706 return context_->IsCommandBufferContextLost(); | 726 return context_->IsCommandBufferContextLost(); |
| 707 } | 727 } |
| 708 | 728 |
| 709 DELEGATE_TO_GL_2(getFloatv, GetFloatv, WGC3Denum, WGC3Dfloat*) | 729 DELEGATE_TO_GL_2(getFloatv, GetFloatv, WGC3Denum, WGC3Dfloat*) |
| 710 | 730 |
| 711 DELEGATE_TO_GL_4(getFramebufferAttachmentParameteriv, | 731 DELEGATE_TO_GL_4(getFramebufferAttachmentParameteriv, |
| 712 GetFramebufferAttachmentParameteriv, | 732 GetFramebufferAttachmentParameteriv, |
| 713 WGC3Denum, WGC3Denum, WGC3Denum, WGC3Dint*) | 733 WGC3Denum, WGC3Denum, WGC3Denum, WGC3Dint*) |
| 714 | 734 |
| 715 DELEGATE_TO_GL_2(getIntegerv, GetIntegerv, WGC3Denum, WGC3Dint*) | 735 DELEGATE_TO_GL_2(getIntegerv, GetIntegerv, WGC3Denum, WGC3Dint*) |
| 716 | 736 |
| 717 DELEGATE_TO_GL_3(getProgramiv, GetProgramiv, WebGLId, WGC3Denum, WGC3Dint*) | 737 DELEGATE_TO_GL_3(getProgramiv, GetProgramiv, WebGLId, WGC3Denum, WGC3Dint*) |
| 718 | 738 |
| 719 WebKit::WebString WebGraphicsContext3DCommandBufferImpl::getProgramInfoLog( | 739 WebKit::WebString WebGraphicsContext3DCommandBufferImpl::getProgramInfoLog( |
| 720 WebGLId program) { | 740 WebGLId program) { |
| 721 makeContextCurrent(); | 741 localMakeContextCurrent(); |
| 722 GLint logLength = 0; | 742 GLint logLength = 0; |
| 723 glGetProgramiv(program, GL_INFO_LOG_LENGTH, &logLength); | 743 CALL_GL_IMPL(GetProgramiv)(program, GL_INFO_LOG_LENGTH, &logLength); |
| 724 if (!logLength) | 744 if (!logLength) |
| 725 return WebKit::WebString(); | 745 return WebKit::WebString(); |
| 726 scoped_array<GLchar> log(new GLchar[logLength]); | 746 scoped_array<GLchar> log(new GLchar[logLength]); |
| 727 if (!log.get()) | 747 if (!log.get()) |
| 728 return WebKit::WebString(); | 748 return WebKit::WebString(); |
| 729 GLsizei returnedLogLength = 0; | 749 GLsizei returnedLogLength = 0; |
| 730 glGetProgramInfoLog(program, logLength, &returnedLogLength, log.get()); | 750 CALL_GL_IMPL(GetProgramInfoLog)( |
| 751 program, logLength, &returnedLogLength, log.get()); | |
| 731 DCHECK_EQ(logLength, returnedLogLength + 1); | 752 DCHECK_EQ(logLength, returnedLogLength + 1); |
| 732 WebKit::WebString res = | 753 WebKit::WebString res = |
| 733 WebKit::WebString::fromUTF8(log.get(), returnedLogLength); | 754 WebKit::WebString::fromUTF8(log.get(), returnedLogLength); |
| 734 return res; | 755 return res; |
| 735 } | 756 } |
| 736 | 757 |
| 737 DELEGATE_TO_GL_3(getRenderbufferParameteriv, GetRenderbufferParameteriv, | 758 DELEGATE_TO_GL_3(getRenderbufferParameteriv, GetRenderbufferParameteriv, |
| 738 WGC3Denum, WGC3Denum, WGC3Dint*) | 759 WGC3Denum, WGC3Denum, WGC3Dint*) |
| 739 | 760 |
| 740 DELEGATE_TO_GL_3(getShaderiv, GetShaderiv, WebGLId, WGC3Denum, WGC3Dint*) | 761 DELEGATE_TO_GL_3(getShaderiv, GetShaderiv, WebGLId, WGC3Denum, WGC3Dint*) |
| 741 | 762 |
| 742 WebKit::WebString WebGraphicsContext3DCommandBufferImpl::getShaderInfoLog( | 763 WebKit::WebString WebGraphicsContext3DCommandBufferImpl::getShaderInfoLog( |
| 743 WebGLId shader) { | 764 WebGLId shader) { |
| 744 makeContextCurrent(); | 765 localMakeContextCurrent(); |
| 745 GLint logLength = 0; | 766 GLint logLength = 0; |
| 746 glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &logLength); | 767 CALL_GL_IMPL(GetShaderiv)(shader, GL_INFO_LOG_LENGTH, &logLength); |
| 747 if (!logLength) | 768 if (!logLength) |
| 748 return WebKit::WebString(); | 769 return WebKit::WebString(); |
| 749 scoped_array<GLchar> log(new GLchar[logLength]); | 770 scoped_array<GLchar> log(new GLchar[logLength]); |
| 750 if (!log.get()) | 771 if (!log.get()) |
| 751 return WebKit::WebString(); | 772 return WebKit::WebString(); |
| 752 GLsizei returnedLogLength = 0; | 773 GLsizei returnedLogLength = 0; |
| 753 glGetShaderInfoLog(shader, logLength, &returnedLogLength, log.get()); | 774 CALL_GL_IMPL(GetShaderInfoLog)( |
| 775 shader, logLength, &returnedLogLength, log.get()); | |
| 754 DCHECK_EQ(logLength, returnedLogLength + 1); | 776 DCHECK_EQ(logLength, returnedLogLength + 1); |
| 755 WebKit::WebString res = | 777 WebKit::WebString res = |
| 756 WebKit::WebString::fromUTF8(log.get(), returnedLogLength); | 778 WebKit::WebString::fromUTF8(log.get(), returnedLogLength); |
| 757 return res; | 779 return res; |
| 758 } | 780 } |
| 759 | 781 |
| 760 WebKit::WebString WebGraphicsContext3DCommandBufferImpl::getShaderSource( | 782 WebKit::WebString WebGraphicsContext3DCommandBufferImpl::getShaderSource( |
| 761 WebGLId shader) { | 783 WebGLId shader) { |
| 762 makeContextCurrent(); | 784 localMakeContextCurrent(); |
| 763 GLint logLength = 0; | 785 GLint logLength = 0; |
| 764 glGetShaderiv(shader, GL_SHADER_SOURCE_LENGTH, &logLength); | 786 CALL_GL_IMPL(GetShaderiv)(shader, GL_SHADER_SOURCE_LENGTH, &logLength); |
| 765 if (!logLength) | 787 if (!logLength) |
| 766 return WebKit::WebString(); | 788 return WebKit::WebString(); |
| 767 scoped_array<GLchar> log(new GLchar[logLength]); | 789 scoped_array<GLchar> log(new GLchar[logLength]); |
| 768 if (!log.get()) | 790 if (!log.get()) |
| 769 return WebKit::WebString(); | 791 return WebKit::WebString(); |
| 770 GLsizei returnedLogLength = 0; | 792 GLsizei returnedLogLength = 0; |
| 771 glGetShaderSource(shader, logLength, &returnedLogLength, log.get()); | 793 CALL_GL_IMPL(GetShaderSource)( |
| 794 shader, logLength, &returnedLogLength, log.get()); | |
| 772 DCHECK_EQ(logLength, returnedLogLength + 1); | 795 DCHECK_EQ(logLength, returnedLogLength + 1); |
| 773 WebKit::WebString res = | 796 WebKit::WebString res = |
| 774 WebKit::WebString::fromUTF8(log.get(), returnedLogLength); | 797 WebKit::WebString::fromUTF8(log.get(), returnedLogLength); |
| 775 return res; | 798 return res; |
| 776 } | 799 } |
| 777 | 800 |
| 778 WebKit::WebString WebGraphicsContext3DCommandBufferImpl::getString( | 801 WebKit::WebString WebGraphicsContext3DCommandBufferImpl::getString( |
| 779 WGC3Denum name) { | 802 WGC3Denum name) { |
| 780 makeContextCurrent(); | 803 localMakeContextCurrent(); |
| 781 return WebKit::WebString::fromUTF8( | 804 return WebKit::WebString::fromUTF8( |
| 782 reinterpret_cast<const char*>(glGetString(name))); | 805 reinterpret_cast<const char*>(CALL_GL_IMPL(GetString)(name))); |
| 783 } | 806 } |
| 784 | 807 |
| 785 DELEGATE_TO_GL_3(getTexParameterfv, GetTexParameterfv, | 808 DELEGATE_TO_GL_3(getTexParameterfv, GetTexParameterfv, |
| 786 WGC3Denum, WGC3Denum, WGC3Dfloat*) | 809 WGC3Denum, WGC3Denum, WGC3Dfloat*) |
| 787 | 810 |
| 788 DELEGATE_TO_GL_3(getTexParameteriv, GetTexParameteriv, | 811 DELEGATE_TO_GL_3(getTexParameteriv, GetTexParameteriv, |
| 789 WGC3Denum, WGC3Denum, WGC3Dint*) | 812 WGC3Denum, WGC3Denum, WGC3Dint*) |
| 790 | 813 |
| 791 DELEGATE_TO_GL_3(getUniformfv, GetUniformfv, WebGLId, WGC3Dint, WGC3Dfloat*) | 814 DELEGATE_TO_GL_3(getUniformfv, GetUniformfv, WebGLId, WGC3Dint, WGC3Dfloat*) |
| 792 | 815 |
| 793 DELEGATE_TO_GL_3(getUniformiv, GetUniformiv, WebGLId, WGC3Dint, WGC3Dint*) | 816 DELEGATE_TO_GL_3(getUniformiv, GetUniformiv, WebGLId, WGC3Dint, WGC3Dint*) |
| 794 | 817 |
| 795 DELEGATE_TO_GL_2R(getUniformLocation, GetUniformLocation, | 818 DELEGATE_TO_GL_2R(getUniformLocation, GetUniformLocation, |
| 796 WebGLId, const WGC3Dchar*, WGC3Dint) | 819 WebGLId, const WGC3Dchar*, WGC3Dint) |
| 797 | 820 |
| 798 DELEGATE_TO_GL_3(getVertexAttribfv, GetVertexAttribfv, | 821 DELEGATE_TO_GL_3(getVertexAttribfv, GetVertexAttribfv, |
| 799 WGC3Duint, WGC3Denum, WGC3Dfloat*) | 822 WGC3Duint, WGC3Denum, WGC3Dfloat*) |
| 800 | 823 |
| 801 DELEGATE_TO_GL_3(getVertexAttribiv, GetVertexAttribiv, | 824 DELEGATE_TO_GL_3(getVertexAttribiv, GetVertexAttribiv, |
| 802 WGC3Duint, WGC3Denum, WGC3Dint*) | 825 WGC3Duint, WGC3Denum, WGC3Dint*) |
| 803 | 826 |
| 804 WGC3Dsizeiptr WebGraphicsContext3DCommandBufferImpl::getVertexAttribOffset( | 827 WGC3Dsizeiptr WebGraphicsContext3DCommandBufferImpl::getVertexAttribOffset( |
| 805 WGC3Duint index, WGC3Denum pname) { | 828 WGC3Duint index, WGC3Denum pname) { |
| 806 makeContextCurrent(); | 829 localMakeContextCurrent(); |
| 807 GLvoid* value = NULL; | 830 GLvoid* value = NULL; |
| 808 // NOTE: If pname is ever a value that returns more then 1 element | 831 // NOTE: If pname is ever a value that returns more then 1 element |
| 809 // this will corrupt memory. | 832 // this will corrupt memory. |
| 810 glGetVertexAttribPointerv(index, pname, &value); | 833 CALL_GL_IMPL(GetVertexAttribPointerv)(index, pname, &value); |
| 811 return static_cast<WGC3Dsizeiptr>(reinterpret_cast<intptr_t>(value)); | 834 return static_cast<WGC3Dsizeiptr>(reinterpret_cast<intptr_t>(value)); |
| 812 } | 835 } |
| 813 | 836 |
| 814 DELEGATE_TO_GL_2(hint, Hint, WGC3Denum, WGC3Denum) | 837 DELEGATE_TO_GL_2(hint, Hint, WGC3Denum, WGC3Denum) |
| 815 | 838 |
| 816 DELEGATE_TO_GL_1RB(isBuffer, IsBuffer, WebGLId, WGC3Dboolean) | 839 DELEGATE_TO_GL_1RB(isBuffer, IsBuffer, WebGLId, WGC3Dboolean) |
| 817 | 840 |
| 818 DELEGATE_TO_GL_1RB(isEnabled, IsEnabled, WGC3Denum, WGC3Dboolean) | 841 DELEGATE_TO_GL_1RB(isEnabled, IsEnabled, WGC3Denum, WGC3Dboolean) |
| 819 | 842 |
| 820 DELEGATE_TO_GL_1RB(isFramebuffer, IsFramebuffer, WebGLId, WGC3Dboolean) | 843 DELEGATE_TO_GL_1RB(isFramebuffer, IsFramebuffer, WebGLId, WGC3Dboolean) |
| (...skipping 23 matching lines...) Expand all Loading... | |
| 844 | 867 |
| 845 DELEGATE_TO_GL_4(renderbufferStorage, RenderbufferStorage, | 868 DELEGATE_TO_GL_4(renderbufferStorage, RenderbufferStorage, |
| 846 WGC3Denum, WGC3Denum, WGC3Dsizei, WGC3Dsizei) | 869 WGC3Denum, WGC3Denum, WGC3Dsizei, WGC3Dsizei) |
| 847 | 870 |
| 848 DELEGATE_TO_GL_2(sampleCoverage, SampleCoverage, WGC3Dfloat, WGC3Dboolean) | 871 DELEGATE_TO_GL_2(sampleCoverage, SampleCoverage, WGC3Dfloat, WGC3Dboolean) |
| 849 | 872 |
| 850 DELEGATE_TO_GL_4(scissor, Scissor, WGC3Dint, WGC3Dint, WGC3Dsizei, WGC3Dsizei) | 873 DELEGATE_TO_GL_4(scissor, Scissor, WGC3Dint, WGC3Dint, WGC3Dsizei, WGC3Dsizei) |
| 851 | 874 |
| 852 void WebGraphicsContext3DCommandBufferImpl::shaderSource( | 875 void WebGraphicsContext3DCommandBufferImpl::shaderSource( |
| 853 WebGLId shader, const WGC3Dchar* string) { | 876 WebGLId shader, const WGC3Dchar* string) { |
| 854 makeContextCurrent(); | 877 localMakeContextCurrent(); |
| 855 GLint length = strlen(string); | 878 GLint length = strlen(string); |
| 856 glShaderSource(shader, 1, &string, &length); | 879 CALL_GL_IMPL(ShaderSource)(shader, 1, &string, &length); |
| 857 } | 880 } |
| 858 | 881 |
| 859 DELEGATE_TO_GL_3(stencilFunc, StencilFunc, WGC3Denum, WGC3Dint, WGC3Duint) | 882 DELEGATE_TO_GL_3(stencilFunc, StencilFunc, WGC3Denum, WGC3Dint, WGC3Duint) |
| 860 | 883 |
| 861 DELEGATE_TO_GL_4(stencilFuncSeparate, StencilFuncSeparate, | 884 DELEGATE_TO_GL_4(stencilFuncSeparate, StencilFuncSeparate, |
| 862 WGC3Denum, WGC3Denum, WGC3Dint, WGC3Duint) | 885 WGC3Denum, WGC3Denum, WGC3Dint, WGC3Duint) |
| 863 | 886 |
| 864 DELEGATE_TO_GL_1(stencilMask, StencilMask, WGC3Duint) | 887 DELEGATE_TO_GL_1(stencilMask, StencilMask, WGC3Duint) |
| 865 | 888 |
| 866 DELEGATE_TO_GL_2(stencilMaskSeparate, StencilMaskSeparate, | 889 DELEGATE_TO_GL_2(stencilMaskSeparate, StencilMaskSeparate, |
| (...skipping 16 matching lines...) Expand all Loading... | |
| 883 | 906 |
| 884 void WebGraphicsContext3DCommandBufferImpl::texParameteri( | 907 void WebGraphicsContext3DCommandBufferImpl::texParameteri( |
| 885 WGC3Denum target, WGC3Denum pname, WGC3Dint param) { | 908 WGC3Denum target, WGC3Denum pname, WGC3Dint param) { |
| 886 // TODO(kbr): figure out whether the setting of TEXTURE_WRAP_R in | 909 // TODO(kbr): figure out whether the setting of TEXTURE_WRAP_R in |
| 887 // GraphicsContext3D.cpp is strictly necessary to avoid seams at the | 910 // GraphicsContext3D.cpp is strictly necessary to avoid seams at the |
| 888 // edge of cube maps, and, if it is, push it into the GLES2 service | 911 // edge of cube maps, and, if it is, push it into the GLES2 service |
| 889 // side code. | 912 // side code. |
| 890 if (pname == kTextureWrapR) { | 913 if (pname == kTextureWrapR) { |
| 891 return; | 914 return; |
| 892 } | 915 } |
| 893 makeContextCurrent(); | 916 localMakeContextCurrent(); |
| 894 glTexParameteri(target, pname, param); | 917 CALL_GL_IMPL(TexParameteri)(target, pname, param); |
| 895 } | 918 } |
| 896 | 919 |
| 897 DELEGATE_TO_GL_9(texSubImage2D, TexSubImage2D, | 920 DELEGATE_TO_GL_9(texSubImage2D, TexSubImage2D, |
| 898 WGC3Denum, WGC3Dint, WGC3Dint, WGC3Dint, WGC3Dsizei, | 921 WGC3Denum, WGC3Dint, WGC3Dint, WGC3Dint, WGC3Dsizei, |
| 899 WGC3Dsizei, WGC3Denum, WGC3Denum, const void*) | 922 WGC3Dsizei, WGC3Denum, WGC3Denum, const void*) |
| 900 | 923 |
| 901 DELEGATE_TO_GL_2(uniform1f, Uniform1f, WGC3Dint, WGC3Dfloat) | 924 DELEGATE_TO_GL_2(uniform1f, Uniform1f, WGC3Dint, WGC3Dfloat) |
| 902 | 925 |
| 903 DELEGATE_TO_GL_3(uniform1fv, Uniform1fv, WGC3Dint, WGC3Dsizei, | 926 DELEGATE_TO_GL_3(uniform1fv, Uniform1fv, WGC3Dint, WGC3Dsizei, |
| 904 const WGC3Dfloat*) | 927 const WGC3Dfloat*) |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 969 | 992 |
| 970 DELEGATE_TO_GL_5(vertexAttrib4f, VertexAttrib4f, WGC3Duint, | 993 DELEGATE_TO_GL_5(vertexAttrib4f, VertexAttrib4f, WGC3Duint, |
| 971 WGC3Dfloat, WGC3Dfloat, WGC3Dfloat, WGC3Dfloat) | 994 WGC3Dfloat, WGC3Dfloat, WGC3Dfloat, WGC3Dfloat) |
| 972 | 995 |
| 973 DELEGATE_TO_GL_2(vertexAttrib4fv, VertexAttrib4fv, WGC3Duint, | 996 DELEGATE_TO_GL_2(vertexAttrib4fv, VertexAttrib4fv, WGC3Duint, |
| 974 const WGC3Dfloat*) | 997 const WGC3Dfloat*) |
| 975 | 998 |
| 976 void WebGraphicsContext3DCommandBufferImpl::vertexAttribPointer( | 999 void WebGraphicsContext3DCommandBufferImpl::vertexAttribPointer( |
| 977 WGC3Duint index, WGC3Dint size, WGC3Denum type, WGC3Dboolean normalized, | 1000 WGC3Duint index, WGC3Dint size, WGC3Denum type, WGC3Dboolean normalized, |
| 978 WGC3Dsizei stride, WGC3Dintptr offset) { | 1001 WGC3Dsizei stride, WGC3Dintptr offset) { |
| 979 makeContextCurrent(); | 1002 localMakeContextCurrent(); |
| 980 | 1003 |
| 981 glVertexAttribPointer(index, size, type, normalized, stride, | 1004 CALL_GL_IMPL(VertexAttribPointer)( |
| 982 reinterpret_cast<void*>( | 1005 index, size, type, normalized, stride, |
| 983 static_cast<intptr_t>(offset))); | 1006 reinterpret_cast<void*>(static_cast<intptr_t>(offset))); |
| 984 } | 1007 } |
| 985 | 1008 |
| 986 DELEGATE_TO_GL_4(viewport, Viewport, | 1009 DELEGATE_TO_GL_4(viewport, Viewport, |
| 987 WGC3Dint, WGC3Dint, WGC3Dsizei, WGC3Dsizei) | 1010 WGC3Dint, WGC3Dint, WGC3Dsizei, WGC3Dsizei) |
| 988 | 1011 |
| 989 WebGLId WebGraphicsContext3DCommandBufferImpl::createBuffer() { | 1012 WebGLId WebGraphicsContext3DCommandBufferImpl::createBuffer() { |
| 990 makeContextCurrent(); | 1013 localMakeContextCurrent(); |
| 991 GLuint o; | 1014 GLuint o; |
| 992 glGenBuffers(1, &o); | 1015 CALL_GL_IMPL(GenBuffers)(1, &o); |
| 993 return o; | 1016 return o; |
| 994 } | 1017 } |
| 995 | 1018 |
| 996 WebGLId WebGraphicsContext3DCommandBufferImpl::createFramebuffer() { | 1019 WebGLId WebGraphicsContext3DCommandBufferImpl::createFramebuffer() { |
| 997 makeContextCurrent(); | 1020 localMakeContextCurrent(); |
| 998 GLuint o = 0; | 1021 GLuint o = 0; |
| 999 glGenFramebuffers(1, &o); | 1022 CALL_GL_IMPL(GenFramebuffers)(1, &o); |
| 1000 return o; | 1023 return o; |
| 1001 } | 1024 } |
| 1002 | 1025 |
| 1003 WebGLId WebGraphicsContext3DCommandBufferImpl::createProgram() { | 1026 WebGLId WebGraphicsContext3DCommandBufferImpl::createProgram() { |
| 1004 makeContextCurrent(); | 1027 localMakeContextCurrent(); |
| 1005 return glCreateProgram(); | 1028 return CALL_GL_IMPL(CreateProgram)(); |
| 1006 } | 1029 } |
| 1007 | 1030 |
| 1008 WebGLId WebGraphicsContext3DCommandBufferImpl::createRenderbuffer() { | 1031 WebGLId WebGraphicsContext3DCommandBufferImpl::createRenderbuffer() { |
| 1009 makeContextCurrent(); | 1032 localMakeContextCurrent(); |
| 1010 GLuint o; | 1033 GLuint o; |
| 1011 glGenRenderbuffers(1, &o); | 1034 CALL_GL_IMPL(GenRenderbuffers)(1, &o); |
| 1012 return o; | 1035 return o; |
| 1013 } | 1036 } |
| 1014 | 1037 |
| 1015 DELEGATE_TO_GL_1R(createShader, CreateShader, WGC3Denum, WebGLId); | 1038 DELEGATE_TO_GL_1R(createShader, CreateShader, WGC3Denum, WebGLId); |
| 1016 | 1039 |
| 1017 WebGLId WebGraphicsContext3DCommandBufferImpl::createTexture() { | 1040 WebGLId WebGraphicsContext3DCommandBufferImpl::createTexture() { |
| 1018 makeContextCurrent(); | 1041 localMakeContextCurrent(); |
| 1019 GLuint o; | 1042 GLuint o; |
| 1020 glGenTextures(1, &o); | 1043 CALL_GL_IMPL(GenTextures)(1, &o); |
| 1021 return o; | 1044 return o; |
| 1022 } | 1045 } |
| 1023 | 1046 |
| 1024 void WebGraphicsContext3DCommandBufferImpl::deleteBuffer(WebGLId buffer) { | 1047 void WebGraphicsContext3DCommandBufferImpl::deleteBuffer(WebGLId buffer) { |
| 1025 makeContextCurrent(); | 1048 localMakeContextCurrent(); |
| 1026 glDeleteBuffers(1, &buffer); | 1049 CALL_GL_IMPL(DeleteBuffers)(1, &buffer); |
| 1027 } | 1050 } |
| 1028 | 1051 |
| 1029 void WebGraphicsContext3DCommandBufferImpl::deleteFramebuffer( | 1052 void WebGraphicsContext3DCommandBufferImpl::deleteFramebuffer( |
| 1030 WebGLId framebuffer) { | 1053 WebGLId framebuffer) { |
| 1031 makeContextCurrent(); | 1054 localMakeContextCurrent(); |
| 1032 glDeleteFramebuffers(1, &framebuffer); | 1055 CALL_GL_IMPL(DeleteFramebuffers)(1, &framebuffer); |
| 1033 } | 1056 } |
| 1034 | 1057 |
| 1035 void WebGraphicsContext3DCommandBufferImpl::deleteProgram(WebGLId program) { | 1058 void WebGraphicsContext3DCommandBufferImpl::deleteProgram(WebGLId program) { |
| 1036 makeContextCurrent(); | 1059 localMakeContextCurrent(); |
| 1037 glDeleteProgram(program); | 1060 CALL_GL_IMPL(DeleteProgram)(program); |
| 1038 } | 1061 } |
| 1039 | 1062 |
| 1040 void WebGraphicsContext3DCommandBufferImpl::deleteRenderbuffer( | 1063 void WebGraphicsContext3DCommandBufferImpl::deleteRenderbuffer( |
| 1041 WebGLId renderbuffer) { | 1064 WebGLId renderbuffer) { |
| 1042 makeContextCurrent(); | 1065 localMakeContextCurrent(); |
| 1043 glDeleteRenderbuffers(1, &renderbuffer); | 1066 CALL_GL_IMPL(DeleteRenderbuffers)(1, &renderbuffer); |
| 1044 } | 1067 } |
| 1045 | 1068 |
| 1046 void WebGraphicsContext3DCommandBufferImpl::deleteShader(WebGLId shader) { | 1069 void WebGraphicsContext3DCommandBufferImpl::deleteShader(WebGLId shader) { |
| 1047 makeContextCurrent(); | 1070 localMakeContextCurrent(); |
| 1048 glDeleteShader(shader); | 1071 CALL_GL_IMPL(DeleteShader)(shader); |
| 1049 } | 1072 } |
| 1050 | 1073 |
| 1051 void WebGraphicsContext3DCommandBufferImpl::deleteTexture(WebGLId texture) { | 1074 void WebGraphicsContext3DCommandBufferImpl::deleteTexture(WebGLId texture) { |
| 1052 makeContextCurrent(); | 1075 localMakeContextCurrent(); |
| 1053 glDeleteTextures(1, &texture); | 1076 CALL_GL_IMPL(DeleteTextures)(1, &texture); |
| 1054 } | 1077 } |
| 1055 | 1078 |
| 1056 void WebGraphicsContext3DCommandBufferImpl::copyTextureToCompositor( | 1079 void WebGraphicsContext3DCommandBufferImpl::copyTextureToCompositor( |
| 1057 WebGLId texture, WebGLId parentTexture) { | 1080 WebGLId texture, WebGLId parentTexture) { |
| 1058 TRACE_EVENT0("gpu", "WebGfxCtx3DCmdBfrImpl::copyTextureToCompositor"); | 1081 TRACE_EVENT0("gpu", "WebGfxCtx3DCmdBfrImpl::copyTextureToCompositor"); |
| 1059 makeContextCurrent(); | 1082 localMakeContextCurrent(); |
| 1060 glCopyTextureToParentTextureCHROMIUM(texture, parentTexture); | 1083 CALL_GL_IMPL(CopyTextureToParentTextureCHROMIUM)(texture, parentTexture); |
| 1061 glFlush(); | 1084 CALL_GL_IMPL(Flush)(); |
| 1062 } | 1085 } |
| 1063 | 1086 |
| 1064 void WebGraphicsContext3DCommandBufferImpl::OnSwapBuffersComplete() { | 1087 void WebGraphicsContext3DCommandBufferImpl::OnSwapBuffersComplete() { |
| 1065 // This may be called after tear-down of the RenderView. | 1088 // This may be called after tear-down of the RenderView. |
| 1066 RenderView* renderview = | 1089 RenderView* renderview = |
| 1067 web_view_ ? RenderView::FromWebView(web_view_) : NULL; | 1090 web_view_ ? RenderView::FromWebView(web_view_) : NULL; |
| 1068 if (renderview) | 1091 if (renderview) |
| 1069 renderview->OnViewContextSwapBuffersComplete(); | 1092 renderview->OnViewContextSwapBuffersComplete(); |
| 1070 } | 1093 } |
| 1071 | 1094 |
| 1072 void WebGraphicsContext3DCommandBufferImpl::setContextLostCallback( | 1095 void WebGraphicsContext3DCommandBufferImpl::setContextLostCallback( |
| 1073 WebGraphicsContext3D::WebGraphicsContextLostCallback* cb) | 1096 WebGraphicsContext3D::WebGraphicsContextLostCallback* cb) |
| 1074 { | 1097 { |
| 1075 context_lost_callback_ = cb; | 1098 context_lost_callback_ = cb; |
| 1076 } | 1099 } |
| 1077 | 1100 |
| 1078 void WebGraphicsContext3DCommandBufferImpl::OnContextLost() { | 1101 void WebGraphicsContext3DCommandBufferImpl::OnContextLost() { |
| 1079 if (context_lost_callback_) { | 1102 if (context_lost_callback_) { |
| 1080 context_lost_callback_->onContextLost(); | 1103 context_lost_callback_->onContextLost(); |
| 1081 } | 1104 } |
| 1082 | 1105 |
| 1083 RenderView* renderview = | 1106 RenderView* renderview = |
| 1084 web_view_ ? RenderView::FromWebView(web_view_) : NULL; | 1107 web_view_ ? RenderView::FromWebView(web_view_) : NULL; |
| 1085 if (renderview) | 1108 if (renderview) |
| 1086 renderview->OnViewContextSwapBuffersAborted(); | 1109 renderview->OnViewContextSwapBuffersAborted(); |
| 1087 } | 1110 } |
| 1088 | 1111 |
| 1089 #endif // defined(ENABLE_GPU) | 1112 #endif // defined(ENABLE_GPU) |
| OLD | NEW |