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 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 77 | 77 |
| 78 m_max3DTextureSize = 0; | 78 m_max3DTextureSize = 0; |
| 79 webContext()->getIntegerv(GL_MAX_3D_TEXTURE_SIZE, &m_max3DTextureSize); | 79 webContext()->getIntegerv(GL_MAX_3D_TEXTURE_SIZE, &m_max3DTextureSize); |
| 80 m_max3DTextureLevel = WebGLTexture::computeLevelCount(m_max3DTextureSize, m_ max3DTextureSize, m_max3DTextureSize); | 80 m_max3DTextureLevel = WebGLTexture::computeLevelCount(m_max3DTextureSize, m_ max3DTextureSize, m_max3DTextureSize); |
| 81 | 81 |
| 82 GLint numCombinedTextureImageUnits = 0; | 82 GLint numCombinedTextureImageUnits = 0; |
| 83 webContext()->getIntegerv(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, &numCombinedT extureImageUnits); | 83 webContext()->getIntegerv(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, &numCombinedT extureImageUnits); |
| 84 m_samplerUnits.clear(); | 84 m_samplerUnits.clear(); |
| 85 m_samplerUnits.resize(numCombinedTextureImageUnits); | 85 m_samplerUnits.resize(numCombinedTextureImageUnits); |
| 86 | 86 |
| 87 GLint maxTransformFeedbackSeparateAttribs; | |
|
Zhenyao Mo
2015/09/04 18:10:44
initialize it 0
| |
| 88 webContext()->getIntegerv(GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS, &maxTr ansformFeedbackSeparateAttribs); | |
| 89 m_boundIndexedTransformFeedbackBuffers.clear(); | |
| 90 m_boundIndexedTransformFeedbackBuffers.resize(maxTransformFeedbackSeparateAt tribs); | |
| 91 | |
| 92 GLint maxUniformBufferBindings = 0; | |
| 93 webContext()->getIntegerv(GL_MAX_UNIFORM_BUFFER_BINDINGS, &maxUniformBufferB indings); | |
| 94 m_boundIndexedUniformBuffers.clear(); | |
| 95 m_boundIndexedUniformBuffers.resize(maxUniformBufferBindings); | |
| 96 | |
| 87 WebGLRenderingContextBase::initializeNewContext(); | 97 WebGLRenderingContextBase::initializeNewContext(); |
| 88 } | 98 } |
| 89 | 99 |
| 90 void WebGL2RenderingContextBase::copyBufferSubData(GLenum readTarget, GLenum wri teTarget, long long readOffset, long long writeOffset, long long size) | 100 void WebGL2RenderingContextBase::copyBufferSubData(GLenum readTarget, GLenum wri teTarget, long long readOffset, long long writeOffset, long long size) |
| 91 { | 101 { |
| 92 if (isContextLost()) | 102 if (isContextLost()) |
| 93 return; | 103 return; |
| 94 | 104 |
| 95 if (!validateValueFitNonNegInt32("copyBufferSubData", "readOffset", readOffs et) | 105 if (!validateValueFitNonNegInt32("copyBufferSubData", "readOffset", readOffs et) |
| 96 || !validateValueFitNonNegInt32("copyBufferSubData", "writeOffset", writ eOffset) | 106 || !validateValueFitNonNegInt32("copyBufferSubData", "writeOffset", writ eOffset) |
| (...skipping 1546 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1643 | 1653 |
| 1644 void WebGL2RenderingContextBase::bindBufferBase(GLenum target, GLuint index, Web GLBuffer* buffer) | 1654 void WebGL2RenderingContextBase::bindBufferBase(GLenum target, GLuint index, Web GLBuffer* buffer) |
| 1645 { | 1655 { |
| 1646 if (isContextLost()) | 1656 if (isContextLost()) |
| 1647 return; | 1657 return; |
| 1648 bool deleted; | 1658 bool deleted; |
| 1649 if (!checkObjectToBeBound("bindBufferBase", buffer, deleted)) | 1659 if (!checkObjectToBeBound("bindBufferBase", buffer, deleted)) |
| 1650 return; | 1660 return; |
| 1651 if (deleted) | 1661 if (deleted) |
| 1652 buffer = 0; | 1662 buffer = 0; |
| 1663 if (!validateAndUpdateBufferBindBaseTarget("bindBufferBase", target, index, buffer)) | |
| 1664 return; | |
| 1653 webContext()->bindBufferBase(target, index, objectOrZero(buffer)); | 1665 webContext()->bindBufferBase(target, index, objectOrZero(buffer)); |
| 1654 } | 1666 } |
| 1655 | 1667 |
| 1656 void WebGL2RenderingContextBase::bindBufferRange(GLenum target, GLuint index, We bGLBuffer* buffer, long long offset, long long size) | 1668 void WebGL2RenderingContextBase::bindBufferRange(GLenum target, GLuint index, We bGLBuffer* buffer, long long offset, long long size) |
| 1657 { | 1669 { |
| 1658 if (isContextLost() || !validateWebGLObject("bindBufferRange", buffer)) | 1670 if (isContextLost()) |
| 1659 return; | 1671 return; |
| 1660 | 1672 bool deleted; |
| 1673 if (!checkObjectToBeBound("bindBufferRange", buffer, deleted)) | |
| 1674 return; | |
| 1675 if (deleted) | |
| 1676 buffer = 0; | |
| 1661 if (!validateValueFitNonNegInt32("bindBufferRange", "offset", offset) | 1677 if (!validateValueFitNonNegInt32("bindBufferRange", "offset", offset) |
| 1662 || !validateValueFitNonNegInt32("bindBufferRange", "size", size)) { | 1678 || !validateValueFitNonNegInt32("bindBufferRange", "size", size)) { |
| 1663 return; | 1679 return; |
| 1664 } | 1680 } |
| 1665 | 1681 |
| 1682 if (!validateAndUpdateBufferBindBaseTarget("bindBufferRange", target, index, buffer)) | |
| 1683 return; | |
| 1684 | |
| 1666 webContext()->bindBufferRange(target, index, objectOrZero(buffer), static_ca st<GLintptr>(offset), static_cast<GLsizeiptr>(size)); | 1685 webContext()->bindBufferRange(target, index, objectOrZero(buffer), static_ca st<GLintptr>(offset), static_cast<GLsizeiptr>(size)); |
| 1667 } | 1686 } |
| 1668 | 1687 |
| 1669 ScriptValue WebGL2RenderingContextBase::getIndexedParameter(ScriptState* scriptS tate, GLenum target, GLuint index) | 1688 ScriptValue WebGL2RenderingContextBase::getIndexedParameter(ScriptState* scriptS tate, GLenum target, GLuint index) |
| 1670 { | 1689 { |
| 1671 if (isContextLost()) | 1690 if (isContextLost()) |
| 1672 return ScriptValue::createNull(scriptState); | 1691 return ScriptValue::createNull(scriptState); |
| 1673 | 1692 |
| 1674 switch (target) { | 1693 switch (target) { |
| 1675 case GL_TRANSFORM_FEEDBACK_BUFFER_BINDING: | 1694 case GL_TRANSFORM_FEEDBACK_BUFFER_BINDING: |
| 1695 if (index >= m_boundIndexedTransformFeedbackBuffers.size()) { | |
| 1696 synthesizeGLError(GL_INVALID_VALUE, "getIndexedParameter", "index ou t of range"); | |
| 1697 return ScriptValue::createNull(scriptState); | |
| 1698 } | |
| 1699 return WebGLAny(scriptState, m_boundIndexedTransformFeedbackBuffers[inde x].get()); | |
| 1676 case GL_UNIFORM_BUFFER_BINDING: | 1700 case GL_UNIFORM_BUFFER_BINDING: |
| 1677 notImplemented(); | 1701 if (index >= m_boundIndexedUniformBuffers.size()) { |
| 1678 return ScriptValue::createNull(scriptState); | 1702 synthesizeGLError(GL_INVALID_VALUE, "getIndexedParameter", "index ou t of range"); |
| 1703 return ScriptValue::createNull(scriptState); | |
| 1704 } | |
| 1705 return WebGLAny(scriptState, m_boundIndexedUniformBuffers[index].get()); | |
| 1679 case GL_TRANSFORM_FEEDBACK_BUFFER_SIZE: | 1706 case GL_TRANSFORM_FEEDBACK_BUFFER_SIZE: |
| 1680 case GL_TRANSFORM_FEEDBACK_BUFFER_START: | 1707 case GL_TRANSFORM_FEEDBACK_BUFFER_START: |
| 1681 case GL_UNIFORM_BUFFER_SIZE: | 1708 case GL_UNIFORM_BUFFER_SIZE: |
| 1682 case GL_UNIFORM_BUFFER_START: | 1709 case GL_UNIFORM_BUFFER_START: |
| 1683 { | 1710 { |
| 1684 GLint64 value = -1; | 1711 GLint64 value = -1; |
| 1685 webContext()->getInteger64i_v(target, index, &value); | 1712 webContext()->getInteger64i_v(target, index, &value); |
| 1686 return WebGLAny(scriptState, value); | 1713 return WebGLAny(scriptState, value); |
| 1687 } | 1714 } |
| 1688 default: | 1715 default: |
| (...skipping 359 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2048 bool WebGL2RenderingContextBase::validateCapability(const char* functionName, GL enum cap) | 2075 bool WebGL2RenderingContextBase::validateCapability(const char* functionName, GL enum cap) |
| 2049 { | 2076 { |
| 2050 switch (cap) { | 2077 switch (cap) { |
| 2051 case GL_RASTERIZER_DISCARD: | 2078 case GL_RASTERIZER_DISCARD: |
| 2052 return true; | 2079 return true; |
| 2053 default: | 2080 default: |
| 2054 return WebGLRenderingContextBase::validateCapability(functionName, cap); | 2081 return WebGLRenderingContextBase::validateCapability(functionName, cap); |
| 2055 } | 2082 } |
| 2056 } | 2083 } |
| 2057 | 2084 |
| 2085 bool WebGL2RenderingContextBase::isBufferBoundToTransformFeedback(WebGLBuffer* b uffer) | |
| 2086 { | |
|
Zhenyao Mo
2015/09/04 18:10:44
The comparison only makes sense if buffer != nullp
| |
| 2087 if (m_boundTransformFeedbackBuffer == buffer) | |
| 2088 return true; | |
| 2089 | |
| 2090 for (size_t i = 0; i < m_boundIndexedTransformFeedbackBuffers.size(); ++i) { | |
| 2091 if (m_boundIndexedTransformFeedbackBuffers[i] == buffer) { | |
| 2092 return true; | |
| 2093 } | |
| 2094 } | |
| 2095 | |
| 2096 return false; | |
| 2097 } | |
| 2098 | |
| 2099 bool WebGL2RenderingContextBase::isBufferBoundToNonTransformFeedback(WebGLBuffer * buffer) | |
| 2100 { | |
|
Zhenyao Mo
2015/09/04 18:10:44
ASSERT(buffer)
| |
| 2101 if (m_boundArrayBuffer == buffer | |
| 2102 || m_boundVertexArrayObject->boundElementArrayBuffer() == buffer | |
| 2103 || m_boundCopyReadBuffer == buffer | |
| 2104 || m_boundCopyWriteBuffer == buffer | |
| 2105 || m_boundPixelPackBuffer == buffer | |
| 2106 || m_boundPixelUnpackBuffer == buffer | |
| 2107 || m_boundUniformBuffer == buffer) { | |
| 2108 return true; | |
| 2109 } | |
| 2110 | |
| 2111 for (size_t i = 0; i < m_boundIndexedUniformBuffers.size(); ++i) { | |
| 2112 if (m_boundIndexedUniformBuffers[i] == buffer) { | |
| 2113 return true; | |
| 2114 } | |
| 2115 } | |
| 2116 | |
| 2117 return false; | |
| 2118 } | |
| 2119 | |
| 2120 bool WebGL2RenderingContextBase::validateBufferTargetCompatiblity(const char* fu nctionName, GLenum target, WebGLBuffer* buffer) | |
| 2121 { | |
|
Zhenyao Mo
2015/09/04 18:10:44
ASSERT(buffer)
| |
| 2122 switch (buffer->getInitialTarget()) { | |
| 2123 case GL_ELEMENT_ARRAY_BUFFER: | |
| 2124 switch (target) { | |
| 2125 case GL_ARRAY_BUFFER: | |
| 2126 case GL_PIXEL_PACK_BUFFER: | |
| 2127 case GL_PIXEL_UNPACK_BUFFER: | |
| 2128 case GL_TRANSFORM_FEEDBACK_BUFFER: | |
| 2129 case GL_UNIFORM_BUFFER: | |
| 2130 synthesizeGLError(GL_INVALID_OPERATION, functionName, | |
| 2131 "element array buffers can not be bound to a different target"); | |
| 2132 | |
| 2133 return false; | |
| 2134 default: | |
| 2135 break; | |
| 2136 } | |
| 2137 break; | |
| 2138 case GL_ARRAY_BUFFER: | |
| 2139 case GL_COPY_READ_BUFFER: | |
| 2140 case GL_COPY_WRITE_BUFFER: | |
| 2141 case GL_PIXEL_PACK_BUFFER: | |
| 2142 case GL_PIXEL_UNPACK_BUFFER: | |
| 2143 case GL_UNIFORM_BUFFER: | |
| 2144 case GL_TRANSFORM_FEEDBACK_BUFFER: | |
| 2145 if (target == GL_ELEMENT_ARRAY_BUFFER) { | |
| 2146 synthesizeGLError(GL_INVALID_OPERATION, functionName, | |
| 2147 "buffers bound to non ELEMENT_ARRAY_BUFFER targets can not be bo und to ELEMENT_ARRAY_BUFFER target"); | |
| 2148 return false; | |
| 2149 } | |
| 2150 break; | |
| 2151 default: | |
| 2152 break; | |
| 2153 } | |
| 2154 | |
| 2155 if (target == GL_TRANSFORM_FEEDBACK_BUFFER && isBufferBoundToNonTransformFee dback(buffer)) { | |
| 2156 synthesizeGLError(GL_INVALID_OPERATION, functionName, | |
| 2157 "a buffer bound to TRANSFORM_FEEDBACK_BUFFER can not be bound to any other targets"); | |
| 2158 return false; | |
| 2159 } | |
| 2160 if (isBufferBoundToTransformFeedback(buffer)) { | |
|
Zhenyao Mo
2015/09/04 18:10:44
you can combine this with the previous if clause w
| |
| 2161 synthesizeGLError(GL_INVALID_OPERATION, functionName, | |
| 2162 "a buffer bound to TRANSFORM_FEEDBACK_BUFFER can not be bound to any other targets"); | |
| 2163 return false; | |
| 2164 } | |
| 2165 | |
| 2166 return true; | |
| 2167 } | |
| 2168 | |
| 2058 bool WebGL2RenderingContextBase::validateBufferTarget(const char* functionName, GLenum target) | 2169 bool WebGL2RenderingContextBase::validateBufferTarget(const char* functionName, GLenum target) |
| 2059 { | 2170 { |
| 2060 switch (target) { | 2171 switch (target) { |
| 2061 case GL_ARRAY_BUFFER: | 2172 case GL_ARRAY_BUFFER: |
| 2062 case GL_COPY_READ_BUFFER: | 2173 case GL_COPY_READ_BUFFER: |
| 2063 case GL_COPY_WRITE_BUFFER: | 2174 case GL_COPY_WRITE_BUFFER: |
| 2064 case GL_ELEMENT_ARRAY_BUFFER: | 2175 case GL_ELEMENT_ARRAY_BUFFER: |
| 2065 case GL_PIXEL_PACK_BUFFER: | 2176 case GL_PIXEL_PACK_BUFFER: |
| 2066 case GL_PIXEL_UNPACK_BUFFER: | 2177 case GL_PIXEL_UNPACK_BUFFER: |
| 2067 case GL_TRANSFORM_FEEDBACK_BUFFER: | 2178 case GL_TRANSFORM_FEEDBACK_BUFFER: |
| 2068 case GL_UNIFORM_BUFFER: | 2179 case GL_UNIFORM_BUFFER: |
| 2069 return true; | 2180 return true; |
| 2070 default: | 2181 default: |
| 2071 synthesizeGLError(GL_INVALID_ENUM, functionName, "invalid target"); | 2182 synthesizeGLError(GL_INVALID_ENUM, functionName, "invalid target"); |
| 2072 return false; | 2183 return false; |
| 2073 } | 2184 } |
| 2074 } | 2185 } |
| 2075 | 2186 |
| 2076 bool WebGL2RenderingContextBase::validateAndUpdateBufferBindTarget(const char* f unctionName, GLenum target, WebGLBuffer* buffer) | 2187 bool WebGL2RenderingContextBase::validateAndUpdateBufferBindTarget(const char* f unctionName, GLenum target, WebGLBuffer* buffer) |
| 2077 { | 2188 { |
| 2078 if (!validateBufferTarget(functionName, target)) | 2189 if (!validateBufferTarget(functionName, target)) |
| 2079 return false; | 2190 return false; |
| 2080 | 2191 |
| 2081 if (buffer) { | 2192 if (buffer && !validateBufferTargetCompatiblity(functionName, target, buffer )) |
| 2082 switch (buffer->getInitialTarget()) { | 2193 return false; |
| 2083 case GL_ELEMENT_ARRAY_BUFFER: | |
| 2084 switch (target) { | |
| 2085 case GL_ARRAY_BUFFER: | |
| 2086 case GL_PIXEL_PACK_BUFFER: | |
| 2087 case GL_PIXEL_UNPACK_BUFFER: | |
| 2088 case GL_TRANSFORM_FEEDBACK_BUFFER: | |
| 2089 case GL_UNIFORM_BUFFER: | |
| 2090 synthesizeGLError(GL_INVALID_OPERATION, functionName, | |
| 2091 "element array buffers can not be bound to a different targe t"); | |
| 2092 | |
| 2093 return false; | |
| 2094 default: | |
| 2095 break; | |
| 2096 } | |
| 2097 break; | |
| 2098 case GL_ARRAY_BUFFER: | |
| 2099 case GL_COPY_READ_BUFFER: | |
| 2100 case GL_COPY_WRITE_BUFFER: | |
| 2101 case GL_PIXEL_PACK_BUFFER: | |
| 2102 case GL_PIXEL_UNPACK_BUFFER: | |
| 2103 case GL_UNIFORM_BUFFER: | |
| 2104 case GL_TRANSFORM_FEEDBACK_BUFFER: | |
| 2105 if (target == GL_ELEMENT_ARRAY_BUFFER) { | |
| 2106 synthesizeGLError(GL_INVALID_OPERATION, functionName, | |
| 2107 "buffers bound to non ELEMENT_ARRAY_BUFFER targets can not b e bound to ELEMENT_ARRAY_BUFFER target"); | |
| 2108 return false; | |
| 2109 } | |
| 2110 break; | |
| 2111 default: | |
| 2112 break; | |
| 2113 } | |
| 2114 if (target == GL_TRANSFORM_FEEDBACK_BUFFER) { | |
| 2115 if (m_boundArrayBuffer == buffer | |
| 2116 || m_boundVertexArrayObject->boundElementArrayBuffer() == buffer | |
| 2117 || m_boundCopyReadBuffer == buffer | |
| 2118 || m_boundCopyWriteBuffer == buffer | |
| 2119 || m_boundPixelPackBuffer == buffer | |
| 2120 || m_boundPixelUnpackBuffer == buffer | |
| 2121 || m_boundUniformBuffer == buffer) { | |
| 2122 synthesizeGLError(GL_INVALID_OPERATION, functionName, | |
| 2123 "a buffer bound to TRANSFORM_FEEDBACK_BUFFER can not be boun d to any other targets"); | |
| 2124 return false; | |
| 2125 } | |
| 2126 } else if (m_boundTransformFeedbackBuffer == buffer) { | |
| 2127 synthesizeGLError(GL_INVALID_OPERATION, functionName, | |
| 2128 "a buffer bound to TRANSFORM_FEEDBACK_BUFFER can not be bound to any other targets"); | |
| 2129 return false; | |
| 2130 } | |
| 2131 } | |
| 2132 | 2194 |
| 2133 switch (target) { | 2195 switch (target) { |
| 2134 case GL_ARRAY_BUFFER: | 2196 case GL_ARRAY_BUFFER: |
| 2135 m_boundArrayBuffer = buffer; | 2197 m_boundArrayBuffer = buffer; |
| 2136 break; | 2198 break; |
| 2137 case GL_COPY_READ_BUFFER: | 2199 case GL_COPY_READ_BUFFER: |
| 2138 m_boundCopyReadBuffer = buffer; | 2200 m_boundCopyReadBuffer = buffer; |
| 2139 break; | 2201 break; |
| 2140 case GL_COPY_WRITE_BUFFER: | 2202 case GL_COPY_WRITE_BUFFER: |
| 2141 m_boundCopyWriteBuffer = buffer; | 2203 m_boundCopyWriteBuffer = buffer; |
| (...skipping 16 matching lines...) Expand all Loading... | |
| 2158 default: | 2220 default: |
| 2159 ASSERT_NOT_REACHED(); | 2221 ASSERT_NOT_REACHED(); |
| 2160 break; | 2222 break; |
| 2161 } | 2223 } |
| 2162 | 2224 |
| 2163 if (buffer && !buffer->getInitialTarget()) | 2225 if (buffer && !buffer->getInitialTarget()) |
| 2164 buffer->setInitialTarget(target); | 2226 buffer->setInitialTarget(target); |
| 2165 return true; | 2227 return true; |
| 2166 } | 2228 } |
| 2167 | 2229 |
| 2230 bool WebGL2RenderingContextBase::validateBufferBaseTarget(const char* functionNa me, GLenum target) | |
| 2231 { | |
| 2232 switch (target) { | |
| 2233 case GL_TRANSFORM_FEEDBACK_BUFFER: | |
| 2234 case GL_UNIFORM_BUFFER: | |
| 2235 return true; | |
| 2236 default: | |
| 2237 synthesizeGLError(GL_INVALID_ENUM, functionName, "invalid target"); | |
| 2238 return false; | |
| 2239 } | |
| 2240 } | |
| 2241 | |
| 2242 bool WebGL2RenderingContextBase::validateAndUpdateBufferBindBaseTarget(const cha r* functionName, GLenum target, GLuint index, WebGLBuffer* buffer) | |
| 2243 { | |
| 2244 if (!validateBufferBaseTarget(functionName, target)) | |
| 2245 return false; | |
| 2246 | |
| 2247 if (buffer && !validateBufferTargetCompatiblity(functionName, target, buffer )) | |
| 2248 return false; | |
| 2249 | |
| 2250 switch (target) { | |
| 2251 case GL_TRANSFORM_FEEDBACK_BUFFER: | |
| 2252 if (index >= m_boundIndexedTransformFeedbackBuffers.size()) { | |
| 2253 synthesizeGLError(GL_INVALID_OPERATION, functionName, "index out of range"); | |
| 2254 return false; | |
| 2255 } | |
| 2256 m_boundIndexedTransformFeedbackBuffers[index] = buffer; | |
| 2257 m_boundTransformFeedbackBuffer = buffer; | |
| 2258 break; | |
| 2259 case GL_UNIFORM_BUFFER: | |
| 2260 if (index >= m_boundIndexedUniformBuffers.size()) { | |
| 2261 synthesizeGLError(GL_INVALID_OPERATION, functionName, "index out of range"); | |
| 2262 return false; | |
| 2263 } | |
| 2264 m_boundIndexedUniformBuffers[index] = buffer; | |
| 2265 m_boundUniformBuffer = buffer; | |
| 2266 break; | |
| 2267 default: | |
| 2268 ASSERT_NOT_REACHED(); | |
| 2269 break; | |
| 2270 } | |
| 2271 | |
| 2272 if (buffer && !buffer->getInitialTarget()) | |
| 2273 buffer->setInitialTarget(target); | |
| 2274 return true; | |
| 2275 } | |
| 2276 | |
| 2168 bool WebGL2RenderingContextBase::validateFramebufferTarget(GLenum target) | 2277 bool WebGL2RenderingContextBase::validateFramebufferTarget(GLenum target) |
| 2169 { | 2278 { |
| 2170 switch (target) { | 2279 switch (target) { |
| 2171 case GL_FRAMEBUFFER: | 2280 case GL_FRAMEBUFFER: |
| 2172 case GL_READ_FRAMEBUFFER: | 2281 case GL_READ_FRAMEBUFFER: |
| 2173 case GL_DRAW_FRAMEBUFFER: | 2282 case GL_DRAW_FRAMEBUFFER: |
| 2174 return true; | 2283 return true; |
| 2175 default: | 2284 default: |
| 2176 return false; | 2285 return false; |
| 2177 } | 2286 } |
| (...skipping 367 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2545 GLenum WebGL2RenderingContextBase::boundFramebufferColorFormat() | 2654 GLenum WebGL2RenderingContextBase::boundFramebufferColorFormat() |
| 2546 { | 2655 { |
| 2547 if (m_readFramebufferBinding && m_readFramebufferBinding->object()) | 2656 if (m_readFramebufferBinding && m_readFramebufferBinding->object()) |
| 2548 return m_readFramebufferBinding->colorBufferFormat(); | 2657 return m_readFramebufferBinding->colorBufferFormat(); |
| 2549 if (m_requestedAttributes.alpha()) | 2658 if (m_requestedAttributes.alpha()) |
| 2550 return GL_RGBA; | 2659 return GL_RGBA; |
| 2551 return GL_RGB; | 2660 return GL_RGB; |
| 2552 } | 2661 } |
| 2553 | 2662 |
| 2554 } // namespace blink | 2663 } // namespace blink |
| OLD | NEW |