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 #include "SkGpuDevice.h" | 8 #include "SkGpuDevice.h" |
9 | 9 |
10 #include "effects/GrBicubicEffect.h" | 10 #include "effects/GrBicubicEffect.h" |
11 #include "effects/GrDashingEffect.h" | 11 #include "effects/GrDashingEffect.h" |
12 #include "effects/GrTextureDomain.h" | 12 #include "effects/GrTextureDomain.h" |
13 #include "effects/GrSimpleTextureEffect.h" | 13 #include "effects/GrSimpleTextureEffect.h" |
14 | 14 |
15 #include "GrContext.h" | 15 #include "GrContext.h" |
16 #include "GrBitmapTextContext.h" | 16 #include "GrBitmapTextContext.h" |
17 #include "GrDistanceFieldTextContext.h" | 17 #include "GrDistanceFieldTextContext.h" |
18 #include "GrLayerHoister.h" | 18 #include "GrLayerHoister.h" |
19 #include "GrRecordReplaceDraw.h" | 19 #include "GrRecordReplaceDraw.h" |
20 #include "GrStrokeInfo.h" | 20 #include "GrStrokeInfo.h" |
21 #include "GrTracing.h" | 21 #include "GrTracing.h" |
22 #include "GrGpu.h" | 22 #include "GrGpu.h" |
23 | 23 |
24 #include "SkGrTexturePixelRef.h" | 24 #include "SkGrTexturePixelRef.h" |
25 | 25 |
| 26 #include "SkCanvasPriv.h" |
26 #include "SkDeviceImageFilterProxy.h" | 27 #include "SkDeviceImageFilterProxy.h" |
27 #include "SkDrawProcs.h" | 28 #include "SkDrawProcs.h" |
28 #include "SkGlyphCache.h" | 29 #include "SkGlyphCache.h" |
29 #include "SkImageFilter.h" | 30 #include "SkImageFilter.h" |
30 #include "SkLayerInfo.h" | 31 #include "SkLayerInfo.h" |
31 #include "SkMaskFilter.h" | 32 #include "SkMaskFilter.h" |
32 #include "SkPathEffect.h" | 33 #include "SkPathEffect.h" |
33 #include "SkPicture.h" | 34 #include "SkPicture.h" |
34 #include "SkPictureData.h" | 35 #include "SkPictureData.h" |
35 #include "SkRecord.h" | 36 #include "SkRecord.h" |
(...skipping 1745 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1781 return NULL; | 1782 return NULL; |
1782 } | 1783 } |
1783 } | 1784 } |
1784 | 1785 |
1785 SkSurface* SkGpuDevice::newSurface(const SkImageInfo& info, const SkSurfaceProps
& props) { | 1786 SkSurface* SkGpuDevice::newSurface(const SkImageInfo& info, const SkSurfaceProps
& props) { |
1786 return SkSurface::NewRenderTarget(fContext, info, fRenderTarget->numSamples(
), &props); | 1787 return SkSurface::NewRenderTarget(fContext, info, fRenderTarget->numSamples(
), &props); |
1787 } | 1788 } |
1788 | 1789 |
1789 bool SkGpuDevice::EXPERIMENTAL_drawPicture(SkCanvas* mainCanvas, const SkPicture
* mainPicture, | 1790 bool SkGpuDevice::EXPERIMENTAL_drawPicture(SkCanvas* mainCanvas, const SkPicture
* mainPicture, |
1790 const SkMatrix* matrix, const SkPaint
* paint) { | 1791 const SkMatrix* matrix, const SkPaint
* paint) { |
1791 // todo: should handle these natively | 1792 // todo: should handle this natively |
1792 if (matrix || paint) { | 1793 if (paint) { |
1793 return false; | 1794 return false; |
1794 } | 1795 } |
1795 | 1796 |
1796 SkPicture::AccelData::Key key = SkLayerInfo::ComputeKey(); | 1797 SkPicture::AccelData::Key key = SkLayerInfo::ComputeKey(); |
1797 | 1798 |
1798 const SkPicture::AccelData* data = mainPicture->EXPERIMENTAL_getAccelData(ke
y); | 1799 const SkPicture::AccelData* data = mainPicture->EXPERIMENTAL_getAccelData(ke
y); |
1799 if (!data) { | 1800 if (!data) { |
1800 return false; | 1801 return false; |
1801 } | 1802 } |
1802 | 1803 |
1803 SkRect clipBounds; | 1804 SkRect clipBounds; |
1804 if (!mainCanvas->getClipBounds(&clipBounds)) { | 1805 if (!mainCanvas->getClipBounds(&clipBounds)) { |
1805 return true; | 1806 return true; |
1806 } | 1807 } |
1807 | 1808 |
| 1809 SkAutoCanvasMatrixPaint acmp(mainCanvas, matrix, paint, mainPicture->cullRec
t()); |
| 1810 |
| 1811 const SkMatrix initialMatrix = mainCanvas->getTotalMatrix(); |
| 1812 |
1808 SkTDArray<GrHoistedLayer> atlasedNeedRendering, atlasedRecycled; | 1813 SkTDArray<GrHoistedLayer> atlasedNeedRendering, atlasedRecycled; |
1809 | 1814 |
1810 GrLayerHoister::FindLayersToAtlas(fContext, mainPicture, | 1815 GrLayerHoister::FindLayersToAtlas(fContext, mainPicture, |
| 1816 initialMatrix, |
1811 clipBounds, | 1817 clipBounds, |
1812 &atlasedNeedRendering, &atlasedRecycled, | 1818 &atlasedNeedRendering, &atlasedRecycled, |
1813 fRenderTarget->numSamples()); | 1819 fRenderTarget->numSamples()); |
1814 | 1820 |
1815 GrLayerHoister::DrawLayersToAtlas(fContext, atlasedNeedRendering); | 1821 GrLayerHoister::DrawLayersToAtlas(fContext, atlasedNeedRendering); |
1816 | 1822 |
1817 SkTDArray<GrHoistedLayer> needRendering, recycled; | 1823 SkTDArray<GrHoistedLayer> needRendering, recycled; |
1818 | 1824 |
1819 GrLayerHoister::FindLayersToHoist(fContext, mainPicture, | 1825 GrLayerHoister::FindLayersToHoist(fContext, mainPicture, |
| 1826 initialMatrix, |
1820 clipBounds, | 1827 clipBounds, |
1821 &needRendering, &recycled, | 1828 &needRendering, &recycled, |
1822 fRenderTarget->numSamples()); | 1829 fRenderTarget->numSamples()); |
1823 | 1830 |
1824 GrLayerHoister::DrawLayers(fContext, needRendering); | 1831 GrLayerHoister::DrawLayers(fContext, needRendering); |
1825 | 1832 |
1826 GrReplacements replacements; | 1833 GrReplacements replacements; |
1827 | 1834 |
1828 GrLayerHoister::ConvertLayersToReplacements(needRendering, &replacements); | 1835 GrLayerHoister::ConvertLayersToReplacements(needRendering, &replacements); |
1829 GrLayerHoister::ConvertLayersToReplacements(recycled, &replacements); | 1836 GrLayerHoister::ConvertLayersToReplacements(recycled, &replacements); |
1830 | 1837 |
1831 // Render the entire picture using new layers | 1838 // Render the entire picture using new layers |
1832 const SkMatrix initialMatrix = mainCanvas->getTotalMatrix(); | |
1833 | |
1834 GrRecordReplaceDraw(mainPicture, mainCanvas, &replacements, initialMatrix, N
ULL); | 1839 GrRecordReplaceDraw(mainPicture, mainCanvas, &replacements, initialMatrix, N
ULL); |
1835 | 1840 |
1836 GrLayerHoister::UnlockLayers(fContext, needRendering); | 1841 GrLayerHoister::UnlockLayers(fContext, needRendering); |
1837 GrLayerHoister::UnlockLayers(fContext, recycled); | 1842 GrLayerHoister::UnlockLayers(fContext, recycled); |
1838 GrLayerHoister::UnlockLayers(fContext, atlasedNeedRendering); | 1843 GrLayerHoister::UnlockLayers(fContext, atlasedNeedRendering); |
1839 GrLayerHoister::UnlockLayers(fContext, atlasedRecycled); | 1844 GrLayerHoister::UnlockLayers(fContext, atlasedRecycled); |
1840 | 1845 |
1841 return true; | 1846 return true; |
1842 } | 1847 } |
1843 | 1848 |
1844 SkImageFilter::Cache* SkGpuDevice::getImageFilterCache() { | 1849 SkImageFilter::Cache* SkGpuDevice::getImageFilterCache() { |
1845 // We always return a transient cache, so it is freed after each | 1850 // We always return a transient cache, so it is freed after each |
1846 // filter traversal. | 1851 // filter traversal. |
1847 return SkImageFilter::Cache::Create(kDefaultImageFilterCacheSize); | 1852 return SkImageFilter::Cache::Create(kDefaultImageFilterCacheSize); |
1848 } | 1853 } |
1849 | 1854 |
1850 #endif | 1855 #endif |
OLD | NEW |