Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(251)

Side by Side Diff: gpu/command_buffer/service/gles2_cmd_decoder.cc

Issue 10019003: Always write data to new buffer in SimulateAttrib0 (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 4944 matching lines...) Expand 10 before | Expand all | Expand 10 after
4955 !SafeMultiply(num_vertices, static_cast<GLuint>(sizeof(Vec4)), 4955 !SafeMultiply(num_vertices, static_cast<GLuint>(sizeof(Vec4)),
4956 &size_needed) || 4956 &size_needed) ||
4957 size_needed > 0x7FFFFFFFU) { 4957 size_needed > 0x7FFFFFFFU) {
4958 SetGLError(GL_OUT_OF_MEMORY, "glDrawXXX: Simulating attrib 0"); 4958 SetGLError(GL_OUT_OF_MEMORY, "glDrawXXX: Simulating attrib 0");
4959 return false; 4959 return false;
4960 } 4960 }
4961 4961
4962 CopyRealGLErrorsToWrapper(); 4962 CopyRealGLErrorsToWrapper();
4963 glBindBuffer(GL_ARRAY_BUFFER, attrib_0_buffer_id_); 4963 glBindBuffer(GL_ARRAY_BUFFER, attrib_0_buffer_id_);
4964 4964
4965 if (static_cast<GLsizei>(size_needed) > attrib_0_size_) { 4965 bool new_buffer = static_cast<GLsizei>(size_needed) > attrib_0_size_;
4966 if (new_buffer) {
4966 glBufferData(GL_ARRAY_BUFFER, size_needed, NULL, GL_DYNAMIC_DRAW); 4967 glBufferData(GL_ARRAY_BUFFER, size_needed, NULL, GL_DYNAMIC_DRAW);
4967 GLenum error = glGetError(); 4968 GLenum error = glGetError();
4968 if (error != GL_NO_ERROR) { 4969 if (error != GL_NO_ERROR) {
4969 SetGLError(GL_OUT_OF_MEMORY, "glDrawXXX: Simulating attrib 0"); 4970 SetGLError(GL_OUT_OF_MEMORY, "glDrawXXX: Simulating attrib 0");
4970 return false; 4971 return false;
4971 } 4972 }
4972 attrib_0_buffer_matches_value_ = false;
4973 } 4973 }
4974 if (attrib_0_used && 4974 if (new_buffer ||
4975 (!attrib_0_buffer_matches_value_ || 4975 (attrib_0_used &&
4976 (info->value().v[0] != attrib_0_value_.v[0] || 4976 (!attrib_0_buffer_matches_value_ ||
4977 info->value().v[1] != attrib_0_value_.v[1] || 4977 (info->value().v[0] != attrib_0_value_.v[0] ||
4978 info->value().v[2] != attrib_0_value_.v[2] || 4978 info->value().v[1] != attrib_0_value_.v[1] ||
4979 info->value().v[3] != attrib_0_value_.v[3]))) { 4979 info->value().v[2] != attrib_0_value_.v[2] ||
4980 info->value().v[3] != attrib_0_value_.v[3])))) {
4980 std::vector<Vec4> temp(num_vertices, info->value()); 4981 std::vector<Vec4> temp(num_vertices, info->value());
4981 glBufferSubData(GL_ARRAY_BUFFER, 0, size_needed, &temp[0].v[0]); 4982 glBufferSubData(GL_ARRAY_BUFFER, 0, size_needed, &temp[0].v[0]);
4982 attrib_0_buffer_matches_value_ = true; 4983 attrib_0_buffer_matches_value_ = true;
4983 attrib_0_value_ = info->value(); 4984 attrib_0_value_ = info->value();
4984 attrib_0_size_ = size_needed; 4985 attrib_0_size_ = size_needed;
4985 } 4986 }
4986 4987
4987 glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, NULL); 4988 glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, NULL);
4988 4989
4989 if (info->divisor()) 4990 if (info->divisor())
(...skipping 3318 matching lines...) Expand 10 before | Expand all | Expand 10 after
8308 } 8309 }
8309 } 8310 }
8310 8311
8311 // Include the auto-generated part of this file. We split this because it means 8312 // Include the auto-generated part of this file. We split this because it means
8312 // we can easily edit the non-auto generated parts right here in this file 8313 // we can easily edit the non-auto generated parts right here in this file
8313 // instead of having to edit some template or the code generator. 8314 // instead of having to edit some template or the code generator.
8314 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h" 8315 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h"
8315 8316
8316 } // namespace gles2 8317 } // namespace gles2
8317 } // namespace gpu 8318 } // namespace gpu
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698