| OLD | NEW |
| 1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 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 "cc/shader.h" | 5 #include "cc/shader.h" |
| 6 | 6 |
| 7 #include "base/basictypes.h" | 7 #include "base/basictypes.h" |
| 8 #include "base/logging.h" | 8 #include "base/logging.h" |
| 9 #include "third_party/WebKit/Source/Platform/chromium/public/WebGraphicsContext3
D.h" | 9 #include "third_party/WebKit/Source/Platform/chromium/public/WebGraphicsContext3
D.h" |
| 10 | 10 |
| (...skipping 327 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 338 }; | 338 }; |
| 339 int locations[2]; | 339 int locations[2]; |
| 340 | 340 |
| 341 getProgramUniformLocations(context, program, shaderUniforms, arraysize(shade
rUniforms), arraysize(locations), locations, usingBindUniform, baseUniformIndex)
; | 341 getProgramUniformLocations(context, program, shaderUniforms, arraysize(shade
rUniforms), arraysize(locations), locations, usingBindUniform, baseUniformIndex)
; |
| 342 | 342 |
| 343 m_samplerLocation = locations[0]; | 343 m_samplerLocation = locations[0]; |
| 344 m_alphaLocation = locations[1]; | 344 m_alphaLocation = locations[1]; |
| 345 DCHECK(m_samplerLocation != -1 && m_alphaLocation != -1); | 345 DCHECK(m_samplerLocation != -1 && m_alphaLocation != -1); |
| 346 } | 346 } |
| 347 | 347 |
| 348 FragmentTexClampAlphaBinding::FragmentTexClampAlphaBinding() |
| 349 : m_samplerLocation(-1) |
| 350 , m_alphaLocation(-1) |
| 351 , m_fragmentTexTransformLocation(-1) |
| 352 { |
| 353 } |
| 354 |
| 355 void FragmentTexClampAlphaBinding::init(WebGraphicsContext3D* context, unsigned
program, bool usingBindUniform, int* baseUniformIndex) |
| 356 { |
| 357 static const char* shaderUniforms[] = { |
| 358 "s_texture", |
| 359 "alpha", |
| 360 "fragmentTexTransform", |
| 361 }; |
| 362 int locations[3]; |
| 363 |
| 364 getProgramUniformLocations(context, program, shaderUniforms, arraysize(shade
rUniforms), arraysize(locations), locations, usingBindUniform, baseUniformIndex)
; |
| 365 |
| 366 m_samplerLocation = locations[0]; |
| 367 m_alphaLocation = locations[1]; |
| 368 m_fragmentTexTransformLocation = locations[2]; |
| 369 DCHECK(m_samplerLocation != -1 && m_alphaLocation != -1); |
| 370 } |
| 371 |
| 372 |
| 348 FragmentTexOpaqueBinding::FragmentTexOpaqueBinding() | 373 FragmentTexOpaqueBinding::FragmentTexOpaqueBinding() |
| 349 : m_samplerLocation(-1) | 374 : m_samplerLocation(-1) |
| 350 { | 375 { |
| 351 } | 376 } |
| 352 | 377 |
| 353 void FragmentTexOpaqueBinding::init(WebGraphicsContext3D* context, unsigned prog
ram, bool usingBindUniform, int* baseUniformIndex) | 378 void FragmentTexOpaqueBinding::init(WebGraphicsContext3D* context, unsigned prog
ram, bool usingBindUniform, int* baseUniformIndex) |
| 354 { | 379 { |
| 355 static const char* shaderUniforms[] = { | 380 static const char* shaderUniforms[] = { |
| 356 "s_texture", | 381 "s_texture", |
| 357 }; | 382 }; |
| 358 int locations[1]; | 383 int locations[1]; |
| 359 | 384 |
| 360 getProgramUniformLocations(context, program, shaderUniforms, arraysize(shade
rUniforms), arraysize(locations), locations, usingBindUniform, baseUniformIndex)
; | 385 getProgramUniformLocations(context, program, shaderUniforms, arraysize(shade
rUniforms), arraysize(locations), locations, usingBindUniform, baseUniformIndex)
; |
| 361 | 386 |
| 362 m_samplerLocation = locations[0]; | 387 m_samplerLocation = locations[0]; |
| 363 DCHECK(m_samplerLocation != -1); | 388 DCHECK(m_samplerLocation != -1); |
| 364 } | 389 } |
| 365 | 390 |
| 391 FragmentTexClampOpaqueBinding::FragmentTexClampOpaqueBinding() |
| 392 : m_samplerLocation(-1) |
| 393 , m_fragmentTexTransformLocation(-1) |
| 394 { |
| 395 } |
| 396 |
| 397 void FragmentTexClampOpaqueBinding::init(WebGraphicsContext3D* context, unsigned
program, bool usingBindUniform, int* baseUniformIndex) |
| 398 { |
| 399 static const char* shaderUniforms[] = { |
| 400 "s_texture", |
| 401 "fragmentTexTransform", |
| 402 }; |
| 403 int locations[2]; |
| 404 |
| 405 getProgramUniformLocations(context, program, shaderUniforms, arraysize(shade
rUniforms), arraysize(locations), locations, usingBindUniform, baseUniformIndex)
; |
| 406 |
| 407 m_samplerLocation = locations[0]; |
| 408 m_fragmentTexTransformLocation = locations[1]; |
| 409 DCHECK(m_samplerLocation != -1); |
| 410 } |
| 411 |
| 366 std::string FragmentShaderRGBATexFlipVaryingAlpha::getShaderString() const | 412 std::string FragmentShaderRGBATexFlipVaryingAlpha::getShaderString() const |
| 367 { | 413 { |
| 368 return SHADER( | 414 return SHADER( |
| 369 precision mediump float; | 415 precision mediump float; |
| 370 varying vec2 v_texCoord; | 416 varying vec2 v_texCoord; |
| 371 varying float v_alpha; | 417 varying float v_alpha; |
| 372 uniform sampler2D s_texture; | 418 uniform sampler2D s_texture; |
| 373 void main() | 419 void main() |
| 374 { | 420 { |
| 375 vec4 texColor = texture2D(s_texture, vec2(v_texCoord.x, 1.0 - v_texC
oord.y)); | 421 vec4 texColor = texture2D(s_texture, vec2(v_texCoord.x, 1.0 - v_texC
oord.y)); |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 413 uniform sampler2D s_texture; | 459 uniform sampler2D s_texture; |
| 414 uniform float alpha; | 460 uniform float alpha; |
| 415 void main() | 461 void main() |
| 416 { | 462 { |
| 417 vec4 texColor = texture2D(s_texture, v_texCoord); | 463 vec4 texColor = texture2D(s_texture, v_texCoord); |
| 418 gl_FragColor = texColor * alpha; | 464 gl_FragColor = texColor * alpha; |
| 419 } | 465 } |
| 420 ); | 466 ); |
| 421 } | 467 } |
| 422 | 468 |
| 469 std::string FragmentShaderRGBATexClampAlpha::getShaderString() const |
| 470 { |
| 471 return SHADER( |
| 472 precision mediump float; |
| 473 varying vec2 v_texCoord; |
| 474 uniform sampler2D s_texture; |
| 475 uniform float alpha; |
| 476 uniform vec4 fragmentTexTransform; |
| 477 void main() |
| 478 { |
| 479 vec2 texCoord = clamp(v_texCoord, 0.0, 1.0) * fragmentTexTransform.z
w + fragmentTexTransform.xy; |
| 480 vec4 texColor = texture2D(s_texture, texCoord); |
| 481 gl_FragColor = texColor * alpha; |
| 482 } |
| 483 ); |
| 484 } |
| 485 |
| 486 |
| 423 std::string FragmentShaderRGBATexVaryingAlpha::getShaderString() const | 487 std::string FragmentShaderRGBATexVaryingAlpha::getShaderString() const |
| 424 { | 488 { |
| 425 return SHADER( | 489 return SHADER( |
| 426 precision mediump float; | 490 precision mediump float; |
| 427 varying vec2 v_texCoord; | 491 varying vec2 v_texCoord; |
| 428 varying float v_alpha; | 492 varying float v_alpha; |
| 429 uniform sampler2D s_texture; | 493 uniform sampler2D s_texture; |
| 430 void main() | 494 void main() |
| 431 { | 495 { |
| 432 vec4 texColor = texture2D(s_texture, v_texCoord); | 496 vec4 texColor = texture2D(s_texture, v_texCoord); |
| (...skipping 26 matching lines...) Expand all Loading... |
| 459 "varying vec2 v_texCoord;\n" | 523 "varying vec2 v_texCoord;\n" |
| 460 "varying float v_alpha;\n" | 524 "varying float v_alpha;\n" |
| 461 "uniform sampler2DRect s_texture;\n" | 525 "uniform sampler2DRect s_texture;\n" |
| 462 "void main()\n" | 526 "void main()\n" |
| 463 "{\n" | 527 "{\n" |
| 464 " vec4 texColor = texture2DRect(s_texture, v_texCoord);\n" | 528 " vec4 texColor = texture2DRect(s_texture, v_texCoord);\n" |
| 465 " gl_FragColor = texColor * v_alpha;\n" | 529 " gl_FragColor = texColor * v_alpha;\n" |
| 466 "}\n"; | 530 "}\n"; |
| 467 } | 531 } |
| 468 | 532 |
| 469 std::string FragmentShaderRGBATexOpaque::getShaderString() const | 533 std::string FragmentShaderRGBATexClampOpaque::getShaderString() const |
| 470 { | 534 { |
| 471 return SHADER( | 535 return SHADER( |
| 472 precision mediump float; | 536 precision mediump float; |
| 473 varying vec2 v_texCoord; | 537 varying vec2 v_texCoord; |
| 474 uniform sampler2D s_texture; | 538 uniform sampler2D s_texture; |
| 539 uniform vec4 fragmentTexTransform; |
| 475 void main() | 540 void main() |
| 476 { | 541 { |
| 477 vec4 texColor = texture2D(s_texture, v_texCoord); | 542 vec2 texCoord = clamp(v_texCoord, 0.0, 1.0) * fragmentTexTransform.z
w + fragmentTexTransform.xy; |
| 543 vec4 texColor = texture2D(s_texture, texCoord); |
| 478 gl_FragColor = vec4(texColor.rgb, 1.0); | 544 gl_FragColor = vec4(texColor.rgb, 1.0); |
| 479 } | 545 } |
| 480 ); | 546 ); |
| 481 } | 547 } |
| 482 | 548 |
| 483 std::string FragmentShaderRGBATex::getShaderString() const | 549 std::string FragmentShaderRGBATex::getShaderString() const |
| 484 { | 550 { |
| 485 return SHADER( | 551 return SHADER( |
| 486 precision mediump float; | 552 precision mediump float; |
| 487 varying vec2 v_texCoord; | 553 varying vec2 v_texCoord; |
| 488 uniform sampler2D s_texture; | 554 uniform sampler2D s_texture; |
| 489 void main() | 555 void main() |
| 490 { | 556 { |
| 491 gl_FragColor = texture2D(s_texture, v_texCoord); | 557 gl_FragColor = texture2D(s_texture, v_texCoord); |
| 492 } | 558 } |
| 493 ); | 559 ); |
| 494 } | 560 } |
| 495 | 561 |
| 496 std::string FragmentShaderRGBATexSwizzleAlpha::getShaderString() const | 562 std::string FragmentShaderRGBATexClampSwizzleAlpha::getShaderString() const |
| 497 { | 563 { |
| 498 return SHADER( | 564 return SHADER( |
| 499 precision mediump float; | 565 precision mediump float; |
| 500 varying vec2 v_texCoord; | 566 varying vec2 v_texCoord; |
| 501 uniform sampler2D s_texture; | 567 uniform sampler2D s_texture; |
| 502 uniform float alpha; | 568 uniform float alpha; |
| 569 uniform vec4 fragmentTexTransform; |
| 503 void main() | 570 void main() |
| 504 { | 571 { |
| 505 vec4 texColor = texture2D(s_texture, v_texCoord); | 572 vec2 texCoord = clamp(v_texCoord, 0.0, 1.0) * fragmentTexTransform.z
w + fragmentTexTransform.xy; |
| 573 vec4 texColor = texture2D(s_texture, texCoord); |
| 506 gl_FragColor = vec4(texColor.z, texColor.y, texColor.x, texColor.w)
* alpha; | 574 gl_FragColor = vec4(texColor.z, texColor.y, texColor.x, texColor.w)
* alpha; |
| 507 } | 575 } |
| 508 ); | 576 ); |
| 509 } | 577 } |
| 510 | 578 |
| 511 std::string FragmentShaderRGBATexSwizzleOpaque::getShaderString() const | 579 std::string FragmentShaderRGBATexClampSwizzleOpaque::getShaderString() const |
| 512 { | 580 { |
| 513 return SHADER( | 581 return SHADER( |
| 514 precision mediump float; | 582 precision mediump float; |
| 515 varying vec2 v_texCoord; | 583 varying vec2 v_texCoord; |
| 516 uniform sampler2D s_texture; | 584 uniform sampler2D s_texture; |
| 585 uniform vec4 fragmentTexTransform; |
| 517 void main() | 586 void main() |
| 518 { | 587 { |
| 519 vec4 texColor = texture2D(s_texture, v_texCoord); | 588 vec2 texCoord = clamp(v_texCoord, 0.0, 1.0) * fragmentTexTransform.z
w + fragmentTexTransform.xy; |
| 589 vec4 texColor = texture2D(s_texture, texCoord); |
| 520 gl_FragColor = vec4(texColor.z, texColor.y, texColor.x, 1.0); | 590 gl_FragColor = vec4(texColor.z, texColor.y, texColor.x, 1.0); |
| 521 } | 591 } |
| 522 ); | 592 ); |
| 523 } | 593 } |
| 524 | 594 |
| 525 FragmentShaderRGBATexAlphaAA::FragmentShaderRGBATexAlphaAA() | 595 FragmentShaderRGBATexAlphaAA::FragmentShaderRGBATexAlphaAA() |
| 526 : m_samplerLocation(-1) | 596 : m_samplerLocation(-1) |
| 527 , m_alphaLocation(-1) | 597 , m_alphaLocation(-1) |
| 528 , m_edgeLocation(-1) | 598 , m_edgeLocation(-1) |
| 529 { | 599 { |
| (...skipping 366 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 896 vec4 color2 = color; | 966 vec4 color2 = color; |
| 897 vec2 texCoord = clamp(v_texCoord, 0.0, 1.0) * texTransform.zw + texT
ransform.xy; | 967 vec2 texCoord = clamp(v_texCoord, 0.0, 1.0) * texTransform.zw + texT
ransform.xy; |
| 898 vec2 coord = mod(floor(texCoord * frequency * 2.0), 2.0); | 968 vec2 coord = mod(floor(texCoord * frequency * 2.0), 2.0); |
| 899 float picker = abs(coord.x - coord.y); | 969 float picker = abs(coord.x - coord.y); |
| 900 gl_FragColor = mix(color1, color2, picker) * alpha; | 970 gl_FragColor = mix(color1, color2, picker) * alpha; |
| 901 } | 971 } |
| 902 ); | 972 ); |
| 903 } | 973 } |
| 904 | 974 |
| 905 } // namespace cc | 975 } // namespace cc |
| OLD | NEW |