OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2011 Google Inc. | 2 * Copyright 2011 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 | 8 |
9 #include "GrGpuGL.h" | 9 #include "GrGpuGL.h" |
10 #include "GrGLStencilBuffer.h" | 10 #include "GrGLStencilBuffer.h" |
(...skipping 534 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
545 if (!adjust_pixel_ops_params(desc.fWidth, desc.fHeight, bpp, &left, &top, | 545 if (!adjust_pixel_ops_params(desc.fWidth, desc.fHeight, bpp, &left, &top, |
546 &width, &height, &data, &rowBytes)) { | 546 &width, &height, &data, &rowBytes)) { |
547 return false; | 547 return false; |
548 } | 548 } |
549 size_t trimRowBytes = width * bpp; | 549 size_t trimRowBytes = width * bpp; |
550 | 550 |
551 // in case we need a temporary, trimmed copy of the src pixels | 551 // in case we need a temporary, trimmed copy of the src pixels |
552 SkAutoSMalloc<128 * 128> tempStorage; | 552 SkAutoSMalloc<128 * 128> tempStorage; |
553 | 553 |
554 // paletted textures cannot be partially updated | 554 // paletted textures cannot be partially updated |
555 bool useTexStorage = isNewTexture && | 555 // We currently lazily create MIPMAPs when the we see a draw with |
| 556 // GrTextureParams::kMipMap_FilterMode. Using texture storage requires that
the |
| 557 // MIP levels are all created when the texture is created. So for now we don
't use |
| 558 // texture storage. |
| 559 bool useTexStorage = false && |
| 560 isNewTexture && |
556 desc.fConfig != kIndex_8_GrPixelConfig && | 561 desc.fConfig != kIndex_8_GrPixelConfig && |
557 this->glCaps().texStorageSupport(); | 562 this->glCaps().texStorageSupport(); |
558 | 563 |
559 if (useTexStorage && kDesktop_GrGLBinding == this->glBinding()) { | 564 if (useTexStorage && kDesktop_GrGLBinding == this->glBinding()) { |
560 // 565 is not a sized internal format on desktop GL. So on desktop with | 565 // 565 is not a sized internal format on desktop GL. So on desktop with |
561 // 565 we always use an unsized internal format to let the system pick | 566 // 565 we always use an unsized internal format to let the system pick |
562 // the best sized format to convert the 565 data to. Since TexStorage | 567 // the best sized format to convert the 565 data to. Since TexStorage |
563 // only allows sized internal formats we will instead use TexImage2D. | 568 // only allows sized internal formats we will instead use TexImage2D. |
564 useTexStorage = desc.fConfig != kRGB_565_GrPixelConfig; | 569 useTexStorage = desc.fConfig != kRGB_565_GrPixelConfig; |
565 } | 570 } |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
631 GL_CALL(PixelStorei(GR_GL_UNPACK_FLIP_Y, GR_GL_TRUE)); | 636 GL_CALL(PixelStorei(GR_GL_UNPACK_FLIP_Y, GR_GL_TRUE)); |
632 } | 637 } |
633 GL_CALL(PixelStorei(GR_GL_UNPACK_ALIGNMENT, static_cast<GrGLint>(bpp))); | 638 GL_CALL(PixelStorei(GR_GL_UNPACK_ALIGNMENT, static_cast<GrGLint>(bpp))); |
634 } | 639 } |
635 bool succeeded = true; | 640 bool succeeded = true; |
636 if (isNewTexture && | 641 if (isNewTexture && |
637 0 == left && 0 == top && | 642 0 == left && 0 == top && |
638 desc.fWidth == width && desc.fHeight == height) { | 643 desc.fWidth == width && desc.fHeight == height) { |
639 CLEAR_ERROR_BEFORE_ALLOC(this->glInterface()); | 644 CLEAR_ERROR_BEFORE_ALLOC(this->glInterface()); |
640 if (useTexStorage) { | 645 if (useTexStorage) { |
641 // We never resize or change formats of textures. We don't use | 646 // We never resize or change formats of textures. |
642 // mipmaps currently. | |
643 GL_ALLOC_CALL(this->glInterface(), | 647 GL_ALLOC_CALL(this->glInterface(), |
644 TexStorage2D(GR_GL_TEXTURE_2D, | 648 TexStorage2D(GR_GL_TEXTURE_2D, |
645 1, // levels | 649 1, // levels |
646 internalFormat, | 650 internalFormat, |
647 desc.fWidth, desc.fHeight)); | 651 desc.fWidth, desc.fHeight)); |
648 } else { | 652 } else { |
649 if (GR_GL_PALETTE8_RGBA8 == internalFormat) { | 653 if (GR_GL_PALETTE8_RGBA8 == internalFormat) { |
650 GrGLsizei imageSize = desc.fWidth * desc.fHeight + | 654 GrGLsizei imageSize = desc.fWidth * desc.fHeight + |
651 kGrColorTableSize; | 655 kGrColorTableSize; |
652 GL_ALLOC_CALL(this->glInterface(), | 656 GL_ALLOC_CALL(this->glInterface(), |
(...skipping 2036 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2689 this->setVertexArrayID(gpu, 0); | 2693 this->setVertexArrayID(gpu, 0); |
2690 } | 2694 } |
2691 int attrCount = gpu->glCaps().maxVertexAttributes(); | 2695 int attrCount = gpu->glCaps().maxVertexAttributes(); |
2692 if (fDefaultVertexArrayAttribState.count() != attrCount) { | 2696 if (fDefaultVertexArrayAttribState.count() != attrCount) { |
2693 fDefaultVertexArrayAttribState.resize(attrCount); | 2697 fDefaultVertexArrayAttribState.resize(attrCount); |
2694 } | 2698 } |
2695 attribState = &fDefaultVertexArrayAttribState; | 2699 attribState = &fDefaultVertexArrayAttribState; |
2696 } | 2700 } |
2697 return attribState; | 2701 return attribState; |
2698 } | 2702 } |
OLD | NEW |