OLD | NEW |
---|---|
1 /* | 1 /* |
2 * Copyright 2015 Google Inc. | 2 * Copyright 2015 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 "VisualBench.h" | 9 #include "VisualBench.h" |
10 | 10 |
(...skipping 22 matching lines...) Expand all Loading... | |
33 fModule.reset(new VisualLightweightBenchModule(this)); | 33 fModule.reset(new VisualLightweightBenchModule(this)); |
34 if (FLAGS_interactive) { | 34 if (FLAGS_interactive) { |
35 fModule.reset(new VisualInteractiveModule(this)); | 35 fModule.reset(new VisualInteractiveModule(this)); |
36 } | 36 } |
37 | 37 |
38 this->setTitle(); | 38 this->setTitle(); |
39 this->setupBackend(); | 39 this->setupBackend(); |
40 } | 40 } |
41 | 41 |
42 VisualBench::~VisualBench() { | 42 VisualBench::~VisualBench() { |
43 INHERITED::detach(); | 43 this->tearDownContext(); |
44 } | 44 } |
45 | 45 |
46 void VisualBench::setTitle() { | 46 void VisualBench::setTitle() { |
47 SkString title("VisualBench"); | 47 SkString title("VisualBench"); |
48 INHERITED::setTitle(title.c_str()); | 48 INHERITED::setTitle(title.c_str()); |
49 } | 49 } |
50 | 50 |
51 SkSurface* VisualBench::createSurface() { | 51 SkSurface* VisualBench::createSurface() { |
52 if (!fSurface) { | 52 if (!fSurface) { |
53 SkSurfaceProps props(INHERITED::getSurfaceProps()); | 53 SkSurfaceProps props(INHERITED::getSurfaceProps()); |
54 fSurface.reset(SkSurface::NewRenderTargetDirect(fRenderTarget, &props)); | 54 fSurface.reset(SkSurface::NewRenderTargetDirect(fRenderTarget, &props)); |
55 } | 55 } |
56 | 56 |
57 // The caller will wrap the SkSurface in an SkAutoTUnref | 57 // The caller will wrap the SkSurface in an SkAutoTUnref |
58 return SkRef(fSurface.get()); | 58 return SkRef(fSurface.get()); |
59 } | 59 } |
60 | 60 |
61 bool VisualBench::setupBackend() { | 61 bool VisualBench::setupBackend() { |
62 this->setColorType(kRGBA_8888_SkColorType); | 62 this->setColorType(kRGBA_8888_SkColorType); |
63 this->setVisibleP(true); | 63 this->setVisibleP(true); |
64 this->setClipToBounds(false); | 64 this->setClipToBounds(false); |
65 | 65 |
66 if (FLAGS_fullscreen) { | 66 if (FLAGS_fullscreen) { |
67 if (!this->makeFullscreen()) { | 67 if (!this->makeFullscreen()) { |
68 SkDebugf("Could not go fullscreen!"); | 68 SkDebugf("Could not go fullscreen!"); |
69 } | 69 } |
70 } | 70 } |
71 if (!this->attach(kNativeGL_BackEndType, FLAGS_msaa, &fAttachmentInfo)) { | |
72 SkDebugf("Not possible to create backend.\n"); | |
73 INHERITED::detach(); | |
74 return false; | |
75 } | |
76 | 71 |
77 this->setVsync(false); | |
78 this->resetContext(); | 72 this->resetContext(); |
79 return true; | 73 return true; |
80 } | 74 } |
81 | 75 |
82 void VisualBench::resetContext() { | 76 void VisualBench::resetContext() { |
77 this->tearDownContext(); | |
78 this->setupContext(); | |
79 } | |
80 | |
81 void VisualBench::setupContext() { | |
82 if (!this->attach(kNativeGL_BackEndType, FLAGS_msaa, &fAttachmentInfo)) { | |
83 SkDebugf("Not possible to create backend.\n"); | |
84 INHERITED::detach(); | |
85 SkFAIL("Could not create backend\n"); | |
86 } | |
87 | |
88 this->setVsync(false); | |
89 | |
83 fSurface.reset(nullptr); | 90 fSurface.reset(nullptr); |
84 | 91 |
85 fInterface.reset(GrGLCreateNativeInterface()); | 92 fInterface.reset(GrGLCreateNativeInterface()); |
86 | 93 |
87 // TODO use the GLContext creation factories and also set this all up in con figs | 94 // TODO use the GLContext creation factories and also set this all up in con figs |
88 if (!FLAGS_nvpr) { | 95 if (!FLAGS_nvpr) { |
89 fInterface.reset(GrGLInterfaceRemoveNVPR(fInterface)); | 96 fInterface.reset(GrGLInterfaceRemoveNVPR(fInterface)); |
90 } | 97 } |
91 SkASSERT(fInterface); | 98 SkASSERT(fInterface); |
92 | 99 |
93 // setup contexts | 100 // setup contexts |
94 fContext.reset(GrContext::Create(kOpenGL_GrBackend, (GrBackendContext)fInter face.get())); | 101 fContext.reset(GrContext::Create(kOpenGL_GrBackend, (GrBackendContext)fInter face.get())); |
95 SkASSERT(fContext); | 102 SkASSERT(fContext); |
96 | 103 |
97 // setup rendertargets | 104 // setup rendertargets |
98 this->setupRenderTarget(); | 105 this->setupRenderTarget(); |
99 } | 106 } |
100 | 107 |
108 void VisualBench::tearDownContext() { | |
109 if (fContext) { | |
110 // We abandon the context in case SkWindow has kept a ref to the surface | |
111 fContext->abandonContext(); | |
bsalomon
2015/10/21 14:52:05
It'd be really nice to refactor SkOSWindow a littl
| |
112 fContext.reset(); | |
113 fSurface.reset(); | |
114 fInterface.reset(); | |
115 this->detach(); | |
116 } | |
117 } | |
118 | |
101 void VisualBench::setupRenderTarget() { | 119 void VisualBench::setupRenderTarget() { |
102 if (fContext) { | 120 if (fContext) { |
103 fRenderTarget.reset(this->renderTarget(fAttachmentInfo, fInterface, fCon text)); | 121 fRenderTarget.reset(this->renderTarget(fAttachmentInfo, fInterface, fCon text)); |
104 } | 122 } |
105 } | 123 } |
106 | 124 |
107 void VisualBench::draw(SkCanvas* canvas) { | 125 void VisualBench::draw(SkCanvas* canvas) { |
108 fModule->draw(canvas); | 126 fModule->draw(canvas); |
109 | 127 |
110 // Invalidate the window to force a redraw. Poor man's animation mechanism. | 128 // Invalidate the window to force a redraw. Poor man's animation mechanism. |
(...skipping 30 matching lines...) Expand all Loading... | |
141 } | 159 } |
142 | 160 |
143 void application_term() { | 161 void application_term() { |
144 SkEvent::Term(); | 162 SkEvent::Term(); |
145 } | 163 } |
146 | 164 |
147 SkOSWindow* create_sk_window(void* hwnd, int argc, char** argv) { | 165 SkOSWindow* create_sk_window(void* hwnd, int argc, char** argv) { |
148 return new VisualBench(hwnd, argc, argv); | 166 return new VisualBench(hwnd, argc, argv); |
149 } | 167 } |
150 | 168 |
OLD | NEW |