Chromium Code Reviews| 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/blink/webgraphicscontext3d_impl.h" | 5 #include "gpu/blink/webgraphicscontext3d_impl.h" |
| 6 | 6 |
| 7 #include "base/atomicops.h" | 7 #include "base/atomicops.h" |
| 8 #include "base/lazy_instance.h" | 8 #include "base/lazy_instance.h" |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "gpu/GLES2/gl2extchromium.h" | 10 #include "gpu/GLES2/gl2extchromium.h" |
| (...skipping 343 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 354 WebGLId program, WGC3Duint index, ActiveInfo& info) { | 354 WebGLId program, WGC3Duint index, ActiveInfo& info) { |
| 355 if (!program) { | 355 if (!program) { |
| 356 synthesizeGLError(GL_INVALID_VALUE); | 356 synthesizeGLError(GL_INVALID_VALUE); |
| 357 return false; | 357 return false; |
| 358 } | 358 } |
| 359 GLint max_name_length = -1; | 359 GLint max_name_length = -1; |
| 360 gl_->GetProgramiv( | 360 gl_->GetProgramiv( |
| 361 program, GL_ACTIVE_ATTRIBUTE_MAX_LENGTH, &max_name_length); | 361 program, GL_ACTIVE_ATTRIBUTE_MAX_LENGTH, &max_name_length); |
| 362 if (max_name_length < 0) | 362 if (max_name_length < 0) |
| 363 return false; | 363 return false; |
| 364 scoped_ptr<GLchar[]> name(new GLchar[max_name_length]); | 364 if (max_name_length == 0) { |
| 365 if (!name) { | 365 // No active attributes exist. |
| 366 synthesizeGLError(GL_OUT_OF_MEMORY); | 366 synthesizeGLError(GL_INVALID_VALUE); |
|
Zhenyao Mo
2015/03/07 01:00:08
This is unnecessary because we always crash when "
|
no sievers
2015/03/09 19:10:08
This seems correct if the program is not valid. Bu
no sievers
2015/03/09 19:13:54
nm, we do call getProgramiv() but this is obviousl
Zhenyao Mo
2015/03/09 19:58:28
If the linked program has zero attribs or uniforms
|
| 367 return false; | 367 return false; |
| 368 } | 368 } |
| 369 scoped_ptr<GLchar[]> name(new GLchar[max_name_length]); | |
| 369 GLsizei length = 0; | 370 GLsizei length = 0; |
| 370 GLint size = -1; | 371 GLint size = -1; |
| 371 GLenum type = 0; | 372 GLenum type = 0; |
| 372 gl_->GetActiveAttrib( | 373 gl_->GetActiveAttrib( |
| 373 program, index, max_name_length, &length, &size, &type, name.get()); | 374 program, index, max_name_length, &length, &size, &type, name.get()); |
| 374 if (size < 0) { | 375 if (size < 0) { |
| 375 return false; | 376 return false; |
| 376 } | 377 } |
| 377 info.name = blink::WebString::fromUTF8(name.get(), length); | 378 info.name = blink::WebString::fromUTF8(name.get(), length); |
| 378 info.type = type; | 379 info.type = type; |
| 379 info.size = size; | 380 info.size = size; |
| 380 return true; | 381 return true; |
| 381 } | 382 } |
| 382 | 383 |
| 383 bool WebGraphicsContext3DImpl::getActiveUniform( | 384 bool WebGraphicsContext3DImpl::getActiveUniform( |
| 384 WebGLId program, WGC3Duint index, ActiveInfo& info) { | 385 WebGLId program, WGC3Duint index, ActiveInfo& info) { |
| 385 GLint max_name_length = -1; | 386 GLint max_name_length = -1; |
| 386 gl_->GetProgramiv( | 387 gl_->GetProgramiv( |
| 387 program, GL_ACTIVE_UNIFORM_MAX_LENGTH, &max_name_length); | 388 program, GL_ACTIVE_UNIFORM_MAX_LENGTH, &max_name_length); |
| 388 if (max_name_length < 0) | 389 if (max_name_length < 0) |
| 389 return false; | 390 return false; |
| 390 scoped_ptr<GLchar[]> name(new GLchar[max_name_length]); | 391 if (max_name_length == 0) { |
| 391 if (!name) { | 392 // No active uniforms exist. |
| 392 synthesizeGLError(GL_OUT_OF_MEMORY); | 393 synthesizeGLError(GL_INVALID_VALUE); |
| 393 return false; | 394 return false; |
| 394 } | 395 } |
| 396 scoped_ptr<GLchar[]> name(new GLchar[max_name_length]); | |
| 395 GLsizei length = 0; | 397 GLsizei length = 0; |
| 396 GLint size = -1; | 398 GLint size = -1; |
| 397 GLenum type = 0; | 399 GLenum type = 0; |
| 398 gl_->GetActiveUniform( | 400 gl_->GetActiveUniform( |
| 399 program, index, max_name_length, &length, &size, &type, name.get()); | 401 program, index, max_name_length, &length, &size, &type, name.get()); |
| 400 if (size < 0) { | 402 if (size < 0) { |
| 401 return false; | 403 return false; |
| 402 } | 404 } |
| 403 info.name = blink::WebString::fromUTF8(name.get(), length); | 405 info.name = blink::WebString::fromUTF8(name.get(), length); |
| 404 info.type = type; | 406 info.type = type; |
| (...skipping 807 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1212 output_attribs->samples = attributes.antialias ? 4 : 0; | 1214 output_attribs->samples = attributes.antialias ? 4 : 0; |
| 1213 output_attribs->sample_buffers = attributes.antialias ? 1 : 0; | 1215 output_attribs->sample_buffers = attributes.antialias ? 1 : 0; |
| 1214 output_attribs->fail_if_major_perf_caveat = | 1216 output_attribs->fail_if_major_perf_caveat = |
| 1215 attributes.failIfMajorPerformanceCaveat; | 1217 attributes.failIfMajorPerformanceCaveat; |
| 1216 output_attribs->bind_generates_resource = false; | 1218 output_attribs->bind_generates_resource = false; |
| 1217 output_attribs->es3_context_required = | 1219 output_attribs->es3_context_required = |
| 1218 (attributes.webGL && attributes.webGLVersion == 2); | 1220 (attributes.webGL && attributes.webGLVersion == 2); |
| 1219 } | 1221 } |
| 1220 | 1222 |
| 1221 } // namespace gpu_blink | 1223 } // namespace gpu_blink |
| OLD | NEW |