OLD | NEW |
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2016 Google Inc. | 3 * Copyright 2016 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 "../GLWindowContext.h" | 9 #include "../GLWindowContext.h" |
10 #include "SkCanvas.h" | 10 #include "SkCanvas.h" |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
114 // We made/have an off-screen surface. Get the contents as an SkImage: | 114 // We made/have an off-screen surface. Get the contents as an SkImage: |
115 sk_sp<SkImage> snapshot = fBackbufferSurface->makeImageSnapshot(); | 115 sk_sp<SkImage> snapshot = fBackbufferSurface->makeImageSnapshot(); |
116 | 116 |
117 // With ten-bit output, we need to manually apply the gamma of the outpu
t device | 117 // With ten-bit output, we need to manually apply the gamma of the outpu
t device |
118 // (unless we're in non-gamma correct mode, in which case our data is al
ready | 118 // (unless we're in non-gamma correct mode, in which case our data is al
ready |
119 // fake-sRGB, like we're expected to put in the 10-bit buffer): | 119 // fake-sRGB, like we're expected to put in the 10-bit buffer): |
120 bool doGamma = (fActualColorBits == 30) && | 120 bool doGamma = (fActualColorBits == 30) && |
121 (fDisplayParams.fColorSpace != nullptr || | 121 (fDisplayParams.fColorSpace != nullptr || |
122 kRGBA_F16_SkColorType == fDisplayParams.fColorType); | 122 kRGBA_F16_SkColorType == fDisplayParams.fColorType); |
123 SkPaint gammaPaint; | 123 SkPaint gammaPaint; |
124 gammaPaint.setXfermodeMode(SkXfermode::kSrc_Mode); | 124 gammaPaint.setBlendMode(SkBlendMode::kSrc); |
125 if (doGamma) { | 125 if (doGamma) { |
126 gammaPaint.setColorFilter(SkGammaColorFilter::Make(1.0f / 2.2f)); | 126 gammaPaint.setColorFilter(SkGammaColorFilter::Make(1.0f / 2.2f)); |
127 } | 127 } |
128 | 128 |
129 sk_sp<SkSurface> gpuSurface = INHERITED::getBackbufferSurface(); | 129 sk_sp<SkSurface> gpuSurface = INHERITED::getBackbufferSurface(); |
130 SkCanvas* gpuCanvas = gpuSurface->getCanvas(); | 130 SkCanvas* gpuCanvas = gpuSurface->getCanvas(); |
131 gpuCanvas->drawImage(snapshot, 0, 0, &gammaPaint); | 131 gpuCanvas->drawImage(snapshot, 0, 0, &gammaPaint); |
132 gpuCanvas->flush(); | 132 gpuCanvas->flush(); |
133 | 133 |
134 SDL_GL_SwapWindow(fWindow); | 134 SDL_GL_SwapWindow(fWindow); |
135 } | 135 } |
136 } | 136 } |
137 | 137 |
138 } // anonymous namespace | 138 } // anonymous namespace |
139 | 139 |
140 namespace sk_app { | 140 namespace sk_app { |
141 namespace window_context_factory { | 141 namespace window_context_factory { |
142 | 142 |
143 WindowContext* NewRasterForMac(const MacWindowInfo& info, const DisplayParams& p
arams) { | 143 WindowContext* NewRasterForMac(const MacWindowInfo& info, const DisplayParams& p
arams) { |
144 WindowContext* ctx = new RasterWindowContext_mac(info, params); | 144 WindowContext* ctx = new RasterWindowContext_mac(info, params); |
145 if (!ctx->isValid()) { | 145 if (!ctx->isValid()) { |
146 delete ctx; | 146 delete ctx; |
147 return nullptr; | 147 return nullptr; |
148 } | 148 } |
149 return ctx; | 149 return ctx; |
150 } | 150 } |
151 | 151 |
152 } // namespace window_context_factory | 152 } // namespace window_context_factory |
153 } // namespace sk_app | 153 } // namespace sk_app |
OLD | NEW |