OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef WebGLImageConversion_h | 5 #ifndef WebGLImageConversion_h |
6 #define WebGLImageConversion_h | 6 #define WebGLImageConversion_h |
7 | 7 |
8 #include "platform/PlatformExport.h" | 8 #include "platform/PlatformExport.h" |
9 #include "platform/graphics/Image.h" | 9 #include "platform/graphics/Image.h" |
10 #include "platform/graphics/skia/ImagePixelLocker.h" | 10 #include "platform/graphics/skia/ImagePixelLocker.h" |
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
142 } | 142 } |
143 unsigned imageWidth() { return m_imageWidth; } | 143 unsigned imageWidth() { return m_imageWidth; } |
144 unsigned imageHeight() { return m_imageHeight; } | 144 unsigned imageHeight() { return m_imageHeight; } |
145 DataFormat imageSourceFormat() { return m_imageSourceFormat; } | 145 DataFormat imageSourceFormat() { return m_imageSourceFormat; } |
146 AlphaOp imageAlphaOp() { return m_alphaOp; } | 146 AlphaOp imageAlphaOp() { return m_alphaOp; } |
147 unsigned imageSourceUnpackAlignment() { | 147 unsigned imageSourceUnpackAlignment() { |
148 return m_imageSourceUnpackAlignment; | 148 return m_imageSourceUnpackAlignment; |
149 } | 149 } |
150 | 150 |
151 private: | 151 private: |
152 // Extract the image and keeps track of its status, such as width, height, S
ource Alignment, | 152 // Extracts the image and keeps track of its status, such as width, height, |
153 // format and AlphaOp etc. This needs to lock the resources or relevant data
if needed. | 153 // Source Alignment, format, AlphaOp, etc. This needs to lock the resources |
| 154 // or relevant data if needed. |
154 void extractImage(bool premultiplyAlpha, bool ignoreGammaAndColorProfile); | 155 void extractImage(bool premultiplyAlpha, bool ignoreGammaAndColorProfile); |
155 | 156 |
156 Image* m_image; | 157 Image* m_image; |
157 Optional<ImagePixelLocker> m_imagePixelLocker; | 158 Optional<ImagePixelLocker> m_imagePixelLocker; |
158 ImageHtmlDomSource m_imageHtmlDomSource; | 159 ImageHtmlDomSource m_imageHtmlDomSource; |
159 unsigned m_imageWidth; | 160 unsigned m_imageWidth; |
160 unsigned m_imageHeight; | 161 unsigned m_imageHeight; |
161 DataFormat m_imageSourceFormat; | 162 DataFormat m_imageSourceFormat; |
162 AlphaOp m_alphaOp; | 163 AlphaOp m_alphaOp; |
163 unsigned m_imageSourceUnpackAlignment; | 164 unsigned m_imageSourceUnpackAlignment; |
(...skipping 20 matching lines...) Expand all Loading... |
184 static GLenum computeImageSizeInBytes(GLenum format, | 185 static GLenum computeImageSizeInBytes(GLenum format, |
185 GLenum type, | 186 GLenum type, |
186 GLsizei width, | 187 GLsizei width, |
187 GLsizei height, | 188 GLsizei height, |
188 GLsizei depth, | 189 GLsizei depth, |
189 const PixelStoreParams&, | 190 const PixelStoreParams&, |
190 unsigned* imageSizeInBytes, | 191 unsigned* imageSizeInBytes, |
191 unsigned* paddingInBytes, | 192 unsigned* paddingInBytes, |
192 unsigned* skipSizeInBytes); | 193 unsigned* skipSizeInBytes); |
193 | 194 |
194 // Check if the format is one of the formats from the ImageData or DOM element
s. | 195 // Check if the format is one of the formats from the ImageData or DOM |
195 // The formats from ImageData is always RGBA8. | 196 // elements. The format from ImageData is always RGBA8. The formats from DOM |
196 // The formats from DOM elements vary with Graphics ports. It can only be RGBA
8 or BGRA8. | 197 // elements vary with Graphics ports, but can only be RGBA8 or BGRA8. |
197 static ALWAYS_INLINE bool srcFormatComeFromDOMElementOrImageData( | 198 static ALWAYS_INLINE bool srcFormatComeFromDOMElementOrImageData( |
198 DataFormat SrcFormat) { | 199 DataFormat SrcFormat) { |
199 return SrcFormat == DataFormatBGRA8 || SrcFormat == DataFormatRGBA8; | 200 return SrcFormat == DataFormatBGRA8 || SrcFormat == DataFormatRGBA8; |
200 } | 201 } |
201 | 202 |
202 // The input can be either format or internalformat. | 203 // The input can be either format or internalformat. |
203 static unsigned getChannelBitsByFormat(GLenum); | 204 static unsigned getChannelBitsByFormat(GLenum); |
204 | 205 |
205 // The Following functions are implemented in GraphicsContext3DImagePacking.cp
p | 206 // The Following functions are implemented in |
| 207 // GraphicsContext3DImagePacking.cpp. |
206 | 208 |
207 // Packs the contents of the given Image which is passed in |pixels| into the
passed Vector | 209 // Packs the contents of the given Image, which is passed in |pixels|, into |
208 // according to the given format and type, and obeying the flipY and AlphaOp f
lags. | 210 // the passed Vector according to the given format and type, and obeying the |
209 // Returns true upon success. | 211 // flipY and AlphaOp flags. Returns true upon success. |
210 static bool packImageData(Image*, | 212 static bool packImageData(Image*, |
211 const void* pixels, | 213 const void* pixels, |
212 GLenum format, | 214 GLenum format, |
213 GLenum type, | 215 GLenum type, |
214 bool flipY, | 216 bool flipY, |
215 AlphaOp, | 217 AlphaOp, |
216 DataFormat sourceFormat, | 218 DataFormat sourceFormat, |
217 unsigned width, | 219 unsigned width, |
218 unsigned height, | 220 unsigned height, |
219 unsigned sourceUnpackAlignment, | 221 unsigned sourceUnpackAlignment, |
(...skipping 24 matching lines...) Expand all Loading... |
244 unsigned unpackAlignment, | 246 unsigned unpackAlignment, |
245 bool flipY, | 247 bool flipY, |
246 bool premultiplyAlpha, | 248 bool premultiplyAlpha, |
247 const void* pixels, | 249 const void* pixels, |
248 Vector<uint8_t>& data); | 250 Vector<uint8_t>& data); |
249 | 251 |
250 // End GraphicsContext3DImagePacking.cpp functions | 252 // End GraphicsContext3DImagePacking.cpp functions |
251 | 253 |
252 private: | 254 private: |
253 friend class WebGLImageConversionTest; | 255 friend class WebGLImageConversionTest; |
254 // Helper for packImageData/extractImageData/extractTextureData which implemen
t packing of pixel | 256 // Helper for packImageData/extractImageData/extractTextureData, which |
255 // data into the specified OpenGL destination format and type. | 257 // implement packing of pixel data into the specified OpenGL destination |
256 // A sourceUnpackAlignment of zero indicates that the source | 258 // format and type. A sourceUnpackAlignment of zero indicates that the source |
257 // data is tightly packed. Non-zero values may take a slow path. | 259 // data is tightly packed. Non-zero values may take a slow path. Destination |
258 // Destination data will have no gaps between rows. | 260 // data will have no gaps between rows. Implemented in |
259 // Implemented in GraphicsContext3DImagePacking.cpp | 261 // GraphicsContext3DImagePacking.cpp. |
260 static bool packPixels(const uint8_t* sourceData, | 262 static bool packPixels(const uint8_t* sourceData, |
261 DataFormat sourceDataFormat, | 263 DataFormat sourceDataFormat, |
262 unsigned width, | 264 unsigned width, |
263 unsigned height, | 265 unsigned height, |
264 unsigned sourceUnpackAlignment, | 266 unsigned sourceUnpackAlignment, |
265 unsigned destinationFormat, | 267 unsigned destinationFormat, |
266 unsigned destinationType, | 268 unsigned destinationType, |
267 AlphaOp, | 269 AlphaOp, |
268 void* destinationData, | 270 void* destinationData, |
269 bool flipY); | 271 bool flipY); |
270 static void unpackPixels(const uint16_t* sourceData, | 272 static void unpackPixels(const uint16_t* sourceData, |
271 DataFormat sourceDataFormat, | 273 DataFormat sourceDataFormat, |
272 unsigned pixelsPerRow, | 274 unsigned pixelsPerRow, |
273 uint8_t* destinationData); | 275 uint8_t* destinationData); |
274 static void packPixels(const uint8_t* sourceData, | 276 static void packPixels(const uint8_t* sourceData, |
275 DataFormat sourceDataFormat, | 277 DataFormat sourceDataFormat, |
276 unsigned pixelsPerRow, | 278 unsigned pixelsPerRow, |
277 uint8_t* destinationData); | 279 uint8_t* destinationData); |
278 }; | 280 }; |
279 | 281 |
280 } // namespace blink | 282 } // namespace blink |
281 | 283 |
282 #endif // WebGLImageConversion_h | 284 #endif // WebGLImageConversion_h |
OLD | NEW |