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 "GrBlurUtils.h" | 10 #include "GrBlurUtils.h" |
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
127 } | 127 } |
128 | 128 |
129 SkGpuDevice* SkGpuDevice::Create(GrRenderTarget* rt, int width, int height, | 129 SkGpuDevice* SkGpuDevice::Create(GrRenderTarget* rt, int width, int height, |
130 const SkSurfaceProps* props, unsigned flags) { | 130 const SkSurfaceProps* props, unsigned flags) { |
131 if (!rt || rt->wasDestroyed()) { | 131 if (!rt || rt->wasDestroyed()) { |
132 return NULL; | 132 return NULL; |
133 } | 133 } |
134 return SkNEW_ARGS(SkGpuDevice, (rt, width, height, props, flags)); | 134 return SkNEW_ARGS(SkGpuDevice, (rt, width, height, props, flags)); |
135 } | 135 } |
136 | 136 |
137 static SkDeviceProperties surfaceprops_to_deviceprops(const SkSurfaceProps* prop
s) { | |
138 if (props) { | |
139 return SkDeviceProperties(props->pixelGeometry(), props->isUseDistanceFi
eldFonts()); | |
140 } else { | |
141 return SkDeviceProperties(); | |
142 } | |
143 } | |
144 | |
145 static SkSurfaceProps copy_or_default_props(const SkSurfaceProps* props) { | |
146 if (props) { | |
147 return SkSurfaceProps(*props); | |
148 } else { | |
149 return SkSurfaceProps(SkSurfaceProps::kLegacyFontHost_InitType); | |
150 } | |
151 } | |
152 | |
153 SkGpuDevice::SkGpuDevice(GrRenderTarget* rt, int width, int height, | 137 SkGpuDevice::SkGpuDevice(GrRenderTarget* rt, int width, int height, |
154 const SkSurfaceProps* props, unsigned flags) | 138 const SkSurfaceProps* props, unsigned flags) |
155 : INHERITED(surfaceprops_to_deviceprops(props)) | 139 : INHERITED(SkSurfacePropsCopyOrDefault(props)) |
156 , fSurfaceProps(copy_or_default_props(props)) | |
157 { | 140 { |
158 fDrawProcs = NULL; | 141 fDrawProcs = NULL; |
159 | 142 |
160 fContext = SkRef(rt->getContext()); | 143 fContext = SkRef(rt->getContext()); |
161 fNeedClear = flags & kNeedClear_Flag; | 144 fNeedClear = flags & kNeedClear_Flag; |
162 | 145 |
163 fRenderTarget = SkRef(rt); | 146 fRenderTarget = SkRef(rt); |
164 | 147 |
165 SkImageInfo info = rt->surfacePriv().info().makeWH(width, height); | 148 SkImageInfo info = rt->surfacePriv().info().makeWH(width, height); |
166 SkPixelRef* pr = SkNEW_ARGS(SkGrPixelRef, (info, rt)); | 149 SkPixelRef* pr = SkNEW_ARGS(SkGrPixelRef, (info, rt)); |
(...skipping 1527 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1694 unsigned flags = cinfo.fInfo.isOpaque() ? 0 : kNeedClear_Flag; | 1677 unsigned flags = cinfo.fInfo.isOpaque() ? 0 : kNeedClear_Flag; |
1695 | 1678 |
1696 // layers are never draw in repeat modes, so we can request an approx | 1679 // layers are never draw in repeat modes, so we can request an approx |
1697 // match and ignore any padding. | 1680 // match and ignore any padding. |
1698 const GrTextureProvider::ScratchTexMatch match = (kNever_TileUsage == cinfo.
fTileUsage) ? | 1681 const GrTextureProvider::ScratchTexMatch match = (kNever_TileUsage == cinfo.
fTileUsage) ? |
1699 GrTextureProvider::kApprox_Scr
atchTexMatch : | 1682 GrTextureProvider::kApprox_Scr
atchTexMatch : |
1700 GrTextureProvider::kExact_Scra
tchTexMatch; | 1683 GrTextureProvider::kExact_Scra
tchTexMatch; |
1701 texture.reset(fContext->textureProvider()->refScratchTexture(desc, match)); | 1684 texture.reset(fContext->textureProvider()->refScratchTexture(desc, match)); |
1702 | 1685 |
1703 if (texture) { | 1686 if (texture) { |
1704 SkSurfaceProps props(fSurfaceProps.flags(), cinfo.fPixelGeometry); | 1687 SkSurfaceProps props(this->getLeakyProperties().flags(), cinfo.fPixelGeo
metry); |
1705 return SkGpuDevice::Create( | 1688 return SkGpuDevice::Create( |
1706 texture->asRenderTarget(), cinfo.fInfo.width(), cinfo.fInfo.height()
, &props, flags); | 1689 texture->asRenderTarget(), cinfo.fInfo.width(), cinfo.fInfo.height()
, &props, flags); |
1707 } else { | 1690 } else { |
1708 SkErrorInternals::SetError( kInternalError_SkError, | 1691 SkErrorInternals::SetError( kInternalError_SkError, |
1709 "---- failed to create gpu device texture [%
d %d]\n", | 1692 "---- failed to create gpu device texture [%
d %d]\n", |
1710 cinfo.fInfo.width(), cinfo.fInfo.height()); | 1693 cinfo.fInfo.width(), cinfo.fInfo.height()); |
1711 return NULL; | 1694 return NULL; |
1712 } | 1695 } |
1713 } | 1696 } |
1714 | 1697 |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1786 #endif | 1769 #endif |
1787 } | 1770 } |
1788 | 1771 |
1789 SkImageFilter::Cache* SkGpuDevice::getImageFilterCache() { | 1772 SkImageFilter::Cache* SkGpuDevice::getImageFilterCache() { |
1790 // We always return a transient cache, so it is freed after each | 1773 // We always return a transient cache, so it is freed after each |
1791 // filter traversal. | 1774 // filter traversal. |
1792 return SkImageFilter::Cache::Create(kDefaultImageFilterCacheSize); | 1775 return SkImageFilter::Cache::Create(kDefaultImageFilterCacheSize); |
1793 } | 1776 } |
1794 | 1777 |
1795 #endif | 1778 #endif |
OLD | NEW |