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 "modules/webgl/WebGL2RenderingContextBase.h" | 6 #include "modules/webgl/WebGL2RenderingContextBase.h" |
| 7 | 7 |
| 8 #include "bindings/modules/v8/WebGLAny.h" | 8 #include "bindings/modules/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 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 141 m_boundTransformFeedbackBuffer = nullptr; | 141 m_boundTransformFeedbackBuffer = nullptr; |
| 142 m_boundUniformBuffer = nullptr; | 142 m_boundUniformBuffer = nullptr; |
| 143 | 143 |
| 144 m_currentBooleanOcclusionQuery = nullptr; | 144 m_currentBooleanOcclusionQuery = nullptr; |
| 145 m_currentTransformFeedbackPrimitivesWrittenQuery = nullptr; | 145 m_currentTransformFeedbackPrimitivesWrittenQuery = nullptr; |
| 146 | 146 |
| 147 m_max3DTextureSize = 0; | 147 m_max3DTextureSize = 0; |
| 148 webContext()->getIntegerv(GL_MAX_3D_TEXTURE_SIZE, &m_max3DTextureSize); | 148 webContext()->getIntegerv(GL_MAX_3D_TEXTURE_SIZE, &m_max3DTextureSize); |
| 149 m_max3DTextureLevel = WebGLTexture::computeLevelCount(m_max3DTextureSize, m_ max3DTextureSize, m_max3DTextureSize); | 149 m_max3DTextureLevel = WebGLTexture::computeLevelCount(m_max3DTextureSize, m_ max3DTextureSize, m_max3DTextureSize); |
| 150 | 150 |
| 151 m_maxArrayTextureLayers = 0; | |
| 152 webContext()->getIntegerv(GL_MAX_ARRAY_TEXTURE_LAYERS, &m_maxArrayTextureLay ers); | |
| 153 | |
| 151 GLint numCombinedTextureImageUnits = 0; | 154 GLint numCombinedTextureImageUnits = 0; |
| 152 webContext()->getIntegerv(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, &numCombinedT extureImageUnits); | 155 webContext()->getIntegerv(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, &numCombinedT extureImageUnits); |
| 153 m_samplerUnits.clear(); | 156 m_samplerUnits.clear(); |
| 154 m_samplerUnits.resize(numCombinedTextureImageUnits); | 157 m_samplerUnits.resize(numCombinedTextureImageUnits); |
| 155 | 158 |
| 156 GLint maxTransformFeedbackSeparateAttribs = 0; | 159 GLint maxTransformFeedbackSeparateAttribs = 0; |
| 157 webContext()->getIntegerv(GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS, &maxTr ansformFeedbackSeparateAttribs); | 160 webContext()->getIntegerv(GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS, &maxTr ansformFeedbackSeparateAttribs); |
| 158 m_boundIndexedTransformFeedbackBuffers.clear(); | 161 m_boundIndexedTransformFeedbackBuffers.clear(); |
| 159 m_boundIndexedTransformFeedbackBuffers.resize(maxTransformFeedbackSeparateAt tribs); | 162 m_boundIndexedTransformFeedbackBuffers.resize(maxTransformFeedbackSeparateAt tribs); |
| 160 | 163 |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 236 } | 239 } |
| 237 | 240 |
| 238 void WebGL2RenderingContextBase::blitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfi eld mask, GLenum filter) | 241 void WebGL2RenderingContextBase::blitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfi eld mask, GLenum filter) |
| 239 { | 242 { |
| 240 if (isContextLost()) | 243 if (isContextLost()) |
| 241 return; | 244 return; |
| 242 | 245 |
| 243 webContext()->blitFramebufferCHROMIUM(srcX0, srcY0, srcX1, srcY1, dstX0, dst Y0, dstX1, dstY1, mask, filter); | 246 webContext()->blitFramebufferCHROMIUM(srcX0, srcY0, srcX1, srcY1, dstX0, dst Y0, dstX1, dstY1, mask, filter); |
| 244 } | 247 } |
| 245 | 248 |
| 246 void WebGL2RenderingContextBase::framebufferTextureLayer(GLenum target, GLenum a ttachment, const WebGLTexture* texture, GLint level, GLint layer) | 249 bool WebGL2RenderingContextBase::validateTextureLayer(const char* functionName, GLenum target, GLint layer) |
|
Zhenyao Mo
2015/10/27 21:21:31
Function name maybe validateTexFuncLayer()? to be
qiankun
2015/10/27 23:25:27
Ok, I will fix this.
qiankun
2015/10/27 23:55:59
Done.
| |
| 247 { | 250 { |
| 248 if (isContextLost()) | 251 if (layer < 0) { |
| 252 synthesizeGLError(GL_INVALID_VALUE, functionName, "layer out of range"); | |
| 253 return false; | |
| 254 } | |
| 255 switch (target) { | |
| 256 case GL_TEXTURE_3D: | |
| 257 if (layer > m_max3DTextureSize - 1) { | |
| 258 synthesizeGLError(GL_INVALID_VALUE, functionName, "layer out of rang e"); | |
| 259 return false; | |
| 260 } | |
| 261 break; | |
| 262 case GL_TEXTURE_2D_ARRAY: | |
| 263 if (layer > m_maxArrayTextureLayers - 1) { | |
| 264 synthesizeGLError(GL_INVALID_VALUE, functionName, "layer out of rang e"); | |
| 265 return false; | |
| 266 } | |
| 267 break; | |
| 268 default: | |
| 269 ASSERT_NOT_REACHED(); | |
| 270 return false; | |
| 271 } | |
| 272 return true; | |
| 273 } | |
| 274 | |
| 275 void WebGL2RenderingContextBase::framebufferTextureLayer(ScriptState* scriptStat e, GLenum target, GLenum attachment, WebGLTexture* texture, GLint level, GLint l ayer) | |
| 276 { | |
| 277 if (isContextLost() || !validateFramebufferFuncParameters("framebufferTextur eLayer", target, attachment)) | |
| 249 return; | 278 return; |
| 250 | |
| 251 if (texture && !texture->validate(contextGroup(), this)) { | 279 if (texture && !texture->validate(contextGroup(), this)) { |
| 252 synthesizeGLError(GL_INVALID_VALUE, "framebufferTextureLayer", "no textu re or texture not from this context"); | 280 synthesizeGLError(GL_INVALID_VALUE, "framebufferTextureLayer", "no textu re or texture not from this context"); |
| 253 return; | 281 return; |
| 254 } | 282 } |
| 283 GLenum textarget = texture ? texture->getTarget() : 0; | |
| 284 if (texture) { | |
| 285 if (!validateTextureLayer("framebufferTextureLayer", textarget, layer)) | |
| 286 return; | |
| 287 if (textarget != GL_TEXTURE_3D && textarget != GL_TEXTURE_2D_ARRAY) { | |
| 288 synthesizeGLError(GL_INVALID_VALUE, "framebufferTextureLayer", "inva lid texture target"); | |
|
Zhenyao Mo
2015/10/27 21:21:31
This should be INVALID_OPERATION.
Message should b
qiankun
2015/10/27 23:25:27
I will fix this.
qiankun
2015/10/27 23:55:59
Done.
| |
| 289 return; | |
| 290 } | |
| 291 if (!validateTexFuncLevel("framebufferTextureLayer", textarget, level)) | |
|
Zhenyao Mo
2015/10/27 21:21:31
You need to update validateTexFuncLevel() (in turn
qiankun
2015/10/27 23:25:27
WebGL2RenderingContextBase::getMaxTextureLevelForT
Zhenyao Mo
2015/10/27 23:40:28
You are right. Code search points me to the WebGL
| |
| 292 return; | |
| 293 } | |
| 255 | 294 |
| 295 WebGLFramebuffer* framebufferBinding = getFramebufferBinding(target); | |
| 296 if (!framebufferBinding || !framebufferBinding->object()) { | |
| 297 synthesizeGLError(GL_INVALID_OPERATION, "framebufferTextureLayer", "no f ramebuffer bound"); | |
| 298 return; | |
| 299 } | |
| 256 webContext()->framebufferTextureLayer(target, attachment, objectOrZero(textu re), level, layer); | 300 webContext()->framebufferTextureLayer(target, attachment, objectOrZero(textu re), level, layer); |
| 301 framebufferBinding->setAttachmentForBoundFramebuffer(target, attachment, tex target, texture, level, layer); | |
| 302 applyStencilTest(); | |
| 303 preserveObjectWrapper(scriptState, framebufferBinding, "attachment", attachm ent, texture); | |
| 257 } | 304 } |
| 258 | 305 |
| 259 ScriptValue WebGL2RenderingContextBase::getInternalformatParameter(ScriptState* scriptState, GLenum target, GLenum internalformat, GLenum pname) | 306 ScriptValue WebGL2RenderingContextBase::getInternalformatParameter(ScriptState* scriptState, GLenum target, GLenum internalformat, GLenum pname) |
| 260 { | 307 { |
| 261 if (isContextLost()) | 308 if (isContextLost()) |
| 262 return ScriptValue::createNull(scriptState); | 309 return ScriptValue::createNull(scriptState); |
| 263 | 310 |
| 264 if (target != GL_RENDERBUFFER) { | 311 if (target != GL_RENDERBUFFER) { |
| 265 synthesizeGLError(GL_INVALID_ENUM, "getInternalformatParameter", "invali d target"); | 312 synthesizeGLError(GL_INVALID_ENUM, "getInternalformatParameter", "invali d target"); |
| 266 return ScriptValue::createNull(scriptState); | 313 return ScriptValue::createNull(scriptState); |
| (...skipping 2556 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2823 tex = m_textureUnits[m_activeTextureUnit].m_texture3DBinding.get(); | 2870 tex = m_textureUnits[m_activeTextureUnit].m_texture3DBinding.get(); |
| 2824 if (!tex) | 2871 if (!tex) |
| 2825 synthesizeGLError(GL_INVALID_OPERATION, functionName, "no texture bo und to GL_TEXTURE_3D"); | 2872 synthesizeGLError(GL_INVALID_OPERATION, functionName, "no texture bo und to GL_TEXTURE_3D"); |
| 2826 break; | 2873 break; |
| 2827 default: | 2874 default: |
| 2828 return WebGLRenderingContextBase::validateTextureBinding(functionName, t arget, useSixEnumsForCubeMap); | 2875 return WebGLRenderingContextBase::validateTextureBinding(functionName, t arget, useSixEnumsForCubeMap); |
| 2829 } | 2876 } |
| 2830 return tex; | 2877 return tex; |
| 2831 } | 2878 } |
| 2832 | 2879 |
| 2833 GLint WebGL2RenderingContextBase::getMaxTextureLevelForTarget(GLenum target) | 2880 GLint WebGL2RenderingContextBase::getMaxTextureLevelForTarget(GLenum target) |
|
qiankun
2015/10/27 23:25:27
It overrides the implementation in WebGLRenderingC
| |
| 2834 { | 2881 { |
| 2835 switch (target) { | 2882 switch (target) { |
| 2836 case GL_TEXTURE_3D: | 2883 case GL_TEXTURE_3D: |
| 2837 return m_max3DTextureLevel; | 2884 return m_max3DTextureLevel; |
| 2838 case GL_TEXTURE_2D_ARRAY: | 2885 case GL_TEXTURE_2D_ARRAY: |
| 2839 return m_maxTextureLevel; | 2886 return m_maxTextureLevel; |
| 2840 } | 2887 } |
| 2841 return WebGLRenderingContextBase::getMaxTextureLevelForTarget(target); | 2888 return WebGLRenderingContextBase::getMaxTextureLevelForTarget(target); |
| 2842 } | 2889 } |
| 2843 | 2890 |
| (...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2962 GLenum WebGL2RenderingContextBase::boundFramebufferColorFormat() | 3009 GLenum WebGL2RenderingContextBase::boundFramebufferColorFormat() |
| 2963 { | 3010 { |
| 2964 if (m_readFramebufferBinding && m_readFramebufferBinding->object()) | 3011 if (m_readFramebufferBinding && m_readFramebufferBinding->object()) |
| 2965 return m_readFramebufferBinding->colorBufferFormat(); | 3012 return m_readFramebufferBinding->colorBufferFormat(); |
| 2966 if (m_requestedAttributes.alpha()) | 3013 if (m_requestedAttributes.alpha()) |
| 2967 return GL_RGBA; | 3014 return GL_RGBA; |
| 2968 return GL_RGB; | 3015 return GL_RGB; |
| 2969 } | 3016 } |
| 2970 | 3017 |
| 2971 } // namespace blink | 3018 } // namespace blink |
| OLD | NEW |