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

Side by Side Diff: Source/modules/webgl/WebGLFramebuffer.cpp

Issue 1281953003: Revert of [Oilpan] Migrate classes under module/webgl onto oilpan heap (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 5 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
« no previous file with comments | « Source/modules/webgl/WebGLFramebuffer.h ('k') | Source/modules/webgl/WebGLFramebuffer.idl » ('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 20 matching lines...) Expand all
31 #include "modules/webgl/WebGLRenderingContextBase.h" 31 #include "modules/webgl/WebGLRenderingContextBase.h"
32 #include "modules/webgl/WebGLTexture.h" 32 #include "modules/webgl/WebGLTexture.h"
33 #include "platform/NotImplemented.h" 33 #include "platform/NotImplemented.h"
34 34
35 namespace blink { 35 namespace blink {
36 36
37 namespace { 37 namespace {
38 38
39 class WebGLRenderbufferAttachment final : public WebGLFramebuffer::WebGLAttachme nt { 39 class WebGLRenderbufferAttachment final : public WebGLFramebuffer::WebGLAttachme nt {
40 public: 40 public:
41 static WebGLFramebuffer::WebGLAttachment* create(WebGLRenderbuffer*); 41 static PassRefPtrWillBeRawPtr<WebGLFramebuffer::WebGLAttachment> create(WebG LRenderbuffer*);
42 42
43 DECLARE_VIRTUAL_TRACE(); 43 DECLARE_VIRTUAL_TRACE();
44 44
45 private: 45 private:
46 explicit WebGLRenderbufferAttachment(WebGLRenderbuffer*); 46 explicit WebGLRenderbufferAttachment(WebGLRenderbuffer*);
47 WebGLRenderbufferAttachment() { } 47 WebGLRenderbufferAttachment() { }
48 48
49 GLsizei width() const override; 49 GLsizei width() const override;
50 GLsizei height() const override; 50 GLsizei height() const override;
51 GLenum format() const override; 51 GLenum format() const override;
52 GLenum type() const override; 52 GLenum type() const override;
53 WebGLSharedObject* object() const override; 53 WebGLSharedObject* object() const override;
54 bool isSharedObject(WebGLSharedObject*) const override; 54 bool isSharedObject(WebGLSharedObject*) const override;
55 bool valid() const override; 55 bool valid() const override;
56 void onDetached(WebGraphicsContext3D*) override; 56 void onDetached(WebGraphicsContext3D*) override;
57 void attach(WebGraphicsContext3D*, GLenum target, GLenum attachment) overrid e; 57 void attach(WebGraphicsContext3D*, GLenum target, GLenum attachment) overrid e;
58 void unattach(WebGraphicsContext3D*, GLenum target, GLenum attachment) overr ide; 58 void unattach(WebGraphicsContext3D*, GLenum target, GLenum attachment) overr ide;
59 59
60 Member<WebGLRenderbuffer> m_renderbuffer; 60 RefPtrWillBeMember<WebGLRenderbuffer> m_renderbuffer;
61 }; 61 };
62 62
63 WebGLFramebuffer::WebGLAttachment* WebGLRenderbufferAttachment::create(WebGLRend erbuffer* renderbuffer) 63 PassRefPtrWillBeRawPtr<WebGLFramebuffer::WebGLAttachment> WebGLRenderbufferAttac hment::create(WebGLRenderbuffer* renderbuffer)
64 { 64 {
65 return new WebGLRenderbufferAttachment(renderbuffer); 65 return adoptRefWillBeNoop(new WebGLRenderbufferAttachment(renderbuffer));
66 } 66 }
67 67
68 DEFINE_TRACE(WebGLRenderbufferAttachment) 68 DEFINE_TRACE(WebGLRenderbufferAttachment)
69 { 69 {
70 visitor->trace(m_renderbuffer); 70 visitor->trace(m_renderbuffer);
71 WebGLFramebuffer::WebGLAttachment::trace(visitor); 71 WebGLFramebuffer::WebGLAttachment::trace(visitor);
72 } 72 }
73 73
74 WebGLRenderbufferAttachment::WebGLRenderbufferAttachment(WebGLRenderbuffer* rend erbuffer) 74 WebGLRenderbufferAttachment::WebGLRenderbufferAttachment(WebGLRenderbuffer* rend erbuffer)
75 : m_renderbuffer(renderbuffer) 75 : m_renderbuffer(renderbuffer)
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
133 if (attachment == GL_DEPTH_STENCIL_ATTACHMENT) { 133 if (attachment == GL_DEPTH_STENCIL_ATTACHMENT) {
134 context->framebufferRenderbuffer(target, GL_DEPTH_ATTACHMENT, GL_RENDERB UFFER, 0); 134 context->framebufferRenderbuffer(target, GL_DEPTH_ATTACHMENT, GL_RENDERB UFFER, 0);
135 context->framebufferRenderbuffer(target, GL_STENCIL_ATTACHMENT, GL_RENDE RBUFFER, 0); 135 context->framebufferRenderbuffer(target, GL_STENCIL_ATTACHMENT, GL_RENDE RBUFFER, 0);
136 } else { 136 } else {
137 context->framebufferRenderbuffer(target, attachment, GL_RENDERBUFFER, 0) ; 137 context->framebufferRenderbuffer(target, attachment, GL_RENDERBUFFER, 0) ;
138 } 138 }
139 } 139 }
140 140
141 GLenum WebGLRenderbufferAttachment::type() const 141 GLenum WebGLRenderbufferAttachment::type() const
142 { 142 {
143 notImplemented();
144 return 0; 143 return 0;
145 } 144 }
146 145
147 class WebGLTextureAttachment final : public WebGLFramebuffer::WebGLAttachment { 146 class WebGLTextureAttachment final : public WebGLFramebuffer::WebGLAttachment {
148 public: 147 public:
149 static WebGLFramebuffer::WebGLAttachment* create(WebGLTexture*, GLenum targe t, GLint level); 148 static PassRefPtrWillBeRawPtr<WebGLFramebuffer::WebGLAttachment> create(WebG LTexture*, GLenum target, GLint level);
150 149
151 DECLARE_VIRTUAL_TRACE(); 150 DECLARE_VIRTUAL_TRACE();
152 151
153 private: 152 private:
154 WebGLTextureAttachment(WebGLTexture*, GLenum target, GLint level); 153 WebGLTextureAttachment(WebGLTexture*, GLenum target, GLint level);
155 WebGLTextureAttachment() { } 154 WebGLTextureAttachment() { }
156 155
157 GLsizei width() const override; 156 GLsizei width() const override;
158 GLsizei height() const override; 157 GLsizei height() const override;
159 GLenum format() const override; 158 GLenum format() const override;
160 GLenum type() const override; 159 GLenum type() const override;
161 WebGLSharedObject* object() const override; 160 WebGLSharedObject* object() const override;
162 bool isSharedObject(WebGLSharedObject*) const override; 161 bool isSharedObject(WebGLSharedObject*) const override;
163 bool valid() const override; 162 bool valid() const override;
164 void onDetached(WebGraphicsContext3D*) override; 163 void onDetached(WebGraphicsContext3D*) override;
165 void attach(WebGraphicsContext3D*, GLenum target, GLenum attachment) overrid e; 164 void attach(WebGraphicsContext3D*, GLenum target, GLenum attachment) overrid e;
166 void unattach(WebGraphicsContext3D*, GLenum target, GLenum attachment) overr ide; 165 void unattach(WebGraphicsContext3D*, GLenum target, GLenum attachment) overr ide;
167 166
168 Member<WebGLTexture> m_texture; 167 RefPtrWillBeMember<WebGLTexture> m_texture;
169 GLenum m_target; 168 GLenum m_target;
170 GLint m_level; 169 GLint m_level;
171 }; 170 };
172 171
173 WebGLFramebuffer::WebGLAttachment* WebGLTextureAttachment::create(WebGLTexture* texture, GLenum target, GLint level) 172 PassRefPtrWillBeRawPtr<WebGLFramebuffer::WebGLAttachment> WebGLTextureAttachment ::create(WebGLTexture* texture, GLenum target, GLint level)
174 { 173 {
175 return new WebGLTextureAttachment(texture, target, level); 174 return adoptRefWillBeNoop(new WebGLTextureAttachment(texture, target, level) );
176 } 175 }
177 176
178 DEFINE_TRACE(WebGLTextureAttachment) 177 DEFINE_TRACE(WebGLTextureAttachment)
179 { 178 {
180 visitor->trace(m_texture); 179 visitor->trace(m_texture);
181 WebGLFramebuffer::WebGLAttachment::trace(visitor); 180 WebGLFramebuffer::WebGLAttachment::trace(visitor);
182 } 181 }
183 182
184 WebGLTextureAttachment::WebGLTextureAttachment(WebGLTexture* texture, GLenum tar get, GLint level) 183 WebGLTextureAttachment::WebGLTextureAttachment(WebGLTexture* texture, GLenum tar get, GLint level)
185 : m_texture(texture) 184 : m_texture(texture)
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
318 } // anonymous namespace 317 } // anonymous namespace
319 318
320 WebGLFramebuffer::WebGLAttachment::WebGLAttachment() 319 WebGLFramebuffer::WebGLAttachment::WebGLAttachment()
321 { 320 {
322 } 321 }
323 322
324 WebGLFramebuffer::WebGLAttachment::~WebGLAttachment() 323 WebGLFramebuffer::WebGLAttachment::~WebGLAttachment()
325 { 324 {
326 } 325 }
327 326
328 WebGLFramebuffer* WebGLFramebuffer::create(WebGLRenderingContextBase* ctx) 327 PassRefPtrWillBeRawPtr<WebGLFramebuffer> WebGLFramebuffer::create(WebGLRendering ContextBase* ctx)
329 { 328 {
330 return new WebGLFramebuffer(ctx); 329 return adoptRefWillBeNoop(new WebGLFramebuffer(ctx));
331 } 330 }
332 331
333 WebGLFramebuffer::WebGLFramebuffer(WebGLRenderingContextBase* ctx) 332 WebGLFramebuffer::WebGLFramebuffer(WebGLRenderingContextBase* ctx)
334 : WebGLContextObject(ctx) 333 : WebGLContextObject(ctx)
335 , m_object(ctx->webContext()->createFramebuffer()) 334 , m_object(ctx->webContext()->createFramebuffer())
336 , m_hasEverBeenBound(false) 335 , m_hasEverBeenBound(false)
337 , m_readBuffer(GL_COLOR_ATTACHMENT0) 336 , m_readBuffer(GL_COLOR_ATTACHMENT0)
338 { 337 {
339 } 338 }
340 339
341 WebGLFramebuffer::~WebGLFramebuffer() 340 WebGLFramebuffer::~WebGLFramebuffer()
342 { 341 {
343 // Attachments in |m_attachments| will be deleted from other places, so we 342 // Delete the platform framebuffer resource. Explicit detachment
344 // clear it to avoid deleting those attachments in detachAndDeleteObject(). 343 // is for the benefit of Oilpan, where the framebuffer object
345 m_attachments.clear(); 344 // isn't detached when it and the WebGLRenderingContextBase object
346 345 // it is registered with are both finalized. Without Oilpan, the
347 // See the comment in WebGLObject::detachAndDeleteObject(). 346 // object will have been detached.
347 //
348 // To keep the code regular, the trivial detach()ment is always
349 // performed.
348 detachAndDeleteObject(); 350 detachAndDeleteObject();
349 } 351 }
350 352
351 void WebGLFramebuffer::setAttachmentForBoundFramebuffer(GLenum target, GLenum at tachment, GLenum texTarget, WebGLTexture* texture, GLint level) 353 void WebGLFramebuffer::setAttachmentForBoundFramebuffer(GLenum target, GLenum at tachment, GLenum texTarget, WebGLTexture* texture, GLint level)
352 { 354 {
353 ASSERT(isBound(target)); 355 ASSERT(isBound(target));
354 removeAttachmentFromBoundFramebuffer(target, attachment); 356 removeAttachmentFromBoundFramebuffer(target, attachment);
355 if (!m_object) 357 if (!m_object)
356 return; 358 return;
357 if (texture && texture->object()) { 359 if (texture && texture->object()) {
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after
572 bool WebGLFramebuffer::hasStencilBuffer() const 574 bool WebGLFramebuffer::hasStencilBuffer() const
573 { 575 {
574 WebGLAttachment* attachment = getAttachment(GL_STENCIL_ATTACHMENT); 576 WebGLAttachment* attachment = getAttachment(GL_STENCIL_ATTACHMENT);
575 if (!attachment) 577 if (!attachment)
576 attachment = getAttachment(GL_DEPTH_STENCIL_ATTACHMENT); 578 attachment = getAttachment(GL_DEPTH_STENCIL_ATTACHMENT);
577 return attachment && attachment->valid(); 579 return attachment && attachment->valid();
578 } 580 }
579 581
580 void WebGLFramebuffer::deleteObjectImpl(WebGraphicsContext3D* context3d) 582 void WebGLFramebuffer::deleteObjectImpl(WebGraphicsContext3D* context3d)
581 { 583 {
582 // Both the AttachmentMap and its WebGLAttachment objects are GCed 584 #if !ENABLE(OILPAN)
583 // objects and cannot be accessed, as they may have been finalized 585 // With Oilpan, both the AttachmentMap and its WebGLAttachment objects are
586 // GCed objects and cannot be accessed, as they may have been finalized
584 // already during the same GC sweep. 587 // already during the same GC sweep.
588 //
589 // The WebGLAttachment-derived classes instead handle detachment
590 // on their own when finalizing, so the explicit notification is
591 // not needed.
585 for (const auto& attachment : m_attachments) 592 for (const auto& attachment : m_attachments)
586 attachment.value->onDetached(context3d); 593 attachment.value->onDetached(context3d);
594 #endif
587 595
588 context3d->deleteFramebuffer(m_object); 596 context3d->deleteFramebuffer(m_object);
589 m_object = 0; 597 m_object = 0;
590 } 598 }
591 599
592 bool WebGLFramebuffer::isBound(GLenum target) const 600 bool WebGLFramebuffer::isBound(GLenum target) const
593 { 601 {
594 return (context()->getFramebufferBinding(target) == this); 602 return (context()->getFramebufferBinding(target) == this);
595 } 603 }
596 604
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
648 return false; 656 return false;
649 if (format) 657 if (format)
650 *format = image->format(); 658 *format = image->format();
651 if (type) 659 if (type)
652 *type = image->type(); 660 *type = image->type();
653 return true; 661 return true;
654 } 662 }
655 663
656 DEFINE_TRACE(WebGLFramebuffer) 664 DEFINE_TRACE(WebGLFramebuffer)
657 { 665 {
666 #if ENABLE(OILPAN)
658 visitor->trace(m_attachments); 667 visitor->trace(m_attachments);
668 #endif
659 WebGLContextObject::trace(visitor); 669 WebGLContextObject::trace(visitor);
660 } 670 }
661 671
662 } 672 }
OLDNEW
« no previous file with comments | « Source/modules/webgl/WebGLFramebuffer.h ('k') | Source/modules/webgl/WebGLFramebuffer.idl » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698