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

Unified Diff: Source/core/html/canvas/WebGLFramebuffer.cpp

Issue 1120953002: WebGL 2: add read/write framebuffer binding points to related APIs (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: addressed zmo@'s and kbr@'s feedback Created 5 years, 6 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 side-by-side diff with in-line comments
Download patch
Index: Source/core/html/canvas/WebGLFramebuffer.cpp
diff --git a/Source/core/html/canvas/WebGLFramebuffer.cpp b/Source/core/html/canvas/WebGLFramebuffer.cpp
index da17213e1705aedc579c7857ec7ba85ce31c4f03..a37948ffee58a70f7476a9709506ef7f73fb61f6 100644
--- a/Source/core/html/canvas/WebGLFramebuffer.cpp
+++ b/Source/core/html/canvas/WebGLFramebuffer.cpp
@@ -54,8 +54,8 @@ namespace {
virtual bool isSharedObject(WebGLSharedObject*) const override;
virtual bool valid() const override;
virtual void onDetached(WebGraphicsContext3D*) override;
- virtual void attach(WebGraphicsContext3D*, GLenum attachment) override;
- virtual void unattach(WebGraphicsContext3D*, GLenum attachment) override;
+ virtual void attach(WebGraphicsContext3D*, GLenum target, GLenum attachment) override;
+ virtual void unattach(WebGraphicsContext3D*, GLenum target, GLenum attachment) override;
RefPtrWillBeMember<WebGLRenderbuffer> m_renderbuffer;
};
@@ -117,24 +117,24 @@ namespace {
m_renderbuffer->onDetached(context);
}
- void WebGLRenderbufferAttachment::attach(WebGraphicsContext3D* context, GLenum attachment)
+ void WebGLRenderbufferAttachment::attach(WebGraphicsContext3D* context, GLenum target, GLenum attachment)
{
Platform3DObject object = objectOrZero(m_renderbuffer.get());
if (attachment == GL_DEPTH_STENCIL_ATTACHMENT && m_renderbuffer->emulatedStencilBuffer()) {
- context->framebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, object);
- context->framebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, objectOrZero(m_renderbuffer->emulatedStencilBuffer()));
+ context->framebufferRenderbuffer(target, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, object);
+ context->framebufferRenderbuffer(target, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, objectOrZero(m_renderbuffer->emulatedStencilBuffer()));
} else {
- context->framebufferRenderbuffer(GL_FRAMEBUFFER, attachment, GL_RENDERBUFFER, object);
+ context->framebufferRenderbuffer(target, attachment, GL_RENDERBUFFER, object);
}
}
- void WebGLRenderbufferAttachment::unattach(WebGraphicsContext3D* context, GLenum attachment)
+ void WebGLRenderbufferAttachment::unattach(WebGraphicsContext3D* context, GLenum target, GLenum attachment)
{
if (attachment == GL_DEPTH_STENCIL_ATTACHMENT) {
- context->framebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, 0);
- context->framebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, 0);
+ context->framebufferRenderbuffer(target, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, 0);
+ context->framebufferRenderbuffer(target, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, 0);
} else {
- context->framebufferRenderbuffer(GL_FRAMEBUFFER, attachment, GL_RENDERBUFFER, 0);
+ context->framebufferRenderbuffer(target, attachment, GL_RENDERBUFFER, 0);
}
}
@@ -162,8 +162,8 @@ namespace {
virtual bool isSharedObject(WebGLSharedObject*) const override;
virtual bool valid() const override;
virtual void onDetached(WebGraphicsContext3D*) override;
- virtual void attach(WebGraphicsContext3D*, GLenum attachment) override;
- virtual void unattach(WebGraphicsContext3D*, GLenum attachment) override;
+ virtual void attach(WebGraphicsContext3D*, GLenum target, GLenum attachment) override;
+ virtual void unattach(WebGraphicsContext3D*, GLenum target, GLenum attachment) override;
RefPtrWillBeMember<WebGLTexture> m_texture;
GLenum m_target;
@@ -223,19 +223,19 @@ namespace {
m_texture->onDetached(context);
}
- void WebGLTextureAttachment::attach(WebGraphicsContext3D* context, GLenum attachment)
+ void WebGLTextureAttachment::attach(WebGraphicsContext3D* context, GLenum target, GLenum attachment)
{
Platform3DObject object = objectOrZero(m_texture.get());
- context->framebufferTexture2D(GL_FRAMEBUFFER, attachment, m_target, object, m_level);
+ context->framebufferTexture2D(target, attachment, m_target, object, m_level);
}
- void WebGLTextureAttachment::unattach(WebGraphicsContext3D* context, GLenum attachment)
+ void WebGLTextureAttachment::unattach(WebGraphicsContext3D* context, GLenum target, GLenum attachment)
{
if (attachment == GL_DEPTH_STENCIL_ATTACHMENT) {
- context->framebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, m_target, 0, m_level);
- context->framebufferTexture2D(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, m_target, 0, m_level);
+ context->framebufferTexture2D(target, GL_DEPTH_ATTACHMENT, m_target, 0, m_level);
+ context->framebufferTexture2D(target, GL_STENCIL_ATTACHMENT, m_target, 0, m_level);
} else {
- context->framebufferTexture2D(GL_FRAMEBUFFER, attachment, m_target, 0, m_level);
+ context->framebufferTexture2D(target, attachment, m_target, 0, m_level);
}
}
@@ -295,10 +295,10 @@ WebGLFramebuffer::~WebGLFramebuffer()
detachAndDeleteObject();
}
-void WebGLFramebuffer::setAttachmentForBoundFramebuffer(GLenum attachment, GLenum texTarget, WebGLTexture* texture, GLint level)
+void WebGLFramebuffer::setAttachmentForBoundFramebuffer(GLenum target, GLenum attachment, GLenum texTarget, WebGLTexture* texture, GLint level)
{
ASSERT(isBound());
- removeAttachmentFromBoundFramebuffer(attachment);
+ removeAttachmentFromBoundFramebuffer(target, attachment);
if (!m_object)
return;
if (texture && texture->object()) {
@@ -308,10 +308,10 @@ void WebGLFramebuffer::setAttachmentForBoundFramebuffer(GLenum attachment, GLenu
}
}
-void WebGLFramebuffer::setAttachmentForBoundFramebuffer(GLenum attachment, WebGLRenderbuffer* renderbuffer)
+void WebGLFramebuffer::setAttachmentForBoundFramebuffer(GLenum target, GLenum attachment, WebGLRenderbuffer* renderbuffer)
{
ASSERT(isBound());
- removeAttachmentFromBoundFramebuffer(attachment);
+ removeAttachmentFromBoundFramebuffer(target, attachment);
if (!m_object)
return;
if (renderbuffer && renderbuffer->object()) {
@@ -321,12 +321,12 @@ void WebGLFramebuffer::setAttachmentForBoundFramebuffer(GLenum attachment, WebGL
}
}
-void WebGLFramebuffer::attach(GLenum attachment, GLenum attachmentPoint)
+void WebGLFramebuffer::attach(GLenum target, GLenum attachment, GLenum attachmentPoint)
{
ASSERT(isBound());
WebGLAttachment* attachmentObject = getAttachment(attachment);
if (attachmentObject)
- attachmentObject->attach(context()->webContext(), attachmentPoint);
+ attachmentObject->attach(context()->webContext(), target, attachmentPoint);
}
WebGLSharedObject* WebGLFramebuffer::getAttachmentObject(GLenum attachment) const
@@ -430,7 +430,7 @@ WebGLFramebuffer::WebGLAttachment* WebGLFramebuffer::getAttachment(GLenum attach
return (it != m_attachments.end()) ? it->value.get() : 0;
}
-void WebGLFramebuffer::removeAttachmentFromBoundFramebuffer(GLenum attachment)
+void WebGLFramebuffer::removeAttachmentFromBoundFramebuffer(GLenum target, GLenum attachment)
{
ASSERT(isBound());
if (!m_object)
@@ -443,20 +443,20 @@ void WebGLFramebuffer::removeAttachmentFromBoundFramebuffer(GLenum attachment)
drawBuffersIfNecessary(false);
switch (attachment) {
case GL_DEPTH_STENCIL_ATTACHMENT:
- attach(GL_DEPTH_ATTACHMENT, GL_DEPTH_ATTACHMENT);
- attach(GL_STENCIL_ATTACHMENT, GL_STENCIL_ATTACHMENT);
+ attach(target, GL_DEPTH_ATTACHMENT, GL_DEPTH_ATTACHMENT);
+ attach(target, GL_STENCIL_ATTACHMENT, GL_STENCIL_ATTACHMENT);
break;
case GL_DEPTH_ATTACHMENT:
- attach(GL_DEPTH_STENCIL_ATTACHMENT, GL_DEPTH_ATTACHMENT);
+ attach(target, GL_DEPTH_STENCIL_ATTACHMENT, GL_DEPTH_ATTACHMENT);
break;
case GL_STENCIL_ATTACHMENT:
- attach(GL_DEPTH_STENCIL_ATTACHMENT, GL_STENCIL_ATTACHMENT);
+ attach(target, GL_DEPTH_STENCIL_ATTACHMENT, GL_STENCIL_ATTACHMENT);
break;
}
}
}
-void WebGLFramebuffer::removeAttachmentFromBoundFramebuffer(WebGLSharedObject* attachment)
+void WebGLFramebuffer::removeAttachmentFromBoundFramebuffer(GLenum target, WebGLSharedObject* attachment)
{
ASSERT(isBound());
if (!m_object)
@@ -471,8 +471,8 @@ void WebGLFramebuffer::removeAttachmentFromBoundFramebuffer(WebGLSharedObject* a
WebGLAttachment* attachmentObject = it.value.get();
if (attachmentObject->isSharedObject(attachment)) {
GLenum attachmentType = it.key;
- attachmentObject->unattach(context()->webContext(), attachmentType);
- removeAttachmentFromBoundFramebuffer(attachmentType);
+ attachmentObject->unattach(context()->webContext(), target, attachmentType);
+ removeAttachmentFromBoundFramebuffer(target, attachmentType);
checkMore = true;
break;
}
@@ -547,7 +547,7 @@ GLenum WebGLFramebuffer::checkStatus(const char** reason) const
return GL_FRAMEBUFFER_COMPLETE;
}
-bool WebGLFramebuffer::onAccess(WebGraphicsContext3D* context3d, const char** reason)
+bool WebGLFramebuffer::onAccess(WebGraphicsContext3D* context3d, GLenum target, const char** reason)
{
if (checkStatus(reason) != GL_FRAMEBUFFER_COMPLETE)
return false;

Powered by Google App Engine
This is Rietveld 408576698