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

Side by Side Diff: Source/core/html/canvas/WebGL2RenderingContextBase.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 feedback: WebGLFramebuffer::isBound need to be updated 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 unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 #include "config.h" 5 #include "config.h"
6 #include "core/html/canvas/WebGL2RenderingContextBase.h" 6 #include "core/html/canvas/WebGL2RenderingContextBase.h"
7 7
8 #include "bindings/core/v8/WebGLAny.h" 8 #include "bindings/core/v8/WebGLAny.h"
9 #include "core/html/HTMLCanvasElement.h" 9 #include "core/html/HTMLCanvasElement.h"
10 #include "core/html/HTMLImageElement.h" 10 #include "core/html/HTMLImageElement.h"
(...skipping 1541 matching lines...) Expand 10 before | Expand all | Expand 10 after
1552 m_readFramebufferBinding = buffer; 1552 m_readFramebufferBinding = buffer;
1553 break; 1553 break;
1554 default: 1554 default:
1555 synthesizeGLError(GL_INVALID_ENUM, "bindFramebuffer", "invalid target"); 1555 synthesizeGLError(GL_INVALID_ENUM, "bindFramebuffer", "invalid target");
1556 return; 1556 return;
1557 } 1557 }
1558 1558
1559 setFramebuffer(target, buffer); 1559 setFramebuffer(target, buffer);
1560 } 1560 }
1561 1561
1562 void WebGL2RenderingContextBase::deleteFramebuffer(WebGLFramebuffer* framebuffer )
1563 {
1564 if (!deleteObject(framebuffer))
1565 return;
1566 GLenum target = 0;
1567 if (framebuffer == m_framebufferBinding) {
1568 if (framebuffer == m_readFramebufferBinding) {
1569 target = GL_FRAMEBUFFER;
1570 m_framebufferBinding = nullptr;
1571 m_readFramebufferBinding = nullptr;
1572 } else {
1573 target = GL_DRAW_FRAMEBUFFER;
1574 m_framebufferBinding = nullptr;
1575 }
1576 } else if (framebuffer == m_readFramebufferBinding) {
1577 target = GL_READ_FRAMEBUFFER;
1578 m_readFramebufferBinding = nullptr;
1579 }
1580 if (target) {
1581 drawingBuffer()->setFramebufferBinding(target, 0);
1582 // Have to call drawingBuffer()->bind() here to bind back to internal fb o.
1583 drawingBuffer()->bind(target);
1584 }
1585 }
1586
1562 ScriptValue WebGL2RenderingContextBase::getParameter(ScriptState* scriptState, G Lenum pname) 1587 ScriptValue WebGL2RenderingContextBase::getParameter(ScriptState* scriptState, G Lenum pname)
1563 { 1588 {
1564 if (isContextLost()) 1589 if (isContextLost())
1565 return ScriptValue::createNull(scriptState); 1590 return ScriptValue::createNull(scriptState);
1566 switch (pname) { 1591 switch (pname) {
1567 case GL_SHADING_LANGUAGE_VERSION: 1592 case GL_SHADING_LANGUAGE_VERSION:
1568 return WebGLAny(scriptState, "WebGL GLSL ES 3.00 (" + String(webContext( )->getString(GL_SHADING_LANGUAGE_VERSION)) + ")"); 1593 return WebGLAny(scriptState, "WebGL GLSL ES 3.00 (" + String(webContext( )->getString(GL_SHADING_LANGUAGE_VERSION)) + ")");
1569 case GL_VERSION: 1594 case GL_VERSION:
1570 return WebGLAny(scriptState, "WebGL 2.0 (" + String(webContext()->getStr ing(GL_VERSION)) + ")"); 1595 return WebGLAny(scriptState, "WebGL 2.0 (" + String(webContext()->getStr ing(GL_VERSION)) + ")");
1571 1596
(...skipping 503 matching lines...) Expand 10 before | Expand all | Expand 10 after
2075 if (m_boundPixelUnpackBuffer == buffer) 2100 if (m_boundPixelUnpackBuffer == buffer)
2076 m_boundPixelUnpackBuffer = nullptr; 2101 m_boundPixelUnpackBuffer = nullptr;
2077 if (m_boundTransformFeedbackBuffer == buffer) 2102 if (m_boundTransformFeedbackBuffer == buffer)
2078 m_boundTransformFeedbackBuffer = nullptr; 2103 m_boundTransformFeedbackBuffer = nullptr;
2079 if (m_boundUniformBuffer == buffer) 2104 if (m_boundUniformBuffer == buffer)
2080 m_boundUniformBuffer = nullptr; 2105 m_boundUniformBuffer = nullptr;
2081 2106
2082 WebGLRenderingContextBase::removeBoundBuffer(buffer); 2107 WebGLRenderingContextBase::removeBoundBuffer(buffer);
2083 } 2108 }
2084 2109
2110 void WebGL2RenderingContextBase::restoreCurrentFramebuffer()
2111 {
2112 bindFramebuffer(GL_DRAW_FRAMEBUFFER, m_framebufferBinding.get());
2113 bindFramebuffer(GL_READ_FRAMEBUFFER, m_readFramebufferBinding.get());
2114 }
2115
2116 GLenum WebGL2RenderingContextBase::boundFramebufferColorFormat()
2117 {
2118 if (m_readFramebufferBinding && m_readFramebufferBinding->object())
2119 return m_readFramebufferBinding->colorBufferFormat();
2120 if (m_requestedAttributes.alpha())
2121 return GL_RGBA;
2122 return GL_RGB;
2123 }
2124
2085 } // namespace blink 2125 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698