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

Side by Side Diff: Source/core/html/canvas/WebGLFramebuffer.cpp

Issue 223223003: Re-land "WebGL: Transfer ownership of WebGraphicsContext3D to DrawingBuffer" (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: fix errata on comment Created 6 years, 8 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
« no previous file with comments | « Source/core/html/canvas/WebGLDrawBuffers.cpp ('k') | Source/core/html/canvas/WebGLProgram.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2009 Apple Inc. All rights reserved. 2 * Copyright (C) 2009 Apple Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after
256 PassRefPtr<WebGLFramebuffer> WebGLFramebuffer::create(WebGLRenderingContextBase* ctx) 256 PassRefPtr<WebGLFramebuffer> WebGLFramebuffer::create(WebGLRenderingContextBase* ctx)
257 { 257 {
258 return adoptRef(new WebGLFramebuffer(ctx)); 258 return adoptRef(new WebGLFramebuffer(ctx));
259 } 259 }
260 260
261 WebGLFramebuffer::WebGLFramebuffer(WebGLRenderingContextBase* ctx) 261 WebGLFramebuffer::WebGLFramebuffer(WebGLRenderingContextBase* ctx)
262 : WebGLContextObject(ctx) 262 : WebGLContextObject(ctx)
263 , m_hasEverBeenBound(false) 263 , m_hasEverBeenBound(false)
264 { 264 {
265 ScriptWrappable::init(this); 265 ScriptWrappable::init(this);
266 setObject(ctx->webGraphicsContext3D()->createFramebuffer()); 266 setObject(ctx->webContext()->createFramebuffer());
267 } 267 }
268 268
269 WebGLFramebuffer::~WebGLFramebuffer() 269 WebGLFramebuffer::~WebGLFramebuffer()
270 { 270 {
271 deleteObject(0); 271 deleteObject(0);
272 } 272 }
273 273
274 void WebGLFramebuffer::setAttachmentForBoundFramebuffer(GLenum attachment, GLenu m texTarget, WebGLTexture* texture, GLint level) 274 void WebGLFramebuffer::setAttachmentForBoundFramebuffer(GLenum attachment, GLenu m texTarget, WebGLTexture* texture, GLint level)
275 { 275 {
276 ASSERT(isBound()); 276 ASSERT(isBound());
(...skipping 18 matching lines...) Expand all
295 drawBuffersIfNecessary(false); 295 drawBuffersIfNecessary(false);
296 renderbuffer->onAttached(); 296 renderbuffer->onAttached();
297 } 297 }
298 } 298 }
299 299
300 void WebGLFramebuffer::attach(GLenum attachment, GLenum attachmentPoint) 300 void WebGLFramebuffer::attach(GLenum attachment, GLenum attachmentPoint)
301 { 301 {
302 ASSERT(isBound()); 302 ASSERT(isBound());
303 WebGLAttachment* attachmentObject = getAttachment(attachment); 303 WebGLAttachment* attachmentObject = getAttachment(attachment);
304 if (attachmentObject) 304 if (attachmentObject)
305 attachmentObject->attach(context()->webGraphicsContext3D(), attachmentPo int); 305 attachmentObject->attach(context()->webContext(), attachmentPoint);
306 } 306 }
307 307
308 WebGLSharedObject* WebGLFramebuffer::getAttachmentObject(GLenum attachment) cons t 308 WebGLSharedObject* WebGLFramebuffer::getAttachmentObject(GLenum attachment) cons t
309 { 309 {
310 if (!object()) 310 if (!object())
311 return 0; 311 return 0;
312 WebGLAttachment* attachmentObject = getAttachment(attachment); 312 WebGLAttachment* attachmentObject = getAttachment(attachment);
313 return attachmentObject ? attachmentObject->object() : 0; 313 return attachmentObject ? attachmentObject->object() : 0;
314 } 314 }
315 315
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
406 } 406 }
407 407
408 void WebGLFramebuffer::removeAttachmentFromBoundFramebuffer(GLenum attachment) 408 void WebGLFramebuffer::removeAttachmentFromBoundFramebuffer(GLenum attachment)
409 { 409 {
410 ASSERT(isBound()); 410 ASSERT(isBound());
411 if (!object()) 411 if (!object())
412 return; 412 return;
413 413
414 WebGLAttachment* attachmentObject = getAttachment(attachment); 414 WebGLAttachment* attachmentObject = getAttachment(attachment);
415 if (attachmentObject) { 415 if (attachmentObject) {
416 attachmentObject->onDetached(context()->webGraphicsContext3D()); 416 attachmentObject->onDetached(context()->webContext());
417 m_attachments.remove(attachment); 417 m_attachments.remove(attachment);
418 drawBuffersIfNecessary(false); 418 drawBuffersIfNecessary(false);
419 switch (attachment) { 419 switch (attachment) {
420 case GC3D_DEPTH_STENCIL_ATTACHMENT_WEBGL: 420 case GC3D_DEPTH_STENCIL_ATTACHMENT_WEBGL:
421 attach(GL_DEPTH_ATTACHMENT, GL_DEPTH_ATTACHMENT); 421 attach(GL_DEPTH_ATTACHMENT, GL_DEPTH_ATTACHMENT);
422 attach(GL_STENCIL_ATTACHMENT, GL_STENCIL_ATTACHMENT); 422 attach(GL_STENCIL_ATTACHMENT, GL_STENCIL_ATTACHMENT);
423 break; 423 break;
424 case GL_DEPTH_ATTACHMENT: 424 case GL_DEPTH_ATTACHMENT:
425 attach(GC3D_DEPTH_STENCIL_ATTACHMENT_WEBGL, GL_DEPTH_ATTACHMENT); 425 attach(GC3D_DEPTH_STENCIL_ATTACHMENT_WEBGL, GL_DEPTH_ATTACHMENT);
426 break; 426 break;
(...skipping 12 matching lines...) Expand all
439 if (!attachment) 439 if (!attachment)
440 return; 440 return;
441 441
442 bool checkMore = true; 442 bool checkMore = true;
443 while (checkMore) { 443 while (checkMore) {
444 checkMore = false; 444 checkMore = false;
445 for (AttachmentMap::iterator it = m_attachments.begin(); it != m_attachm ents.end(); ++it) { 445 for (AttachmentMap::iterator it = m_attachments.begin(); it != m_attachm ents.end(); ++it) {
446 WebGLAttachment* attachmentObject = it->value.get(); 446 WebGLAttachment* attachmentObject = it->value.get();
447 if (attachmentObject->isSharedObject(attachment)) { 447 if (attachmentObject->isSharedObject(attachment)) {
448 GLenum attachmentType = it->key; 448 GLenum attachmentType = it->key;
449 attachmentObject->unattach(context()->webGraphicsContext3D(), at tachmentType); 449 attachmentObject->unattach(context()->webContext(), attachmentTy pe);
450 removeAttachmentFromBoundFramebuffer(attachmentType); 450 removeAttachmentFromBoundFramebuffer(attachmentType);
451 checkMore = true; 451 checkMore = true;
452 break; 452 break;
453 } 453 }
454 } 454 }
455 } 455 }
456 } 456 }
457 457
458 GLsizei WebGLFramebuffer::colorBufferWidth() const 458 GLsizei WebGLFramebuffer::colorBufferWidth() const
459 { 459 {
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
594 reset = true; 594 reset = true;
595 } 595 }
596 } else { 596 } else {
597 if (m_filteredDrawBuffers[i] != GL_NONE) { 597 if (m_filteredDrawBuffers[i] != GL_NONE) {
598 m_filteredDrawBuffers[i] = GL_NONE; 598 m_filteredDrawBuffers[i] = GL_NONE;
599 reset = true; 599 reset = true;
600 } 600 }
601 } 601 }
602 } 602 }
603 if (reset) { 603 if (reset) {
604 context()->webGraphicsContext3D()->drawBuffersEXT( 604 context()->webContext()->drawBuffersEXT(
605 m_filteredDrawBuffers.size(), m_filteredDrawBuffers.data()); 605 m_filteredDrawBuffers.size(), m_filteredDrawBuffers.data());
606 } 606 }
607 } 607 }
608 608
609 GLenum WebGLFramebuffer::getDrawBuffer(GLenum drawBuffer) 609 GLenum WebGLFramebuffer::getDrawBuffer(GLenum drawBuffer)
610 { 610 {
611 int index = static_cast<int>(drawBuffer - GL_DRAW_BUFFER0_EXT); 611 int index = static_cast<int>(drawBuffer - GL_DRAW_BUFFER0_EXT);
612 ASSERT(index >= 0); 612 ASSERT(index >= 0);
613 if (index < static_cast<int>(m_drawBuffers.size())) 613 if (index < static_cast<int>(m_drawBuffers.size()))
614 return m_drawBuffers[index]; 614 return m_drawBuffers[index];
615 if (drawBuffer == GL_DRAW_BUFFER0_EXT) 615 if (drawBuffer == GL_DRAW_BUFFER0_EXT)
616 return GL_COLOR_ATTACHMENT0; 616 return GL_COLOR_ATTACHMENT0;
617 return GL_NONE; 617 return GL_NONE;
618 } 618 }
619 619
620 } 620 }
OLDNEW
« no previous file with comments | « Source/core/html/canvas/WebGLDrawBuffers.cpp ('k') | Source/core/html/canvas/WebGLProgram.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698