| OLD | NEW |
| 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 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 121 } | 121 } |
| 122 | 122 |
| 123 void WebGLRenderbufferAttachment::attach(GraphicsContext3D* context, GC3Denu
m attachment) | 123 void WebGLRenderbufferAttachment::attach(GraphicsContext3D* context, GC3Denu
m attachment) |
| 124 { | 124 { |
| 125 Platform3DObject object = objectOrZero(m_renderbuffer.get()); | 125 Platform3DObject object = objectOrZero(m_renderbuffer.get()); |
| 126 context->framebufferRenderbuffer(GraphicsContext3D::FRAMEBUFFER, attachm
ent, GraphicsContext3D::RENDERBUFFER, object); | 126 context->framebufferRenderbuffer(GraphicsContext3D::FRAMEBUFFER, attachm
ent, GraphicsContext3D::RENDERBUFFER, object); |
| 127 } | 127 } |
| 128 | 128 |
| 129 void WebGLRenderbufferAttachment::unattach(GraphicsContext3D* context, GC3De
num attachment) | 129 void WebGLRenderbufferAttachment::unattach(GraphicsContext3D* context, GC3De
num attachment) |
| 130 { | 130 { |
| 131 if (attachment == GraphicsContext3D::DEPTH_STENCIL) { | 131 if (attachment == GraphicsContext3D::DEPTH_STENCIL_ATTACHMENT) { |
| 132 context->framebufferRenderbuffer(GraphicsContext3D::FRAMEBUFFER, Gra
phicsContext3D::DEPTH_ATTACHMENT, GraphicsContext3D::RENDERBUFFER, 0); | 132 context->framebufferRenderbuffer(GraphicsContext3D::FRAMEBUFFER, Gra
phicsContext3D::DEPTH_ATTACHMENT, GraphicsContext3D::RENDERBUFFER, 0); |
| 133 context->framebufferRenderbuffer(GraphicsContext3D::FRAMEBUFFER, Gra
phicsContext3D::STENCIL_ATTACHMENT, GraphicsContext3D::RENDERBUFFER, 0); | 133 context->framebufferRenderbuffer(GraphicsContext3D::FRAMEBUFFER, Gra
phicsContext3D::STENCIL_ATTACHMENT, GraphicsContext3D::RENDERBUFFER, 0); |
| 134 } else | 134 } else |
| 135 context->framebufferRenderbuffer(GraphicsContext3D::FRAMEBUFFER, att
achment, GraphicsContext3D::RENDERBUFFER, 0); | 135 context->framebufferRenderbuffer(GraphicsContext3D::FRAMEBUFFER, att
achment, GraphicsContext3D::RENDERBUFFER, 0); |
| 136 } | 136 } |
| 137 | 137 |
| 138 class WebGLTextureAttachment : public WebGLFramebuffer::WebGLAttachment { | 138 class WebGLTextureAttachment : public WebGLFramebuffer::WebGLAttachment { |
| 139 public: | 139 public: |
| 140 static PassRefPtr<WebGLFramebuffer::WebGLAttachment> create(WebGLTexture
*, GC3Denum target, GC3Dint level); | 140 static PassRefPtr<WebGLFramebuffer::WebGLAttachment> create(WebGLTexture
*, GC3Denum target, GC3Dint level); |
| 141 | 141 |
| (...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 276 } | 276 } |
| 277 | 277 |
| 278 WebGLFramebuffer::~WebGLFramebuffer() | 278 WebGLFramebuffer::~WebGLFramebuffer() |
| 279 { | 279 { |
| 280 deleteObject(0); | 280 deleteObject(0); |
| 281 } | 281 } |
| 282 | 282 |
| 283 void WebGLFramebuffer::setAttachmentForBoundFramebuffer(GC3Denum attachment, GC3
Denum texTarget, WebGLTexture* texture, GC3Dint level) | 283 void WebGLFramebuffer::setAttachmentForBoundFramebuffer(GC3Denum attachment, GC3
Denum texTarget, WebGLTexture* texture, GC3Dint level) |
| 284 { | 284 { |
| 285 ASSERT(isBound()); | 285 ASSERT(isBound()); |
| 286 removeAttachmentFromBoundFramebuffer(attachment); |
| 286 if (!object()) | 287 if (!object()) |
| 287 return; | 288 return; |
| 288 removeAttachmentFromBoundFramebuffer(attachment); | |
| 289 if (texture && texture->object()) { | 289 if (texture && texture->object()) { |
| 290 | |
| 291 m_attachments.add(attachment, WebGLTextureAttachment::create(texture, te
xTarget, level)); | 290 m_attachments.add(attachment, WebGLTextureAttachment::create(texture, te
xTarget, level)); |
| 292 texture->onAttached(); | 291 texture->onAttached(); |
| 293 } | 292 } |
| 294 } | 293 } |
| 295 | 294 |
| 296 void WebGLFramebuffer::setAttachmentForBoundFramebuffer(GC3Denum attachment, Web
GLRenderbuffer* renderbuffer) | 295 void WebGLFramebuffer::setAttachmentForBoundFramebuffer(GC3Denum attachment, Web
GLRenderbuffer* renderbuffer) |
| 297 { | 296 { |
| 298 ASSERT(isBound()); | 297 ASSERT(isBound()); |
| 298 removeAttachmentFromBoundFramebuffer(attachment); |
| 299 if (!object()) | 299 if (!object()) |
| 300 return; | 300 return; |
| 301 removeAttachmentFromBoundFramebuffer(attachment); | |
| 302 if (renderbuffer && renderbuffer->object()) { | 301 if (renderbuffer && renderbuffer->object()) { |
| 303 m_attachments.add(attachment, WebGLRenderbufferAttachment::create(render
buffer)); | 302 m_attachments.add(attachment, WebGLRenderbufferAttachment::create(render
buffer)); |
| 304 renderbuffer->onAttached(); | 303 renderbuffer->onAttached(); |
| 305 } | 304 } |
| 306 } | 305 } |
| 307 | 306 |
| 308 void WebGLFramebuffer::attach(GC3Denum attachment, GC3Denum attachmentPoint) | 307 void WebGLFramebuffer::attach(GC3Denum attachment, GC3Denum attachmentPoint) |
| 309 { | 308 { |
| 310 ASSERT(isBound()); | 309 ASSERT(isBound()); |
| 311 WebGLAttachment* attachmentObject = getAttachment(attachment); | 310 WebGLAttachment* attachmentObject = getAttachment(attachment); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 330 void WebGLFramebuffer::removeAttachmentFromBoundFramebuffer(GC3Denum attachment) | 329 void WebGLFramebuffer::removeAttachmentFromBoundFramebuffer(GC3Denum attachment) |
| 331 { | 330 { |
| 332 ASSERT(isBound()); | 331 ASSERT(isBound()); |
| 333 if (!object()) | 332 if (!object()) |
| 334 return; | 333 return; |
| 335 | 334 |
| 336 WebGLAttachment* attachmentObject = getAttachment(attachment); | 335 WebGLAttachment* attachmentObject = getAttachment(attachment); |
| 337 if (attachmentObject) { | 336 if (attachmentObject) { |
| 338 attachmentObject->onDetached(context()->graphicsContext3D()); | 337 attachmentObject->onDetached(context()->graphicsContext3D()); |
| 339 m_attachments.remove(attachment); | 338 m_attachments.remove(attachment); |
| 339 switch (attachment) { |
| 340 case GraphicsContext3D::DEPTH_STENCIL_ATTACHMENT: |
| 341 attach(GraphicsContext3D::DEPTH_ATTACHMENT, GraphicsContext3D::DEPTH
_ATTACHMENT); |
| 342 attach(GraphicsContext3D::STENCIL_ATTACHMENT, GraphicsContext3D::STE
NCIL_ATTACHMENT); |
| 343 break; |
| 344 case GraphicsContext3D::DEPTH_ATTACHMENT: |
| 345 attach(GraphicsContext3D::DEPTH_STENCIL_ATTACHMENT, GraphicsContext3
D::DEPTH_ATTACHMENT); |
| 346 break; |
| 347 case GraphicsContext3D::STENCIL_ATTACHMENT: |
| 348 attach(GraphicsContext3D::DEPTH_STENCIL_ATTACHMENT, GraphicsContext3
D::STENCIL_ATTACHMENT); |
| 349 break; |
| 350 } |
| 340 } | 351 } |
| 341 } | 352 } |
| 342 | 353 |
| 343 void WebGLFramebuffer::removeAttachmentFromBoundFramebuffer(WebGLSharedObject* a
ttachment) | 354 void WebGLFramebuffer::removeAttachmentFromBoundFramebuffer(WebGLSharedObject* a
ttachment) |
| 344 { | 355 { |
| 345 ASSERT(isBound()); | 356 ASSERT(isBound()); |
| 346 if (!object()) | 357 if (!object()) |
| 347 return; | 358 return; |
| 348 if (!attachment) | 359 if (!attachment) |
| 349 return; | 360 return; |
| (...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 566 } | 577 } |
| 567 | 578 |
| 568 bool WebGLFramebuffer::isBound() const | 579 bool WebGLFramebuffer::isBound() const |
| 569 { | 580 { |
| 570 return (context()->m_framebufferBinding.get() == this); | 581 return (context()->m_framebufferBinding.get() == this); |
| 571 } | 582 } |
| 572 | 583 |
| 573 } | 584 } |
| 574 | 585 |
| 575 #endif // ENABLE(WEBGL) | 586 #endif // ENABLE(WEBGL) |
| OLD | NEW |