| OLD | NEW |
| 1 | 1 |
| 2 /* | 2 /* |
| 3 * Copyright 2011 Google Inc. | 3 * Copyright 2011 Google Inc. |
| 4 * | 4 * |
| 5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
| 6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
| 7 */ | 7 */ |
| 8 | 8 |
| 9 #include "GrContext.h" | 9 #include "GrContext.h" |
| 10 | 10 |
| (...skipping 1410 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1421 fGpu->preferredWritePixelsConfig(srcConfig, renderTarget->config())) { | 1421 fGpu->preferredWritePixelsConfig(srcConfig, renderTarget->config())) { |
| 1422 writeConfig = GrPixelConfigSwapRAndB(srcConfig); | 1422 writeConfig = GrPixelConfigSwapRAndB(srcConfig); |
| 1423 swapRAndB = true; | 1423 swapRAndB = true; |
| 1424 } | 1424 } |
| 1425 | 1425 |
| 1426 GrSurfaceDesc desc; | 1426 GrSurfaceDesc desc; |
| 1427 desc.fWidth = width; | 1427 desc.fWidth = width; |
| 1428 desc.fHeight = height; | 1428 desc.fHeight = height; |
| 1429 desc.fConfig = writeConfig; | 1429 desc.fConfig = writeConfig; |
| 1430 SkAutoTUnref<GrTexture> texture(this->textureProvider()->refScratchTexture(d
esc, | 1430 SkAutoTUnref<GrTexture> texture(this->textureProvider()->refScratchTexture(d
esc, |
| 1431 GrTextureProvider::kApprox_ScratchTexMatch)); | 1431 GrTextureProvider::kApprox_ScratchMatch)); |
| 1432 if (!texture) { | 1432 if (!texture) { |
| 1433 return false; | 1433 return false; |
| 1434 } | 1434 } |
| 1435 | 1435 |
| 1436 SkAutoTUnref<const GrFragmentProcessor> fp; | 1436 SkAutoTUnref<const GrFragmentProcessor> fp; |
| 1437 SkMatrix textureMatrix; | 1437 SkMatrix textureMatrix; |
| 1438 textureMatrix.setIDiv(texture->width(), texture->height()); | 1438 textureMatrix.setIDiv(texture->width(), texture->height()); |
| 1439 | 1439 |
| 1440 // allocate a tmp buffer and sw convert the pixels to premul | 1440 // allocate a tmp buffer and sw convert the pixels to premul |
| 1441 SkAutoSTMalloc<128 * 128, uint32_t> tmpPixels(0); | 1441 SkAutoSTMalloc<128 * 128, uint32_t> tmpPixels(0); |
| (...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1566 desc.fFlags = kRenderTarget_GrSurfaceFlag; | 1566 desc.fFlags = kRenderTarget_GrSurfaceFlag; |
| 1567 desc.fWidth = width; | 1567 desc.fWidth = width; |
| 1568 desc.fHeight = height; | 1568 desc.fHeight = height; |
| 1569 desc.fConfig = readConfig; | 1569 desc.fConfig = readConfig; |
| 1570 desc.fOrigin = kTopLeft_GrSurfaceOrigin; | 1570 desc.fOrigin = kTopLeft_GrSurfaceOrigin; |
| 1571 | 1571 |
| 1572 // When a full read back is faster than a partial we could always make t
he scratch exactly | 1572 // When a full read back is faster than a partial we could always make t
he scratch exactly |
| 1573 // match the passed rect. However, if we see many different size rectang
les we will trash | 1573 // match the passed rect. However, if we see many different size rectang
les we will trash |
| 1574 // our texture cache and pay the cost of creating and destroying many te
xtures. So, we only | 1574 // our texture cache and pay the cost of creating and destroying many te
xtures. So, we only |
| 1575 // request an exact match when the caller is reading an entire RT. | 1575 // request an exact match when the caller is reading an entire RT. |
| 1576 GrTextureProvider::ScratchTexMatch match = GrTextureProvider::kApprox_Sc
ratchTexMatch; | 1576 GrTextureProvider::ScratchMatch match = GrTextureProvider::kApprox_Scrat
chMatch; |
| 1577 if (0 == left && | 1577 if (0 == left && |
| 1578 0 == top && | 1578 0 == top && |
| 1579 target->width() == width && | 1579 target->width() == width && |
| 1580 target->height() == height && | 1580 target->height() == height && |
| 1581 fGpu->fullReadPixelsIsFasterThanPartial()) { | 1581 fGpu->fullReadPixelsIsFasterThanPartial()) { |
| 1582 match = GrTextureProvider::kExact_ScratchTexMatch; | 1582 match = GrTextureProvider::kExact_ScratchMatch; |
| 1583 } | 1583 } |
| 1584 tempTexture.reset(this->textureProvider()->refScratchTexture(desc, match
)); | 1584 tempTexture.reset(this->textureProvider()->refScratchTexture(desc, match
)); |
| 1585 if (tempTexture) { | 1585 if (tempTexture) { |
| 1586 // compute a matrix to perform the draw | 1586 // compute a matrix to perform the draw |
| 1587 SkMatrix textureMatrix; | 1587 SkMatrix textureMatrix; |
| 1588 textureMatrix.setTranslate(SK_Scalar1 *left, SK_Scalar1 *top); | 1588 textureMatrix.setTranslate(SK_Scalar1 *left, SK_Scalar1 *top); |
| 1589 textureMatrix.postIDiv(src->width(), src->height()); | 1589 textureMatrix.postIDiv(src->width(), src->height()); |
| 1590 | 1590 |
| 1591 SkAutoTUnref<const GrFragmentProcessor> fp; | 1591 SkAutoTUnref<const GrFragmentProcessor> fp; |
| 1592 if (unpremul) { | 1592 if (unpremul) { |
| (...skipping 394 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1987 geometry.fColor = GrRandomColor(random); | 1987 geometry.fColor = GrRandomColor(random); |
| 1988 return DrawVerticesBatch::Create(geometry, type, viewMatrix, | 1988 return DrawVerticesBatch::Create(geometry, type, viewMatrix, |
| 1989 positions.begin(), vertexCount, | 1989 positions.begin(), vertexCount, |
| 1990 indices.begin(), hasIndices ? vertexCount :
0, | 1990 indices.begin(), hasIndices ? vertexCount :
0, |
| 1991 colors.begin(), | 1991 colors.begin(), |
| 1992 texCoords.begin(), | 1992 texCoords.begin(), |
| 1993 bounds); | 1993 bounds); |
| 1994 } | 1994 } |
| 1995 | 1995 |
| 1996 #endif | 1996 #endif |
| OLD | NEW |