| 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 "modules/webgl/WebGL2RenderingContextBase.h" | 5 #include "modules/webgl/WebGL2RenderingContextBase.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 #include "bindings/modules/v8/WebGLAny.h" | 8 #include "bindings/modules/v8/WebGLAny.h" |
| 9 #include "core/frame/ImageBitmap.h" | 9 #include "core/frame/ImageBitmap.h" |
| 10 #include "core/html/HTMLCanvasElement.h" | 10 #include "core/html/HTMLCanvasElement.h" |
| (...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 147 : WebGLRenderingContextBase(passed_canvas, | 147 : WebGLRenderingContextBase(passed_canvas, |
| 148 std::move(context_provider), | 148 std::move(context_provider), |
| 149 requested_attributes, | 149 requested_attributes, |
| 150 2), | 150 2), |
| 151 read_framebuffer_binding_(this, nullptr), | 151 read_framebuffer_binding_(this, nullptr), |
| 152 transform_feedback_binding_(this, nullptr), | 152 transform_feedback_binding_(this, nullptr), |
| 153 bound_copy_read_buffer_(this, nullptr), | 153 bound_copy_read_buffer_(this, nullptr), |
| 154 bound_copy_write_buffer_(this, nullptr), | 154 bound_copy_write_buffer_(this, nullptr), |
| 155 bound_pixel_pack_buffer_(this, nullptr), | 155 bound_pixel_pack_buffer_(this, nullptr), |
| 156 bound_pixel_unpack_buffer_(this, nullptr), | 156 bound_pixel_unpack_buffer_(this, nullptr), |
| 157 bound_transform_feedback_buffer_(this, nullptr), | |
| 158 bound_uniform_buffer_(this, nullptr), | 157 bound_uniform_buffer_(this, nullptr), |
| 159 current_boolean_occlusion_query_(this, nullptr), | 158 current_boolean_occlusion_query_(this, nullptr), |
| 160 current_transform_feedback_primitives_written_query_(this, nullptr), | 159 current_transform_feedback_primitives_written_query_(this, nullptr), |
| 161 current_elapsed_query_(this, nullptr) { | 160 current_elapsed_query_(this, nullptr) { |
| 162 supported_internal_formats_storage_.insert( | 161 supported_internal_formats_storage_.insert( |
| 163 kSupportedInternalFormatsStorage, | 162 kSupportedInternalFormatsStorage, |
| 164 kSupportedInternalFormatsStorage + | 163 kSupportedInternalFormatsStorage + |
| 165 WTF_ARRAY_LENGTH(kSupportedInternalFormatsStorage)); | 164 WTF_ARRAY_LENGTH(kSupportedInternalFormatsStorage)); |
| 166 } | 165 } |
| 167 | 166 |
| 168 WebGL2RenderingContextBase::WebGL2RenderingContextBase( | 167 WebGL2RenderingContextBase::WebGL2RenderingContextBase( |
| 169 OffscreenCanvas* passed_offscreen_canvas, | 168 OffscreenCanvas* passed_offscreen_canvas, |
| 170 std::unique_ptr<WebGraphicsContext3DProvider> context_provider, | 169 std::unique_ptr<WebGraphicsContext3DProvider> context_provider, |
| 171 const CanvasContextCreationAttributes& requested_attributes) | 170 const CanvasContextCreationAttributes& requested_attributes) |
| 172 : WebGLRenderingContextBase(passed_offscreen_canvas, | 171 : WebGLRenderingContextBase(passed_offscreen_canvas, |
| 173 std::move(context_provider), | 172 std::move(context_provider), |
| 174 requested_attributes, | 173 requested_attributes, |
| 175 2), | 174 2), |
| 176 read_framebuffer_binding_(this, nullptr), | 175 read_framebuffer_binding_(this, nullptr), |
| 177 transform_feedback_binding_(this, nullptr), | 176 transform_feedback_binding_(this, nullptr), |
| 178 bound_copy_read_buffer_(this, nullptr), | 177 bound_copy_read_buffer_(this, nullptr), |
| 179 bound_copy_write_buffer_(this, nullptr), | 178 bound_copy_write_buffer_(this, nullptr), |
| 180 bound_pixel_pack_buffer_(this, nullptr), | 179 bound_pixel_pack_buffer_(this, nullptr), |
| 181 bound_pixel_unpack_buffer_(this, nullptr), | 180 bound_pixel_unpack_buffer_(this, nullptr), |
| 182 bound_transform_feedback_buffer_(this, nullptr), | |
| 183 bound_uniform_buffer_(this, nullptr), | 181 bound_uniform_buffer_(this, nullptr), |
| 184 current_boolean_occlusion_query_(this, nullptr), | 182 current_boolean_occlusion_query_(this, nullptr), |
| 185 current_transform_feedback_primitives_written_query_(this, nullptr), | 183 current_transform_feedback_primitives_written_query_(this, nullptr), |
| 186 current_elapsed_query_(this, nullptr) { | 184 current_elapsed_query_(this, nullptr) { |
| 187 supported_internal_formats_storage_.insert( | 185 supported_internal_formats_storage_.insert( |
| 188 kSupportedInternalFormatsStorage, | 186 kSupportedInternalFormatsStorage, |
| 189 kSupportedInternalFormatsStorage + | 187 kSupportedInternalFormatsStorage + |
| 190 WTF_ARRAY_LENGTH(kSupportedInternalFormatsStorage)); | 188 WTF_ARRAY_LENGTH(kSupportedInternalFormatsStorage)); |
| 191 } | 189 } |
| 192 | 190 |
| 193 void WebGL2RenderingContextBase::DestroyContext() { | 191 void WebGL2RenderingContextBase::DestroyContext() { |
| 194 for (auto& callback : get_buffer_sub_data_async_callbacks_) { | 192 for (auto& callback : get_buffer_sub_data_async_callbacks_) { |
| 195 callback->Destroy(); | 193 callback->Destroy(); |
| 196 } | 194 } |
| 197 get_buffer_sub_data_async_callbacks_.Clear(); | 195 get_buffer_sub_data_async_callbacks_.Clear(); |
| 198 | 196 |
| 199 WebGLRenderingContextBase::DestroyContext(); | 197 WebGLRenderingContextBase::DestroyContext(); |
| 200 } | 198 } |
| 201 | 199 |
| 202 void WebGL2RenderingContextBase::InitializeNewContext() { | 200 void WebGL2RenderingContextBase::InitializeNewContext() { |
| 203 ASSERT(!isContextLost()); | 201 ASSERT(!isContextLost()); |
| 204 ASSERT(GetDrawingBuffer()); | 202 ASSERT(GetDrawingBuffer()); |
| 205 | 203 |
| 206 read_framebuffer_binding_ = nullptr; | 204 read_framebuffer_binding_ = nullptr; |
| 207 | 205 |
| 208 bound_copy_read_buffer_ = nullptr; | 206 bound_copy_read_buffer_ = nullptr; |
| 209 bound_copy_write_buffer_ = nullptr; | 207 bound_copy_write_buffer_ = nullptr; |
| 210 bound_pixel_pack_buffer_ = nullptr; | 208 bound_pixel_pack_buffer_ = nullptr; |
| 211 bound_pixel_unpack_buffer_ = nullptr; | 209 bound_pixel_unpack_buffer_ = nullptr; |
| 212 bound_transform_feedback_buffer_ = nullptr; | |
| 213 bound_uniform_buffer_ = nullptr; | 210 bound_uniform_buffer_ = nullptr; |
| 214 | 211 |
| 215 current_boolean_occlusion_query_ = nullptr; | 212 current_boolean_occlusion_query_ = nullptr; |
| 216 current_transform_feedback_primitives_written_query_ = nullptr; | 213 current_transform_feedback_primitives_written_query_ = nullptr; |
| 217 current_elapsed_query_ = nullptr; | 214 current_elapsed_query_ = nullptr; |
| 218 | 215 |
| 219 GLint num_combined_texture_image_units = 0; | 216 GLint num_combined_texture_image_units = 0; |
| 220 ContextGL()->GetIntegerv(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, | 217 ContextGL()->GetIntegerv(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, |
| 221 &num_combined_texture_image_units); | 218 &num_combined_texture_image_units); |
| 222 sampler_units_.clear(); | 219 sampler_units_.clear(); |
| 223 sampler_units_.Resize(num_combined_texture_image_units); | 220 sampler_units_.Resize(num_combined_texture_image_units); |
| 224 | 221 |
| 225 max_transform_feedback_separate_attribs_ = 0; | 222 max_transform_feedback_separate_attribs_ = 0; |
| 223 // This must be queried before instantiating any transform feedback |
| 224 // objects. |
| 226 ContextGL()->GetIntegerv(GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS, | 225 ContextGL()->GetIntegerv(GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS, |
| 227 &max_transform_feedback_separate_attribs_); | 226 &max_transform_feedback_separate_attribs_); |
| 228 bound_indexed_transform_feedback_buffers_.clear(); | 227 // Create a default transform feedback object so there is a place to |
| 229 bound_indexed_transform_feedback_buffers_.Resize( | 228 // hold any bound buffers. |
| 230 max_transform_feedback_separate_attribs_); | 229 default_transform_feedback_ = WebGLTransformFeedback::Create( |
| 230 this, WebGLTransformFeedback::TFTypeDefault); |
| 231 transform_feedback_binding_ = default_transform_feedback_; |
| 231 | 232 |
| 232 GLint max_uniform_buffer_bindings = 0; | 233 GLint max_uniform_buffer_bindings = 0; |
| 233 ContextGL()->GetIntegerv(GL_MAX_UNIFORM_BUFFER_BINDINGS, | 234 ContextGL()->GetIntegerv(GL_MAX_UNIFORM_BUFFER_BINDINGS, |
| 234 &max_uniform_buffer_bindings); | 235 &max_uniform_buffer_bindings); |
| 235 bound_indexed_uniform_buffers_.clear(); | 236 bound_indexed_uniform_buffers_.clear(); |
| 236 bound_indexed_uniform_buffers_.Resize(max_uniform_buffer_bindings); | 237 bound_indexed_uniform_buffers_.Resize(max_uniform_buffer_bindings); |
| 237 max_bound_uniform_buffer_index_ = 0; | 238 max_bound_uniform_buffer_index_ = 0; |
| 238 | 239 |
| 239 pack_row_length_ = 0; | 240 pack_row_length_ = 0; |
| 240 pack_skip_pixels_ = 0; | 241 pack_skip_pixels_ = 0; |
| (...skipping 3904 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4145 default: | 4146 default: |
| 4146 SynthesizeGLError(GL_INVALID_ENUM, "getSyncParameter", | 4147 SynthesizeGLError(GL_INVALID_ENUM, "getSyncParameter", |
| 4147 "invalid parameter name"); | 4148 "invalid parameter name"); |
| 4148 return ScriptValue::CreateNull(script_state); | 4149 return ScriptValue::CreateNull(script_state); |
| 4149 } | 4150 } |
| 4150 } | 4151 } |
| 4151 | 4152 |
| 4152 WebGLTransformFeedback* WebGL2RenderingContextBase::createTransformFeedback() { | 4153 WebGLTransformFeedback* WebGL2RenderingContextBase::createTransformFeedback() { |
| 4153 if (isContextLost()) | 4154 if (isContextLost()) |
| 4154 return nullptr; | 4155 return nullptr; |
| 4155 return WebGLTransformFeedback::Create(this); | 4156 return WebGLTransformFeedback::Create(this, |
| 4157 WebGLTransformFeedback::TFTypeUser); |
| 4156 } | 4158 } |
| 4157 | 4159 |
| 4158 void WebGL2RenderingContextBase::deleteTransformFeedback( | 4160 void WebGL2RenderingContextBase::deleteTransformFeedback( |
| 4159 WebGLTransformFeedback* feedback) { | 4161 WebGLTransformFeedback* feedback) { |
| 4160 if (feedback == transform_feedback_binding_) | 4162 if (feedback == transform_feedback_binding_) |
| 4161 transform_feedback_binding_ = nullptr; | 4163 transform_feedback_binding_ = default_transform_feedback_; |
| 4162 | 4164 |
| 4163 DeleteObject(feedback); | 4165 DeleteObject(feedback); |
| 4164 } | 4166 } |
| 4165 | 4167 |
| 4166 GLboolean WebGL2RenderingContextBase::isTransformFeedback( | 4168 GLboolean WebGL2RenderingContextBase::isTransformFeedback( |
| 4167 WebGLTransformFeedback* feedback) { | 4169 WebGLTransformFeedback* feedback) { |
| 4168 if (isContextLost() || !feedback) | 4170 if (isContextLost() || !feedback) |
| 4169 return 0; | 4171 return 0; |
| 4170 | 4172 |
| 4171 if (!feedback->HasEverBeenBound()) | 4173 if (!feedback->HasEverBeenBound()) |
| (...skipping 13 matching lines...) Expand all Loading... |
| 4185 "attempted to bind a deleted transform feedback object"); | 4187 "attempted to bind a deleted transform feedback object"); |
| 4186 return; | 4188 return; |
| 4187 } | 4189 } |
| 4188 | 4190 |
| 4189 if (target != GL_TRANSFORM_FEEDBACK) { | 4191 if (target != GL_TRANSFORM_FEEDBACK) { |
| 4190 SynthesizeGLError(GL_INVALID_ENUM, "bindTransformFeedback", | 4192 SynthesizeGLError(GL_INVALID_ENUM, "bindTransformFeedback", |
| 4191 "target must be TRANSFORM_FEEDBACK"); | 4193 "target must be TRANSFORM_FEEDBACK"); |
| 4192 return; | 4194 return; |
| 4193 } | 4195 } |
| 4194 | 4196 |
| 4195 transform_feedback_binding_ = feedback; | 4197 WebGLTransformFeedback* feedback_to_be_bound; |
| 4198 if (feedback) { |
| 4199 feedback_to_be_bound = feedback; |
| 4200 feedback_to_be_bound->SetTarget(target); |
| 4201 } else { |
| 4202 feedback_to_be_bound = default_transform_feedback_.Get(); |
| 4203 } |
| 4196 | 4204 |
| 4197 ContextGL()->BindTransformFeedback(target, ObjectOrZero(feedback)); | 4205 transform_feedback_binding_ = feedback_to_be_bound; |
| 4198 if (feedback) { | 4206 ContextGL()->BindTransformFeedback(target, |
| 4199 feedback->SetTarget(target); | 4207 ObjectOrZero(feedback_to_be_bound)); |
| 4200 } | |
| 4201 } | 4208 } |
| 4202 | 4209 |
| 4203 void WebGL2RenderingContextBase::beginTransformFeedback(GLenum primitive_mode) { | 4210 void WebGL2RenderingContextBase::beginTransformFeedback(GLenum primitive_mode) { |
| 4204 if (isContextLost()) | 4211 if (isContextLost()) |
| 4205 return; | 4212 return; |
| 4206 if (!ValidateTransformFeedbackPrimitiveMode("beginTransformFeedback", | 4213 if (!ValidateTransformFeedbackPrimitiveMode("beginTransformFeedback", |
| 4207 primitive_mode)) | 4214 primitive_mode)) |
| 4208 return; | 4215 return; |
| 4209 | 4216 |
| 4210 ContextGL()->BeginTransformFeedback(primitive_mode); | 4217 ContextGL()->BeginTransformFeedback(primitive_mode); |
| (...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4392 } | 4399 } |
| 4393 | 4400 |
| 4394 ScriptValue WebGL2RenderingContextBase::getIndexedParameter( | 4401 ScriptValue WebGL2RenderingContextBase::getIndexedParameter( |
| 4395 ScriptState* script_state, | 4402 ScriptState* script_state, |
| 4396 GLenum target, | 4403 GLenum target, |
| 4397 GLuint index) { | 4404 GLuint index) { |
| 4398 if (isContextLost()) | 4405 if (isContextLost()) |
| 4399 return ScriptValue::CreateNull(script_state); | 4406 return ScriptValue::CreateNull(script_state); |
| 4400 | 4407 |
| 4401 switch (target) { | 4408 switch (target) { |
| 4402 case GL_TRANSFORM_FEEDBACK_BUFFER_BINDING: | 4409 case GL_TRANSFORM_FEEDBACK_BUFFER_BINDING: { |
| 4403 if (index >= bound_indexed_transform_feedback_buffers_.size()) { | 4410 WebGLBuffer* buffer = nullptr; |
| 4411 if (!transform_feedback_binding_->GetBoundIndexedTransformFeedbackBuffer( |
| 4412 index, &buffer)) { |
| 4404 SynthesizeGLError(GL_INVALID_VALUE, "getIndexedParameter", | 4413 SynthesizeGLError(GL_INVALID_VALUE, "getIndexedParameter", |
| 4405 "index out of range"); | 4414 "index out of range"); |
| 4406 return ScriptValue::CreateNull(script_state); | 4415 return ScriptValue::CreateNull(script_state); |
| 4407 } | 4416 } |
| 4408 return WebGLAny(script_state, | 4417 return WebGLAny(script_state, buffer); |
| 4409 bound_indexed_transform_feedback_buffers_[index].Get()); | 4418 } |
| 4410 case GL_UNIFORM_BUFFER_BINDING: | 4419 case GL_UNIFORM_BUFFER_BINDING: |
| 4411 if (index >= bound_indexed_uniform_buffers_.size()) { | 4420 if (index >= bound_indexed_uniform_buffers_.size()) { |
| 4412 SynthesizeGLError(GL_INVALID_VALUE, "getIndexedParameter", | 4421 SynthesizeGLError(GL_INVALID_VALUE, "getIndexedParameter", |
| 4413 "index out of range"); | 4422 "index out of range"); |
| 4414 return ScriptValue::CreateNull(script_state); | 4423 return ScriptValue::CreateNull(script_state); |
| 4415 } | 4424 } |
| 4416 return WebGLAny(script_state, | 4425 return WebGLAny(script_state, |
| 4417 bound_indexed_uniform_buffers_[index].Get()); | 4426 bound_indexed_uniform_buffers_[index].Get()); |
| 4418 case GL_TRANSFORM_FEEDBACK_BUFFER_SIZE: | 4427 case GL_TRANSFORM_FEEDBACK_BUFFER_SIZE: |
| 4419 case GL_TRANSFORM_FEEDBACK_BUFFER_START: | 4428 case GL_TRANSFORM_FEEDBACK_BUFFER_START: |
| (...skipping 462 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4882 return WebGLAny( | 4891 return WebGLAny( |
| 4883 script_state, | 4892 script_state, |
| 4884 texture_units_[active_texture_unit_].texture2d_array_binding_.Get()); | 4893 texture_units_[active_texture_unit_].texture2d_array_binding_.Get()); |
| 4885 case GL_TEXTURE_BINDING_3D: | 4894 case GL_TEXTURE_BINDING_3D: |
| 4886 return WebGLAny( | 4895 return WebGLAny( |
| 4887 script_state, | 4896 script_state, |
| 4888 texture_units_[active_texture_unit_].texture3d_binding_.Get()); | 4897 texture_units_[active_texture_unit_].texture3d_binding_.Get()); |
| 4889 case GL_TRANSFORM_FEEDBACK_ACTIVE: | 4898 case GL_TRANSFORM_FEEDBACK_ACTIVE: |
| 4890 return GetBooleanParameter(script_state, pname); | 4899 return GetBooleanParameter(script_state, pname); |
| 4891 case GL_TRANSFORM_FEEDBACK_BUFFER_BINDING: | 4900 case GL_TRANSFORM_FEEDBACK_BUFFER_BINDING: |
| 4892 return WebGLAny(script_state, bound_transform_feedback_buffer_.Get()); | 4901 return WebGLAny( |
| 4902 script_state, |
| 4903 transform_feedback_binding_->GetBoundTransformFeedbackBuffer()); |
| 4893 case GL_TRANSFORM_FEEDBACK_BINDING: | 4904 case GL_TRANSFORM_FEEDBACK_BINDING: |
| 4894 return WebGLAny(script_state, transform_feedback_binding_.Get()); | 4905 if (!transform_feedback_binding_->IsDefaultObject()) { |
| 4906 return WebGLAny(script_state, transform_feedback_binding_.Get()); |
| 4907 } |
| 4908 return ScriptValue::CreateNull(script_state); |
| 4895 case GL_TRANSFORM_FEEDBACK_PAUSED: | 4909 case GL_TRANSFORM_FEEDBACK_PAUSED: |
| 4896 return GetBooleanParameter(script_state, pname); | 4910 return GetBooleanParameter(script_state, pname); |
| 4897 case GL_UNIFORM_BUFFER_BINDING: | 4911 case GL_UNIFORM_BUFFER_BINDING: |
| 4898 return WebGLAny(script_state, bound_uniform_buffer_.Get()); | 4912 return WebGLAny(script_state, bound_uniform_buffer_.Get()); |
| 4899 case GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT: | 4913 case GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT: |
| 4900 return GetIntParameter(script_state, pname); | 4914 return GetIntParameter(script_state, pname); |
| 4901 case GL_UNPACK_IMAGE_HEIGHT: | 4915 case GL_UNPACK_IMAGE_HEIGHT: |
| 4902 return GetIntParameter(script_state, pname); | 4916 return GetIntParameter(script_state, pname); |
| 4903 case GL_UNPACK_ROW_LENGTH: | 4917 case GL_UNPACK_ROW_LENGTH: |
| 4904 return GetIntParameter(script_state, pname); | 4918 return GetIntParameter(script_state, pname); |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4945 case GL_RASTERIZER_DISCARD: | 4959 case GL_RASTERIZER_DISCARD: |
| 4946 return true; | 4960 return true; |
| 4947 default: | 4961 default: |
| 4948 return WebGLRenderingContextBase::ValidateCapability(function_name, cap); | 4962 return WebGLRenderingContextBase::ValidateCapability(function_name, cap); |
| 4949 } | 4963 } |
| 4950 } | 4964 } |
| 4951 | 4965 |
| 4952 bool WebGL2RenderingContextBase::IsBufferBoundToTransformFeedback( | 4966 bool WebGL2RenderingContextBase::IsBufferBoundToTransformFeedback( |
| 4953 WebGLBuffer* buffer) { | 4967 WebGLBuffer* buffer) { |
| 4954 ASSERT(buffer); | 4968 ASSERT(buffer); |
| 4955 | 4969 return transform_feedback_binding_->IsBufferBoundToTransformFeedback(buffer); |
| 4956 if (bound_transform_feedback_buffer_ == buffer) | |
| 4957 return true; | |
| 4958 | |
| 4959 for (size_t i = 0; i < bound_indexed_transform_feedback_buffers_.size(); | |
| 4960 ++i) { | |
| 4961 if (bound_indexed_transform_feedback_buffers_[i] == buffer) | |
| 4962 return true; | |
| 4963 } | |
| 4964 | |
| 4965 return false; | |
| 4966 } | 4970 } |
| 4967 | 4971 |
| 4968 bool WebGL2RenderingContextBase::IsBufferBoundToNonTransformFeedback( | 4972 bool WebGL2RenderingContextBase::IsBufferBoundToNonTransformFeedback( |
| 4969 WebGLBuffer* buffer) { | 4973 WebGLBuffer* buffer) { |
| 4970 ASSERT(buffer); | 4974 ASSERT(buffer); |
| 4971 | 4975 |
| 4972 if (bound_array_buffer_ == buffer || | 4976 if (bound_array_buffer_ == buffer || |
| 4973 bound_vertex_array_object_->BoundElementArrayBuffer() == buffer || | 4977 bound_vertex_array_object_->BoundElementArrayBuffer() == buffer || |
| 4974 bound_copy_read_buffer_ == buffer || bound_copy_write_buffer_ == buffer || | 4978 bound_copy_read_buffer_ == buffer || bound_copy_write_buffer_ == buffer || |
| 4975 bound_pixel_pack_buffer_ == buffer || | 4979 bound_pixel_pack_buffer_ == buffer || |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5085 case GL_ELEMENT_ARRAY_BUFFER: | 5089 case GL_ELEMENT_ARRAY_BUFFER: |
| 5086 bound_vertex_array_object_->SetElementArrayBuffer(buffer); | 5090 bound_vertex_array_object_->SetElementArrayBuffer(buffer); |
| 5087 break; | 5091 break; |
| 5088 case GL_PIXEL_PACK_BUFFER: | 5092 case GL_PIXEL_PACK_BUFFER: |
| 5089 bound_pixel_pack_buffer_ = buffer; | 5093 bound_pixel_pack_buffer_ = buffer; |
| 5090 break; | 5094 break; |
| 5091 case GL_PIXEL_UNPACK_BUFFER: | 5095 case GL_PIXEL_UNPACK_BUFFER: |
| 5092 bound_pixel_unpack_buffer_ = buffer; | 5096 bound_pixel_unpack_buffer_ = buffer; |
| 5093 break; | 5097 break; |
| 5094 case GL_TRANSFORM_FEEDBACK_BUFFER: | 5098 case GL_TRANSFORM_FEEDBACK_BUFFER: |
| 5095 bound_transform_feedback_buffer_ = buffer; | 5099 transform_feedback_binding_->SetBoundTransformFeedbackBuffer(buffer); |
| 5096 break; | 5100 break; |
| 5097 case GL_UNIFORM_BUFFER: | 5101 case GL_UNIFORM_BUFFER: |
| 5098 bound_uniform_buffer_ = buffer; | 5102 bound_uniform_buffer_ = buffer; |
| 5099 break; | 5103 break; |
| 5100 default: | 5104 default: |
| 5101 NOTREACHED(); | 5105 NOTREACHED(); |
| 5102 break; | 5106 break; |
| 5103 } | 5107 } |
| 5104 | 5108 |
| 5105 if (buffer && !buffer->GetInitialTarget()) | 5109 if (buffer && !buffer->GetInitialTarget()) |
| (...skipping 21 matching lines...) Expand all Loading... |
| 5127 WebGLBuffer* buffer) { | 5131 WebGLBuffer* buffer) { |
| 5128 if (!ValidateBufferBaseTarget(function_name, target)) | 5132 if (!ValidateBufferBaseTarget(function_name, target)) |
| 5129 return false; | 5133 return false; |
| 5130 | 5134 |
| 5131 if (buffer && | 5135 if (buffer && |
| 5132 !ValidateBufferTargetCompatibility(function_name, target, buffer)) | 5136 !ValidateBufferTargetCompatibility(function_name, target, buffer)) |
| 5133 return false; | 5137 return false; |
| 5134 | 5138 |
| 5135 switch (target) { | 5139 switch (target) { |
| 5136 case GL_TRANSFORM_FEEDBACK_BUFFER: | 5140 case GL_TRANSFORM_FEEDBACK_BUFFER: |
| 5137 if (index >= bound_indexed_transform_feedback_buffers_.size()) { | 5141 if (!transform_feedback_binding_->SetBoundIndexedTransformFeedbackBuffer( |
| 5142 index, buffer)) { |
| 5138 SynthesizeGLError(GL_INVALID_VALUE, function_name, | 5143 SynthesizeGLError(GL_INVALID_VALUE, function_name, |
| 5139 "index out of range"); | 5144 "index out of range"); |
| 5140 return false; | 5145 return false; |
| 5141 } | 5146 } |
| 5142 bound_indexed_transform_feedback_buffers_[index] = | |
| 5143 TraceWrapperMember<WebGLBuffer>(this, buffer); | |
| 5144 bound_transform_feedback_buffer_ = buffer; | |
| 5145 break; | 5147 break; |
| 5146 case GL_UNIFORM_BUFFER: | 5148 case GL_UNIFORM_BUFFER: |
| 5147 if (index >= bound_indexed_uniform_buffers_.size()) { | 5149 if (index >= bound_indexed_uniform_buffers_.size()) { |
| 5148 SynthesizeGLError(GL_INVALID_VALUE, function_name, | 5150 SynthesizeGLError(GL_INVALID_VALUE, function_name, |
| 5149 "index out of range"); | 5151 "index out of range"); |
| 5150 return false; | 5152 return false; |
| 5151 } | 5153 } |
| 5152 bound_indexed_uniform_buffers_[index] = | 5154 bound_indexed_uniform_buffers_[index] = |
| 5153 TraceWrapperMember<WebGLBuffer>(this, buffer); | 5155 TraceWrapperMember<WebGLBuffer>(this, buffer); |
| 5154 bound_uniform_buffer_ = buffer; | 5156 bound_uniform_buffer_ = buffer; |
| (...skipping 329 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5484 default: | 5486 default: |
| 5485 break; | 5487 break; |
| 5486 } | 5488 } |
| 5487 SynthesizeGLError(GL_INVALID_ENUM, kFunctionName, "invalid parameter name"); | 5489 SynthesizeGLError(GL_INVALID_ENUM, kFunctionName, "invalid parameter name"); |
| 5488 return ScriptValue::CreateNull(script_state); | 5490 return ScriptValue::CreateNull(script_state); |
| 5489 } | 5491 } |
| 5490 | 5492 |
| 5491 DEFINE_TRACE(WebGL2RenderingContextBase) { | 5493 DEFINE_TRACE(WebGL2RenderingContextBase) { |
| 5492 visitor->Trace(read_framebuffer_binding_); | 5494 visitor->Trace(read_framebuffer_binding_); |
| 5493 visitor->Trace(transform_feedback_binding_); | 5495 visitor->Trace(transform_feedback_binding_); |
| 5496 visitor->Trace(default_transform_feedback_); |
| 5494 visitor->Trace(bound_copy_read_buffer_); | 5497 visitor->Trace(bound_copy_read_buffer_); |
| 5495 visitor->Trace(bound_copy_write_buffer_); | 5498 visitor->Trace(bound_copy_write_buffer_); |
| 5496 visitor->Trace(bound_pixel_pack_buffer_); | 5499 visitor->Trace(bound_pixel_pack_buffer_); |
| 5497 visitor->Trace(bound_pixel_unpack_buffer_); | 5500 visitor->Trace(bound_pixel_unpack_buffer_); |
| 5498 visitor->Trace(bound_transform_feedback_buffer_); | |
| 5499 visitor->Trace(bound_uniform_buffer_); | 5501 visitor->Trace(bound_uniform_buffer_); |
| 5500 visitor->Trace(bound_indexed_transform_feedback_buffers_); | |
| 5501 visitor->Trace(bound_indexed_uniform_buffers_); | 5502 visitor->Trace(bound_indexed_uniform_buffers_); |
| 5502 visitor->Trace(current_boolean_occlusion_query_); | 5503 visitor->Trace(current_boolean_occlusion_query_); |
| 5503 visitor->Trace(current_transform_feedback_primitives_written_query_); | 5504 visitor->Trace(current_transform_feedback_primitives_written_query_); |
| 5504 visitor->Trace(current_elapsed_query_); | 5505 visitor->Trace(current_elapsed_query_); |
| 5505 visitor->Trace(sampler_units_); | 5506 visitor->Trace(sampler_units_); |
| 5506 visitor->Trace(get_buffer_sub_data_async_callbacks_); | 5507 visitor->Trace(get_buffer_sub_data_async_callbacks_); |
| 5507 WebGLRenderingContextBase::Trace(visitor); | 5508 WebGLRenderingContextBase::Trace(visitor); |
| 5508 } | 5509 } |
| 5509 | 5510 |
| 5510 DEFINE_TRACE_WRAPPERS(WebGL2RenderingContextBase) { | 5511 DEFINE_TRACE_WRAPPERS(WebGL2RenderingContextBase) { |
| 5512 visitor->TraceWrappers(read_framebuffer_binding_); |
| 5511 visitor->TraceWrappers(transform_feedback_binding_); | 5513 visitor->TraceWrappers(transform_feedback_binding_); |
| 5512 visitor->TraceWrappers(read_framebuffer_binding_); | |
| 5513 visitor->TraceWrappers(bound_copy_read_buffer_); | 5514 visitor->TraceWrappers(bound_copy_read_buffer_); |
| 5514 visitor->TraceWrappers(bound_copy_write_buffer_); | 5515 visitor->TraceWrappers(bound_copy_write_buffer_); |
| 5515 visitor->TraceWrappers(bound_pixel_pack_buffer_); | 5516 visitor->TraceWrappers(bound_pixel_pack_buffer_); |
| 5516 visitor->TraceWrappers(bound_pixel_unpack_buffer_); | 5517 visitor->TraceWrappers(bound_pixel_unpack_buffer_); |
| 5517 visitor->TraceWrappers(bound_transform_feedback_buffer_); | |
| 5518 visitor->TraceWrappers(bound_uniform_buffer_); | 5518 visitor->TraceWrappers(bound_uniform_buffer_); |
| 5519 for (auto& buf : bound_indexed_transform_feedback_buffers_) { | |
| 5520 visitor->TraceWrappers(buf); | |
| 5521 } | |
| 5522 for (auto& buf : bound_indexed_uniform_buffers_) { | 5519 for (auto& buf : bound_indexed_uniform_buffers_) { |
| 5523 visitor->TraceWrappers(buf); | 5520 visitor->TraceWrappers(buf); |
| 5524 } | 5521 } |
| 5525 visitor->TraceWrappers(current_boolean_occlusion_query_); | 5522 visitor->TraceWrappers(current_boolean_occlusion_query_); |
| 5526 visitor->TraceWrappers(current_transform_feedback_primitives_written_query_); | 5523 visitor->TraceWrappers(current_transform_feedback_primitives_written_query_); |
| 5527 visitor->TraceWrappers(current_elapsed_query_); | 5524 visitor->TraceWrappers(current_elapsed_query_); |
| 5528 for (auto& unit : sampler_units_) { | 5525 for (auto& unit : sampler_units_) { |
| 5529 visitor->TraceWrappers(unit); | 5526 visitor->TraceWrappers(unit); |
| 5530 } | 5527 } |
| 5531 WebGLRenderingContextBase::TraceWrappers(visitor); | 5528 WebGLRenderingContextBase::TraceWrappers(visitor); |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5619 case GL_COPY_WRITE_BUFFER: | 5616 case GL_COPY_WRITE_BUFFER: |
| 5620 buffer = bound_copy_write_buffer_.Get(); | 5617 buffer = bound_copy_write_buffer_.Get(); |
| 5621 break; | 5618 break; |
| 5622 case GL_PIXEL_PACK_BUFFER: | 5619 case GL_PIXEL_PACK_BUFFER: |
| 5623 buffer = bound_pixel_pack_buffer_.Get(); | 5620 buffer = bound_pixel_pack_buffer_.Get(); |
| 5624 break; | 5621 break; |
| 5625 case GL_PIXEL_UNPACK_BUFFER: | 5622 case GL_PIXEL_UNPACK_BUFFER: |
| 5626 buffer = bound_pixel_unpack_buffer_.Get(); | 5623 buffer = bound_pixel_unpack_buffer_.Get(); |
| 5627 break; | 5624 break; |
| 5628 case GL_TRANSFORM_FEEDBACK_BUFFER: | 5625 case GL_TRANSFORM_FEEDBACK_BUFFER: |
| 5629 buffer = bound_transform_feedback_buffer_.Get(); | 5626 buffer = transform_feedback_binding_->GetBoundTransformFeedbackBuffer(); |
| 5630 break; | 5627 break; |
| 5631 case GL_UNIFORM_BUFFER: | 5628 case GL_UNIFORM_BUFFER: |
| 5632 buffer = bound_uniform_buffer_.Get(); | 5629 buffer = bound_uniform_buffer_.Get(); |
| 5633 break; | 5630 break; |
| 5634 default: | 5631 default: |
| 5635 SynthesizeGLError(GL_INVALID_ENUM, function_name, "invalid target"); | 5632 SynthesizeGLError(GL_INVALID_ENUM, function_name, "invalid target"); |
| 5636 return nullptr; | 5633 return nullptr; |
| 5637 } | 5634 } |
| 5638 if (!buffer) { | 5635 if (!buffer) { |
| 5639 SynthesizeGLError(GL_INVALID_OPERATION, function_name, "no buffer"); | 5636 SynthesizeGLError(GL_INVALID_OPERATION, function_name, "no buffer"); |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5718 | 5715 |
| 5719 void WebGL2RenderingContextBase::RemoveBoundBuffer(WebGLBuffer* buffer) { | 5716 void WebGL2RenderingContextBase::RemoveBoundBuffer(WebGLBuffer* buffer) { |
| 5720 if (bound_copy_read_buffer_ == buffer) | 5717 if (bound_copy_read_buffer_ == buffer) |
| 5721 bound_copy_read_buffer_ = nullptr; | 5718 bound_copy_read_buffer_ = nullptr; |
| 5722 if (bound_copy_write_buffer_ == buffer) | 5719 if (bound_copy_write_buffer_ == buffer) |
| 5723 bound_copy_write_buffer_ = nullptr; | 5720 bound_copy_write_buffer_ = nullptr; |
| 5724 if (bound_pixel_pack_buffer_ == buffer) | 5721 if (bound_pixel_pack_buffer_ == buffer) |
| 5725 bound_pixel_pack_buffer_ = nullptr; | 5722 bound_pixel_pack_buffer_ = nullptr; |
| 5726 if (bound_pixel_unpack_buffer_ == buffer) | 5723 if (bound_pixel_unpack_buffer_ == buffer) |
| 5727 bound_pixel_unpack_buffer_ = nullptr; | 5724 bound_pixel_unpack_buffer_ = nullptr; |
| 5728 if (bound_transform_feedback_buffer_ == buffer) | |
| 5729 bound_transform_feedback_buffer_ = nullptr; | |
| 5730 if (bound_uniform_buffer_ == buffer) | 5725 if (bound_uniform_buffer_ == buffer) |
| 5731 bound_uniform_buffer_ = nullptr; | 5726 bound_uniform_buffer_ = nullptr; |
| 5732 | 5727 |
| 5728 if (transform_feedback_binding_) |
| 5729 transform_feedback_binding_->UnbindBuffer(buffer); |
| 5730 |
| 5733 WebGLRenderingContextBase::RemoveBoundBuffer(buffer); | 5731 WebGLRenderingContextBase::RemoveBoundBuffer(buffer); |
| 5734 } | 5732 } |
| 5735 | 5733 |
| 5736 void WebGL2RenderingContextBase::RestoreCurrentFramebuffer() { | 5734 void WebGL2RenderingContextBase::RestoreCurrentFramebuffer() { |
| 5737 bindFramebuffer(GL_DRAW_FRAMEBUFFER, framebuffer_binding_.Get()); | 5735 bindFramebuffer(GL_DRAW_FRAMEBUFFER, framebuffer_binding_.Get()); |
| 5738 bindFramebuffer(GL_READ_FRAMEBUFFER, read_framebuffer_binding_.Get()); | 5736 bindFramebuffer(GL_READ_FRAMEBUFFER, read_framebuffer_binding_.Get()); |
| 5739 } | 5737 } |
| 5740 | 5738 |
| 5739 GLint WebGL2RenderingContextBase::GetMaxTransformFeedbackSeparateAttribs() |
| 5740 const { |
| 5741 return max_transform_feedback_separate_attribs_; |
| 5742 } |
| 5743 |
| 5741 WebGLImageConversion::PixelStoreParams | 5744 WebGLImageConversion::PixelStoreParams |
| 5742 WebGL2RenderingContextBase::GetPackPixelStoreParams() { | 5745 WebGL2RenderingContextBase::GetPackPixelStoreParams() { |
| 5743 WebGLImageConversion::PixelStoreParams params; | 5746 WebGLImageConversion::PixelStoreParams params; |
| 5744 params.alignment = pack_alignment_; | 5747 params.alignment = pack_alignment_; |
| 5745 params.row_length = pack_row_length_; | 5748 params.row_length = pack_row_length_; |
| 5746 params.skip_pixels = pack_skip_pixels_; | 5749 params.skip_pixels = pack_skip_pixels_; |
| 5747 params.skip_rows = pack_skip_rows_; | 5750 params.skip_rows = pack_skip_rows_; |
| 5748 return params; | 5751 return params; |
| 5749 } | 5752 } |
| 5750 | 5753 |
| (...skipping 14 matching lines...) Expand all Loading... |
| 5765 | 5768 |
| 5766 void WebGL2RenderingContextBase:: | 5769 void WebGL2RenderingContextBase:: |
| 5767 DrawingBufferClientRestorePixelUnpackBufferBinding() { | 5770 DrawingBufferClientRestorePixelUnpackBufferBinding() { |
| 5768 if (!ContextGL()) | 5771 if (!ContextGL()) |
| 5769 return; | 5772 return; |
| 5770 ContextGL()->BindBuffer(GL_PIXEL_UNPACK_BUFFER, | 5773 ContextGL()->BindBuffer(GL_PIXEL_UNPACK_BUFFER, |
| 5771 ObjectOrZero(bound_pixel_unpack_buffer_.Get())); | 5774 ObjectOrZero(bound_pixel_unpack_buffer_.Get())); |
| 5772 } | 5775 } |
| 5773 | 5776 |
| 5774 } // namespace blink | 5777 } // namespace blink |
| OLD | NEW |