Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 161 return; | 161 return; |
| 162 | 162 |
| 163 webContext()->invalidateSubFramebuffer(target, attachments.size(), attachmen ts.data(), x, y, width, height); | 163 webContext()->invalidateSubFramebuffer(target, attachments.size(), attachmen ts.data(), x, y, width, height); |
| 164 } | 164 } |
| 165 | 165 |
| 166 void WebGL2RenderingContextBase::readBuffer(GLenum mode) | 166 void WebGL2RenderingContextBase::readBuffer(GLenum mode) |
| 167 { | 167 { |
| 168 if (isContextLost()) | 168 if (isContextLost()) |
| 169 return; | 169 return; |
| 170 | 170 |
| 171 switch (mode) { | |
| 172 case GL_BACK: | |
| 173 case GL_NONE: | |
| 174 case GL_COLOR_ATTACHMENT0: | |
| 175 break; | |
| 176 default: | |
| 177 if (attachment > GL_COLOR_ATTACHMENT0 | |
| 178 && attachment < static_cast<GLenum>(GL_COLOR_ATTACHMENT0 + maxColorA ttachments())) | |
| 179 break; | |
| 180 synthesizeGLError(GL_INVALID_ENUM, "readBuffer", "invalid read buffer"); | |
| 181 return; | |
| 182 } | |
| 183 | |
| 184 WebGLFramebuffer* readFramebufferBinding = getFramebufferBinding(GL_READ_FRA MEBUFFER); | |
| 185 if (!readFramebufferBinding) { | |
| 186 ASSERT(drawingBuffer()); | |
| 187 if (mode != GL_BACK || mode != GL_NONE) { | |
|
Zhenyao Mo
2015/06/25 22:42:22
&&, not ||
yunchao
2015/06/30 05:44:56
Done.
| |
| 188 synthesizeGLError(GL_INVALID_OPERATION, "readBuffer", "invalid read buffer"); | |
| 189 return; | |
| 190 } | |
| 191 // translate GL_BACK to GL_COLOR_ATTACHMENT0, because the default | |
| 192 // framebuffer for WebGL is not fb 0, it is an internal fbo. | |
| 193 if (mode == GL_BACK) | |
| 194 mode = GL_COLOR_ATTACHMENT0; | |
|
Zhenyao Mo
2015/06/25 22:42:22
You also need to emulate the reverse in getParamet
yunchao
2015/06/30 05:44:56
Yeah, totally agree with you.
| |
| 195 } else { | |
| 196 if (mode == GL_BACK) { | |
| 197 synthesizeGLError(GL_INVALID_OPERATION, "readBuffer", "invalid read buffer"); | |
| 198 return; | |
| 199 } | |
| 200 m_readbufferOfFBO = mode; | |
| 201 } | |
| 171 webContext()->readBuffer(mode); | 202 webContext()->readBuffer(mode); |
| 172 } | 203 } |
| 173 | 204 |
| 174 void WebGL2RenderingContextBase::renderbufferStorageImpl( | 205 void WebGL2RenderingContextBase::renderbufferStorageImpl( |
| 175 GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsize i height, | 206 GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsize i height, |
| 176 const char* functionName) | 207 const char* functionName) |
| 177 { | 208 { |
| 178 switch (internalformat) { | 209 switch (internalformat) { |
| 179 case GL_R8UI: | 210 case GL_R8UI: |
| 180 case GL_R8I: | 211 case GL_R8I: |
| (...skipping 1904 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2085 m_boundPixelUnpackBuffer = nullptr; | 2116 m_boundPixelUnpackBuffer = nullptr; |
| 2086 if (m_boundTransformFeedbackBuffer == buffer) | 2117 if (m_boundTransformFeedbackBuffer == buffer) |
| 2087 m_boundTransformFeedbackBuffer = nullptr; | 2118 m_boundTransformFeedbackBuffer = nullptr; |
| 2088 if (m_boundUniformBuffer == buffer) | 2119 if (m_boundUniformBuffer == buffer) |
| 2089 m_boundUniformBuffer = nullptr; | 2120 m_boundUniformBuffer = nullptr; |
| 2090 | 2121 |
| 2091 WebGLRenderingContextBase::removeBoundBuffer(buffer); | 2122 WebGLRenderingContextBase::removeBoundBuffer(buffer); |
| 2092 } | 2123 } |
| 2093 | 2124 |
| 2094 } // namespace blink | 2125 } // namespace blink |
| OLD | NEW |