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 "SampleApp.h" | 8 #include "SampleApp.h" |
9 | 9 |
10 #include "OverView.h" | 10 #include "OverView.h" |
11 #include "Resources.h" | 11 #include "Resources.h" |
12 #include "SampleCode.h" | 12 #include "SampleCode.h" |
13 #include "SkAnimTimer.h" | 13 #include "SkAnimTimer.h" |
14 #include "SkCanvas.h" | 14 #include "SkCanvas.h" |
15 #include "SkCommandLineFlags.h" | 15 #include "SkCommandLineFlags.h" |
16 #include "SkData.h" | 16 #include "SkData.h" |
17 #include "SkDocument.h" | 17 #include "SkDocument.h" |
18 #include "SkGraphics.h" | 18 #include "SkGraphics.h" |
| 19 #include "SkImage_Base.h" |
19 #include "SkImageEncoder.h" | 20 #include "SkImageEncoder.h" |
20 #include "SkOSFile.h" | 21 #include "SkOSFile.h" |
21 #include "SkPaint.h" | 22 #include "SkPaint.h" |
22 #include "SkPaintFilterCanvas.h" | 23 #include "SkPaintFilterCanvas.h" |
23 #include "SkPicture.h" | 24 #include "SkPicture.h" |
24 #include "SkPictureRecorder.h" | 25 #include "SkPictureRecorder.h" |
25 #include "SkPM4fPriv.h" | 26 #include "SkPM4fPriv.h" |
26 #include "SkStream.h" | 27 #include "SkStream.h" |
27 #include "SkSurface.h" | 28 #include "SkSurface.h" |
28 #include "SkTemplates.h" | 29 #include "SkTemplates.h" |
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
171 | 172 |
172 class SampleWindow::DefaultDeviceManager : public SampleWindow::DeviceManager { | 173 class SampleWindow::DefaultDeviceManager : public SampleWindow::DeviceManager { |
173 public: | 174 public: |
174 | 175 |
175 DefaultDeviceManager() { | 176 DefaultDeviceManager() { |
176 #if SK_SUPPORT_GPU | 177 #if SK_SUPPORT_GPU |
177 fCurContext = nullptr; | 178 fCurContext = nullptr; |
178 fCurIntf = nullptr; | 179 fCurIntf = nullptr; |
179 fCurRenderTarget = nullptr; | 180 fCurRenderTarget = nullptr; |
180 fMSAASampleCount = 0; | 181 fMSAASampleCount = 0; |
| 182 fDeepColor = false; |
| 183 fActualColorBits = 0; |
181 #endif | 184 #endif |
182 fBackend = kNone_BackEndType; | 185 fBackend = kNone_BackEndType; |
183 } | 186 } |
184 | 187 |
185 virtual ~DefaultDeviceManager() { | 188 virtual ~DefaultDeviceManager() { |
186 #if SK_SUPPORT_GPU | 189 #if SK_SUPPORT_GPU |
187 SkSafeUnref(fCurContext); | 190 SkSafeUnref(fCurContext); |
188 SkSafeUnref(fCurIntf); | 191 SkSafeUnref(fCurIntf); |
189 SkSafeUnref(fCurRenderTarget); | 192 SkSafeUnref(fCurRenderTarget); |
190 #endif | 193 #endif |
191 } | 194 } |
192 | 195 |
193 void setUpBackend(SampleWindow* win, int msaaSampleCount) override { | 196 void setUpBackend(SampleWindow* win, int msaaSampleCount, bool deepColor) ov
erride { |
194 SkASSERT(kNone_BackEndType == fBackend); | 197 SkASSERT(kNone_BackEndType == fBackend); |
195 | 198 |
196 fBackend = kNone_BackEndType; | 199 fBackend = kNone_BackEndType; |
197 | 200 |
198 #if SK_SUPPORT_GPU | 201 #if SK_SUPPORT_GPU |
199 switch (win->getDeviceType()) { | 202 switch (win->getDeviceType()) { |
200 case kRaster_DeviceType: // fallthrough | 203 case kRaster_DeviceType: // fallthrough |
201 case kGPU_DeviceType: | 204 case kGPU_DeviceType: |
202 // all these guys use the native backend | 205 // all these guys use the native backend |
203 fBackend = kNativeGL_BackEndType; | 206 fBackend = kNativeGL_BackEndType; |
204 break; | 207 break; |
205 #if SK_ANGLE | 208 #if SK_ANGLE |
206 case kANGLE_DeviceType: | 209 case kANGLE_DeviceType: |
207 // ANGLE is really the only odd man out | 210 // ANGLE is really the only odd man out |
208 fBackend = kANGLE_BackEndType; | 211 fBackend = kANGLE_BackEndType; |
209 break; | 212 break; |
210 #endif // SK_ANGLE | 213 #endif // SK_ANGLE |
211 #if SK_COMMAND_BUFFER | 214 #if SK_COMMAND_BUFFER |
212 case kCommandBuffer_DeviceType: | 215 case kCommandBuffer_DeviceType: |
213 // Command buffer is really the only other odd man out :D | 216 // Command buffer is really the only other odd man out :D |
214 fBackend = kCommandBuffer_BackEndType; | 217 fBackend = kCommandBuffer_BackEndType; |
215 break; | 218 break; |
216 #endif // SK_COMMAND_BUFFER | 219 #endif // SK_COMMAND_BUFFER |
217 default: | 220 default: |
218 SkASSERT(false); | 221 SkASSERT(false); |
219 break; | 222 break; |
220 } | 223 } |
221 AttachmentInfo attachmentInfo; | 224 AttachmentInfo attachmentInfo; |
222 bool result = win->attach(fBackend, msaaSampleCount, &attachmentInfo); | 225 bool result = win->attach(fBackend, msaaSampleCount, deepColor, &attachm
entInfo); |
223 if (!result) { | 226 if (!result) { |
224 SkDebugf("Failed to initialize GL"); | 227 SkDebugf("Failed to initialize GL"); |
225 return; | 228 return; |
226 } | 229 } |
227 fMSAASampleCount = msaaSampleCount; | 230 fMSAASampleCount = msaaSampleCount; |
| 231 fDeepColor = deepColor; |
| 232 // Assume that we have at least 24-bit output, for backends that don't s
upply this data |
| 233 fActualColorBits = SkTMax(attachmentInfo.fColorBits, 24); |
228 | 234 |
229 SkASSERT(nullptr == fCurIntf); | 235 SkASSERT(nullptr == fCurIntf); |
230 SkAutoTUnref<const GrGLInterface> glInterface; | 236 SkAutoTUnref<const GrGLInterface> glInterface; |
231 switch (win->getDeviceType()) { | 237 switch (win->getDeviceType()) { |
232 case kRaster_DeviceType: // fallthrough | 238 case kRaster_DeviceType: // fallthrough |
233 case kGPU_DeviceType: | 239 case kGPU_DeviceType: |
234 // all these guys use the native interface | 240 // all these guys use the native interface |
235 glInterface.reset(GrGLCreateNativeInterface()); | 241 glInterface.reset(GrGLCreateNativeInterface()); |
236 break; | 242 break; |
237 #if SK_ANGLE | 243 #if SK_ANGLE |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
287 fCurRenderTarget = nullptr; | 293 fCurRenderTarget = nullptr; |
288 #endif | 294 #endif |
289 win->release(); | 295 win->release(); |
290 fBackend = kNone_BackEndType; | 296 fBackend = kNone_BackEndType; |
291 } | 297 } |
292 | 298 |
293 SkSurface* createSurface(SampleWindow::DeviceType dType, SampleWindow* win)
override { | 299 SkSurface* createSurface(SampleWindow::DeviceType dType, SampleWindow* win)
override { |
294 #if SK_SUPPORT_GPU | 300 #if SK_SUPPORT_GPU |
295 if (IsGpuDeviceType(dType) && fCurContext) { | 301 if (IsGpuDeviceType(dType) && fCurContext) { |
296 SkSurfaceProps props(win->getSurfaceProps()); | 302 SkSurfaceProps props(win->getSurfaceProps()); |
297 if (kRGBA_F16_SkColorType == win->info().colorType()) { | 303 if (kRGBA_F16_SkColorType == win->info().colorType() || fActualColor
Bits > 24) { |
298 // Need to make an off-screen F16 surface - the current render t
arget is | 304 // If we're rendering to F16, we need an off-screen surface - th
e current render |
299 // (probably) the wrong format. | 305 // target is most likely the wrong format. |
| 306 // |
| 307 // If we're using a deep (10-bit or higher) surface, we probably
need an off-screen |
| 308 // surface. 10-bit, in particular, has strange gamma behavior. |
300 return SkSurface::MakeRenderTarget(fCurContext, SkBudgeted::kNo,
win->info(), | 309 return SkSurface::MakeRenderTarget(fCurContext, SkBudgeted::kNo,
win->info(), |
301 fMSAASampleCount, &props).rel
ease(); | 310 fMSAASampleCount, &props).rel
ease(); |
302 } else { | 311 } else { |
303 return SkSurface::MakeRenderTargetDirect(fCurRenderTarget, &prop
s).release(); | 312 return SkSurface::MakeRenderTargetDirect(fCurRenderTarget, &prop
s).release(); |
304 } | 313 } |
305 } | 314 } |
306 #endif | 315 #endif |
307 return nullptr; | 316 return nullptr; |
308 } | 317 } |
309 | 318 |
310 void publishCanvas(SampleWindow::DeviceType dType, | 319 void publishCanvas(SampleWindow::DeviceType dType, |
311 SkCanvas* canvas, SampleWindow* win) override { | 320 SkCanvas* canvas, SampleWindow* win) override { |
312 #if SK_SUPPORT_GPU | 321 #if SK_SUPPORT_GPU |
313 if (fCurContext) { | 322 if (fCurContext) { |
314 // in case we have queued drawing calls | 323 // in case we have queued drawing calls |
315 fCurContext->flush(); | 324 fCurContext->flush(); |
| 325 } |
316 | 326 |
317 if (!IsGpuDeviceType(dType)) { | 327 if (!IsGpuDeviceType(dType) || |
318 // need to send the raster bits to the (gpu) window | 328 kRGBA_F16_SkColorType == win->info().colorType() || |
319 const SkBitmap& bm = win->getBitmap(); | 329 fActualColorBits > 24) { |
320 fCurRenderTarget->writePixels(0, 0, bm.width(), bm.height(), | 330 // We made/have an off-screen surface. Get the contents as an SkImag
e: |
321 SkImageInfo2GrPixelConfig(bm.colorT
ype(), | 331 SkBitmap bm; |
322 bm.alphaT
ype(), | 332 bm.allocPixels(win->info()); |
323 bm.profil
eType(), | 333 canvas->readPixels(&bm, 0, 0); |
324 *fCurCont
ext->caps()), | 334 SkPixmap pm; |
325 bm.getPixels(), | 335 bm.peekPixels(&pm); |
326 bm.rowBytes(), | 336 sk_sp<SkImage> image(SkImage::MakeTextureFromPixmap(fCurContext, pm, |
327 GrContext::kFlushWrites_PixelOp); | 337 SkBudgeted::kNo)
); |
328 } else if (kRGBA_F16_SkColorType == win->info().colorType()) { | 338 GrTexture* texture = as_IB(image)->peekTexture(); |
329 SkBitmap bm; | 339 SkASSERT(texture); |
330 bm.allocPixels(win->info()); | 340 |
331 canvas->readPixels(&bm, 0, 0); | 341 // With ten-bit output, we need to manually apply the gamma of the o
utput device |
332 fCurRenderTarget->writePixels(0, 0, bm.width(), bm.height(), | 342 // (unless we're in non-gamma correct mode, in which case our data i
s already |
333 SkImageInfo2GrPixelConfig(bm.info(
), | 343 // fake-sRGB, like we're expected to put in the 10-bit buffer): |
334 *fCurCon
text->caps()), | 344 bool doGamma = (fActualColorBits == 30) && SkImageInfoIsGammaCorrect
(win->info()); |
335 bm.getPixels(), | 345 fCurContext->applyGamma(fCurRenderTarget, texture, doGamma ? 1.0f /
2.2f : 1.0f); |
336 bm.rowBytes(), | |
337 GrContext::kFlushWrites_PixelOp); | |
338 } | |
339 } | 346 } |
340 #endif | 347 #endif |
341 | 348 |
342 win->present(); | 349 win->present(); |
343 } | 350 } |
344 | 351 |
345 void windowSizeChanged(SampleWindow* win) override { | 352 void windowSizeChanged(SampleWindow* win) override { |
346 #if SK_SUPPORT_GPU | 353 #if SK_SUPPORT_GPU |
347 if (fCurContext) { | 354 if (fCurContext) { |
348 AttachmentInfo attachmentInfo; | 355 AttachmentInfo attachmentInfo; |
349 win->attach(fBackend, fMSAASampleCount, &attachmentInfo); | 356 win->attach(fBackend, fMSAASampleCount, fDeepColor, &attachmentInfo)
; |
350 SkSafeUnref(fCurRenderTarget); | 357 SkSafeUnref(fCurRenderTarget); |
| 358 fActualColorBits = SkTMax(attachmentInfo.fColorBits, 24); |
351 fCurRenderTarget = win->renderTarget(attachmentInfo, fCurIntf, fCurC
ontext); | 359 fCurRenderTarget = win->renderTarget(attachmentInfo, fCurIntf, fCurC
ontext); |
352 } | 360 } |
353 #endif | 361 #endif |
354 } | 362 } |
355 | 363 |
356 GrContext* getGrContext() override { | 364 GrContext* getGrContext() override { |
357 #if SK_SUPPORT_GPU | 365 #if SK_SUPPORT_GPU |
358 return fCurContext; | 366 return fCurContext; |
359 #else | 367 #else |
360 return nullptr; | 368 return nullptr; |
361 #endif | 369 #endif |
362 } | 370 } |
363 | 371 |
364 GrRenderTarget* getGrRenderTarget() override { | 372 GrRenderTarget* getGrRenderTarget() override { |
365 #if SK_SUPPORT_GPU | 373 #if SK_SUPPORT_GPU |
366 return fCurRenderTarget; | 374 return fCurRenderTarget; |
367 #else | 375 #else |
368 return nullptr; | 376 return nullptr; |
369 #endif | 377 #endif |
370 } | 378 } |
371 | 379 |
| 380 int getColorBits() override { |
| 381 #if SK_SUPPORT_GPU |
| 382 return fActualColorBits; |
| 383 #else |
| 384 return 24; |
| 385 #endif |
| 386 } |
| 387 |
372 private: | 388 private: |
373 | 389 |
374 #if SK_SUPPORT_GPU | 390 #if SK_SUPPORT_GPU |
375 GrContext* fCurContext; | 391 GrContext* fCurContext; |
376 const GrGLInterface* fCurIntf; | 392 const GrGLInterface* fCurIntf; |
377 GrRenderTarget* fCurRenderTarget; | 393 GrRenderTarget* fCurRenderTarget; |
378 int fMSAASampleCount; | 394 int fMSAASampleCount; |
| 395 bool fDeepColor; |
| 396 int fActualColorBits; |
379 #endif | 397 #endif |
380 | 398 |
381 SkOSWindow::SkBackEndTypes fBackend; | 399 SkOSWindow::SkBackEndTypes fBackend; |
382 | 400 |
383 typedef SampleWindow::DeviceManager INHERITED; | 401 typedef SampleWindow::DeviceManager INHERITED; |
384 }; | 402 }; |
385 | 403 |
386 /////////////// | 404 /////////////// |
387 static const char view_inval_msg[] = "view-inval-msg"; | 405 static const char view_inval_msg[] = "view-inval-msg"; |
388 | 406 |
(...skipping 377 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
766 newCount += 1; | 784 newCount += 1; |
767 } | 785 } |
768 } | 786 } |
769 if (newCount) { | 787 if (newCount) { |
770 factories.setCount(newCount); | 788 factories.setCount(newCount); |
771 } | 789 } |
772 } | 790 } |
773 | 791 |
774 DEFINE_string(slide, "", "Start on this sample."); | 792 DEFINE_string(slide, "", "Start on this sample."); |
775 DEFINE_int32(msaa, 0, "Request multisampling with this count."); | 793 DEFINE_int32(msaa, 0, "Request multisampling with this count."); |
| 794 DEFINE_bool(deepColor, false, "Request deep color (10-bit/channel or more) displ
ay buffer."); |
776 DEFINE_string(pictureDir, "", "Read pictures from here."); | 795 DEFINE_string(pictureDir, "", "Read pictures from here."); |
777 DEFINE_string(picture, "", "Path to single picture."); | 796 DEFINE_string(picture, "", "Path to single picture."); |
778 DEFINE_string(sequence, "", "Path to file containing the desired samples/gms to
show."); | 797 DEFINE_string(sequence, "", "Path to file containing the desired samples/gms to
show."); |
779 DEFINE_bool(sort, false, "Sort samples by title."); | 798 DEFINE_bool(sort, false, "Sort samples by title."); |
780 DEFINE_bool(list, false, "List samples?"); | 799 DEFINE_bool(list, false, "List samples?"); |
781 DEFINE_bool(gpu, false, "Start up with gpu?"); | 800 DEFINE_bool(gpu, false, "Start up with gpu?"); |
782 DEFINE_bool(redraw, false, "Force continuous redrawing, for profiling or debuggi
ng tools."); | 801 DEFINE_bool(redraw, false, "Force continuous redrawing, for profiling or debuggi
ng tools."); |
783 DEFINE_string(key, "", ""); // dummy to enable gm tests that have platform-spec
ific names | 802 DEFINE_string(key, "", ""); // dummy to enable gm tests that have platform-spec
ific names |
784 #ifdef SAMPLE_PDF_FILE_VIEWER | 803 #ifdef SAMPLE_PDF_FILE_VIEWER |
785 DEFINE_string(pdfPath, "", "Path to direcotry of pdf files."); | 804 DEFINE_string(pdfPath, "", "Path to direcotry of pdf files."); |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
854 | 873 |
855 if (!FLAGS_slide.isEmpty()) { | 874 if (!FLAGS_slide.isEmpty()) { |
856 fCurrIndex = findByTitle(FLAGS_slide[0]); | 875 fCurrIndex = findByTitle(FLAGS_slide[0]); |
857 if (fCurrIndex < 0) { | 876 if (fCurrIndex < 0) { |
858 fprintf(stderr, "Unknown sample \"%s\"\n", FLAGS_slide[0]); | 877 fprintf(stderr, "Unknown sample \"%s\"\n", FLAGS_slide[0]); |
859 listTitles(); | 878 listTitles(); |
860 } | 879 } |
861 } | 880 } |
862 | 881 |
863 fMSAASampleCount = FLAGS_msaa; | 882 fMSAASampleCount = FLAGS_msaa; |
| 883 fDeepColor = FLAGS_deepColor; |
864 | 884 |
865 if (FLAGS_list) { | 885 if (FLAGS_list) { |
866 listTitles(); | 886 listTitles(); |
867 } | 887 } |
868 | 888 |
869 if (fCurrIndex < 0) { | 889 if (fCurrIndex < 0) { |
870 SkString title; | 890 SkString title; |
871 if (readTitleFromPrefs(&title)) { | 891 if (readTitleFromPrefs(&title)) { |
872 fCurrIndex = findByTitle(title.c_str()); | 892 fCurrIndex = findByTitle(title.c_str()); |
873 } | 893 } |
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1016 this->setClipToBounds(false); | 1036 this->setClipToBounds(false); |
1017 | 1037 |
1018 this->loadView((*fSamples[fCurrIndex])()); | 1038 this->loadView((*fSamples[fCurrIndex])()); |
1019 | 1039 |
1020 if (nullptr == devManager) { | 1040 if (nullptr == devManager) { |
1021 fDevManager = new DefaultDeviceManager(); | 1041 fDevManager = new DefaultDeviceManager(); |
1022 } else { | 1042 } else { |
1023 devManager->ref(); | 1043 devManager->ref(); |
1024 fDevManager = devManager; | 1044 fDevManager = devManager; |
1025 } | 1045 } |
1026 fDevManager->setUpBackend(this, fMSAASampleCount); | 1046 fDevManager->setUpBackend(this, fMSAASampleCount, fDeepColor); |
1027 | 1047 |
1028 // If another constructor set our dimensions, ensure that our | 1048 // If another constructor set our dimensions, ensure that our |
1029 // onSizeChange gets called. | 1049 // onSizeChange gets called. |
1030 if (this->height() && this->width()) { | 1050 if (this->height() && this->width()) { |
1031 this->onSizeChange(); | 1051 this->onSizeChange(); |
1032 } | 1052 } |
1033 | 1053 |
1034 // can't call this synchronously, since it may require a subclass to | 1054 // can't call this synchronously, since it may require a subclass to |
1035 // to implement, or the caller may need us to have returned from the | 1055 // to implement, or the caller may need us to have returned from the |
1036 // constructor first. Hence we post an event to ourselves. | 1056 // constructor first. Hence we post an event to ourselves. |
(...skipping 803 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1840 } | 1860 } |
1841 return this->INHERITED::onHandleChar(uni); | 1861 return this->INHERITED::onHandleChar(uni); |
1842 } | 1862 } |
1843 | 1863 |
1844 void SampleWindow::setDeviceType(DeviceType type) { | 1864 void SampleWindow::setDeviceType(DeviceType type) { |
1845 if (type == fDeviceType) | 1865 if (type == fDeviceType) |
1846 return; | 1866 return; |
1847 | 1867 |
1848 fDevManager->tearDownBackend(this); | 1868 fDevManager->tearDownBackend(this); |
1849 fDeviceType = type; | 1869 fDeviceType = type; |
1850 fDevManager->setUpBackend(this, fMSAASampleCount); | 1870 fDevManager->setUpBackend(this, fMSAASampleCount, fDeepColor); |
1851 | 1871 |
1852 this->updateTitle(); | 1872 this->updateTitle(); |
1853 this->inval(nullptr); | 1873 this->inval(nullptr); |
1854 } | 1874 } |
1855 | 1875 |
1856 void SampleWindow::setDeviceColorType(SkColorType ct, SkColorProfileType pt) { | 1876 void SampleWindow::setDeviceColorType(SkColorType ct, SkColorProfileType pt) { |
1857 this->setColorType(ct, pt); | 1877 this->setColorType(ct, pt); |
1858 | 1878 |
1859 fDevManager->tearDownBackend(this); | 1879 fDevManager->tearDownBackend(this); |
1860 fDevManager->setUpBackend(this, fMSAASampleCount); | 1880 fDevManager->setUpBackend(this, fMSAASampleCount, fDeepColor); |
1861 | 1881 |
1862 this->updateTitle(); | 1882 this->updateTitle(); |
1863 this->inval(nullptr); | 1883 this->inval(nullptr); |
1864 } | 1884 } |
1865 | 1885 |
1866 void SampleWindow::toggleSlideshow() { | 1886 void SampleWindow::toggleSlideshow() { |
1867 fAnimating = !fAnimating; | 1887 fAnimating = !fAnimating; |
1868 this->postAnimatingEvent(); | 1888 this->postAnimatingEvent(); |
1869 this->updateTitle(); | 1889 this->updateTitle(); |
1870 } | 1890 } |
1871 | 1891 |
1872 void SampleWindow::toggleRendering() { | 1892 void SampleWindow::toggleRendering() { |
1873 this->setDeviceType(cycle_devicetype(fDeviceType)); | 1893 this->setDeviceType(cycle_devicetype(fDeviceType)); |
1874 this->updateTitle(); | 1894 this->updateTitle(); |
1875 this->inval(nullptr); | 1895 this->inval(nullptr); |
1876 } | 1896 } |
1877 | 1897 |
1878 void SampleWindow::toggleFPS() { | 1898 void SampleWindow::toggleFPS() { |
1879 fMeasureFPS = !fMeasureFPS; | 1899 fMeasureFPS = !fMeasureFPS; |
1880 this->updateTitle(); | 1900 this->updateTitle(); |
1881 this->inval(nullptr); | 1901 this->inval(nullptr); |
1882 } | 1902 } |
1883 | 1903 |
1884 void SampleWindow::toggleDistanceFieldFonts() { | 1904 void SampleWindow::toggleDistanceFieldFonts() { |
1885 // reset backend | 1905 // reset backend |
1886 fDevManager->tearDownBackend(this); | 1906 fDevManager->tearDownBackend(this); |
1887 fDevManager->setUpBackend(this, fMSAASampleCount); | 1907 fDevManager->setUpBackend(this, fMSAASampleCount, fDeepColor); |
1888 | 1908 |
1889 SkSurfaceProps props = this->getSurfaceProps(); | 1909 SkSurfaceProps props = this->getSurfaceProps(); |
1890 uint32_t flags = props.flags() ^ SkSurfaceProps::kUseDeviceIndependentFonts_
Flag; | 1910 uint32_t flags = props.flags() ^ SkSurfaceProps::kUseDeviceIndependentFonts_
Flag; |
1891 this->setSurfaceProps(SkSurfaceProps(flags, props.pixelGeometry())); | 1911 this->setSurfaceProps(SkSurfaceProps(flags, props.pixelGeometry())); |
1892 | 1912 |
1893 this->updateTitle(); | 1913 this->updateTitle(); |
1894 this->inval(nullptr); | 1914 this->inval(nullptr); |
1895 } | 1915 } |
1896 | 1916 |
1897 void SampleWindow::setPixelGeometry(int pixelGeometryIndex) { | 1917 void SampleWindow::setPixelGeometry(int pixelGeometryIndex) { |
1898 // reset backend | 1918 // reset backend |
1899 fDevManager->tearDownBackend(this); | 1919 fDevManager->tearDownBackend(this); |
1900 fDevManager->setUpBackend(this, fMSAASampleCount); | 1920 fDevManager->setUpBackend(this, fMSAASampleCount, fDeepColor); |
1901 | 1921 |
1902 const SkSurfaceProps& oldProps = this->getSurfaceProps(); | 1922 const SkSurfaceProps& oldProps = this->getSurfaceProps(); |
1903 SkSurfaceProps newProps(oldProps.flags(), SkSurfaceProps::kLegacyFontHost_In
itType); | 1923 SkSurfaceProps newProps(oldProps.flags(), SkSurfaceProps::kLegacyFontHost_In
itType); |
1904 if (pixelGeometryIndex > 0) { | 1924 if (pixelGeometryIndex > 0) { |
1905 newProps = SkSurfaceProps(oldProps.flags(), | 1925 newProps = SkSurfaceProps(oldProps.flags(), |
1906 gPixelGeometryStates[pixelGeometryIndex].pixel
Geometry); | 1926 gPixelGeometryStates[pixelGeometryIndex].pixel
Geometry); |
1907 } | 1927 } |
1908 this->setSurfaceProps(newProps); | 1928 this->setSurfaceProps(newProps); |
1909 | 1929 |
1910 this->updateTitle(); | 1930 this->updateTitle(); |
(...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2155 fDevManager && | 2175 fDevManager && |
2156 fDevManager->getGrRenderTarget() && | 2176 fDevManager->getGrRenderTarget() && |
2157 fDevManager->getGrRenderTarget()->numColorSamples() > 0) { | 2177 fDevManager->getGrRenderTarget()->numColorSamples() > 0) { |
2158 title.appendf(" [MSAA: %d]", | 2178 title.appendf(" [MSAA: %d]", |
2159 fDevManager->getGrRenderTarget()->numColorSamples()); | 2179 fDevManager->getGrRenderTarget()->numColorSamples()); |
2160 } | 2180 } |
2161 #endif | 2181 #endif |
2162 | 2182 |
2163 title.appendf(" %s", find_config_name(this->info())); | 2183 title.appendf(" %s", find_config_name(this->info())); |
2164 | 2184 |
| 2185 if (fDevManager && fDevManager->getColorBits() > 24) { |
| 2186 title.appendf(" %d bpc", fDevManager->getColorBits()); |
| 2187 } |
| 2188 |
2165 if (gTreatSkColorAsSRGB) { | 2189 if (gTreatSkColorAsSRGB) { |
2166 title.append(" sRGB"); | 2190 title.append(" sRGB"); |
2167 } | 2191 } |
2168 | 2192 |
2169 this->setTitle(title.c_str()); | 2193 this->setTitle(title.c_str()); |
2170 } | 2194 } |
2171 | 2195 |
2172 void SampleWindow::onSizeChange() { | 2196 void SampleWindow::onSizeChange() { |
2173 this->INHERITED::onSizeChange(); | 2197 this->INHERITED::onSizeChange(); |
2174 | 2198 |
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2401 #ifdef SK_BUILD_FOR_MAC | 2425 #ifdef SK_BUILD_FOR_MAC |
2402 setenv("ANDROID_ROOT", "/android/device/data", 0); | 2426 setenv("ANDROID_ROOT", "/android/device/data", 0); |
2403 #endif | 2427 #endif |
2404 SkGraphics::Init(); | 2428 SkGraphics::Init(); |
2405 SkEvent::Init(); | 2429 SkEvent::Init(); |
2406 } | 2430 } |
2407 | 2431 |
2408 void application_term() { | 2432 void application_term() { |
2409 SkEvent::Term(); | 2433 SkEvent::Term(); |
2410 } | 2434 } |
OLD | NEW |