OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "gpu/command_buffer/service/gles2_cmd_decoder.h" | 5 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" |
6 | 6 |
7 #include <stdio.h> | 7 #include <stdio.h> |
8 | 8 |
9 #include <algorithm> | 9 #include <algorithm> |
10 #include <list> | 10 #include <list> |
(...skipping 5050 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5061 !SafeMultiply(num_vertices, static_cast<GLuint>(sizeof(Vec4)), | 5061 !SafeMultiply(num_vertices, static_cast<GLuint>(sizeof(Vec4)), |
5062 &size_needed) || | 5062 &size_needed) || |
5063 size_needed > 0x7FFFFFFFU) { | 5063 size_needed > 0x7FFFFFFFU) { |
5064 SetGLError(GL_OUT_OF_MEMORY, "glDrawXXX: Simulating attrib 0"); | 5064 SetGLError(GL_OUT_OF_MEMORY, "glDrawXXX: Simulating attrib 0"); |
5065 return false; | 5065 return false; |
5066 } | 5066 } |
5067 | 5067 |
5068 CopyRealGLErrorsToWrapper(); | 5068 CopyRealGLErrorsToWrapper(); |
5069 glBindBuffer(GL_ARRAY_BUFFER, attrib_0_buffer_id_); | 5069 glBindBuffer(GL_ARRAY_BUFFER, attrib_0_buffer_id_); |
5070 | 5070 |
5071 if (static_cast<GLsizei>(size_needed) > attrib_0_size_) { | 5071 bool new_buffer = static_cast<GLsizei>(size_needed) > attrib_0_size_; |
| 5072 if (new_buffer) { |
5072 glBufferData(GL_ARRAY_BUFFER, size_needed, NULL, GL_DYNAMIC_DRAW); | 5073 glBufferData(GL_ARRAY_BUFFER, size_needed, NULL, GL_DYNAMIC_DRAW); |
5073 GLenum error = glGetError(); | 5074 GLenum error = glGetError(); |
5074 if (error != GL_NO_ERROR) { | 5075 if (error != GL_NO_ERROR) { |
5075 SetGLError(GL_OUT_OF_MEMORY, "glDrawXXX: Simulating attrib 0"); | 5076 SetGLError(GL_OUT_OF_MEMORY, "glDrawXXX: Simulating attrib 0"); |
5076 return false; | 5077 return false; |
5077 } | 5078 } |
5078 attrib_0_buffer_matches_value_ = false; | |
5079 } | 5079 } |
5080 if (attrib_0_used && | 5080 if (new_buffer || |
5081 (!attrib_0_buffer_matches_value_ || | 5081 (attrib_0_used && |
5082 (info->value().v[0] != attrib_0_value_.v[0] || | 5082 (!attrib_0_buffer_matches_value_ || |
5083 info->value().v[1] != attrib_0_value_.v[1] || | 5083 (info->value().v[0] != attrib_0_value_.v[0] || |
5084 info->value().v[2] != attrib_0_value_.v[2] || | 5084 info->value().v[1] != attrib_0_value_.v[1] || |
5085 info->value().v[3] != attrib_0_value_.v[3]))) { | 5085 info->value().v[2] != attrib_0_value_.v[2] || |
| 5086 info->value().v[3] != attrib_0_value_.v[3])))) { |
5086 std::vector<Vec4> temp(num_vertices, info->value()); | 5087 std::vector<Vec4> temp(num_vertices, info->value()); |
5087 glBufferSubData(GL_ARRAY_BUFFER, 0, size_needed, &temp[0].v[0]); | 5088 glBufferSubData(GL_ARRAY_BUFFER, 0, size_needed, &temp[0].v[0]); |
5088 attrib_0_buffer_matches_value_ = true; | 5089 attrib_0_buffer_matches_value_ = true; |
5089 attrib_0_value_ = info->value(); | 5090 attrib_0_value_ = info->value(); |
5090 attrib_0_size_ = size_needed; | 5091 attrib_0_size_ = size_needed; |
5091 } | 5092 } |
5092 | 5093 |
5093 glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, NULL); | 5094 glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, NULL); |
5094 | 5095 |
5095 if (info->divisor()) | 5096 if (info->divisor()) |
(...skipping 3322 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8418 } | 8419 } |
8419 } | 8420 } |
8420 | 8421 |
8421 // Include the auto-generated part of this file. We split this because it means | 8422 // Include the auto-generated part of this file. We split this because it means |
8422 // we can easily edit the non-auto generated parts right here in this file | 8423 // we can easily edit the non-auto generated parts right here in this file |
8423 // instead of having to edit some template or the code generator. | 8424 // instead of having to edit some template or the code generator. |
8424 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h" | 8425 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h" |
8425 | 8426 |
8426 } // namespace gles2 | 8427 } // namespace gles2 |
8427 } // namespace gpu | 8428 } // namespace gpu |
OLD | NEW |