| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2016 Google Inc. | 2 * Copyright 2016 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 #ifndef SkLinearBitmapPipeline_DEFINED | 8 #ifndef SkLinearBitmapPipeline_DEFINED |
| 9 #define SkLinearBitmapPipeline_DEFINED | 9 #define SkLinearBitmapPipeline_DEFINED |
| 10 | 10 |
| 11 #include "SkColor.h" | 11 #include "SkColor.h" |
| 12 #include "SkImageInfo.h" | 12 #include "SkImageInfo.h" |
| 13 #include "SkMatrix.h" | 13 #include "SkMatrix.h" |
| 14 #include "SkShader.h" | 14 #include "SkShader.h" |
| 15 #include "SkSmallAllocator.h" |
| 15 | 16 |
| 16 class SkEmbeddableLinearPipeline; | 17 class SkEmbeddableLinearPipeline; |
| 17 | 18 |
| 18 enum SkGammaType { | 19 enum SkGammaType { |
| 19 kLinear_SkGammaType, | 20 kLinear_SkGammaType, |
| 20 kSRGB_SkGammaType, | 21 kSRGB_SkGammaType, |
| 21 }; | 22 }; |
| 22 | 23 |
| 23 ////////////////////////////////////////////////////////////////////////////////
/////////////////// | 24 ////////////////////////////////////////////////////////////////////////////////
/////////////////// |
| 24 // SkLinearBitmapPipeline - encapsulates all the machinery for doing floating po
int pixel | 25 // SkLinearBitmapPipeline - encapsulates all the machinery for doing floating po
int pixel |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 118 | 119 |
| 119 }; | 120 }; |
| 120 | 121 |
| 121 class PointProcessorInterface; | 122 class PointProcessorInterface; |
| 122 class SampleProcessorInterface; | 123 class SampleProcessorInterface; |
| 123 class BlendProcessorInterface; | 124 class BlendProcessorInterface; |
| 124 class DestinationInterface; | 125 class DestinationInterface; |
| 125 class PixelAccessorInterface; | 126 class PixelAccessorInterface; |
| 126 | 127 |
| 127 // These values were generated by the assert above in Stage::init{Sink|Stage
}. | 128 // These values were generated by the assert above in Stage::init{Sink|Stage
}. |
| 128 using MatrixStage = Stage<PointProcessorInterface, 56, PointProcessorIn
terface>; | |
| 129 using TileStage = Stage<PointProcessorInterface, 48, SampleProcessorI
nterface>; | 129 using TileStage = Stage<PointProcessorInterface, 48, SampleProcessorI
nterface>; |
| 130 using SampleStage = Stage<SampleProcessorInterface, 160, BlendProcessorIn
terface>; | 130 using SampleStage = Stage<SampleProcessorInterface, 160, BlendProcessorIn
terface>; |
| 131 using BlenderStage = Stage<BlendProcessorInterface, 48>; | 131 using BlenderStage = Stage<BlendProcessorInterface, 48>; |
| 132 using Accessor = PolyMemory<PixelAccessorInterface, 64>; | 132 using Accessor = PolyMemory<PixelAccessorInterface, 64>; |
| 133 | 133 |
| 134 private: | 134 private: |
| 135 PointProcessorInterface* ChooseMatrix( |
| 136 PointProcessorInterface* next, |
| 137 const SkMatrix& inverse); |
| 138 |
| 139 using MemoryAllocator = SkSmallAllocator<64, 1>; |
| 140 using MatrixCloner = |
| 141 std::function<PointProcessorInterface* (PointProcessorInterface*, Memory
Allocator*)>; |
| 142 |
| 143 MemoryAllocator fMemory; |
| 135 PointProcessorInterface* fFirstStage; | 144 PointProcessorInterface* fFirstStage; |
| 136 MatrixStage fMatrixStage; | 145 MatrixCloner fMatrixStageCloner; |
| 137 TileStage fTileStage; | 146 TileStage fTileStage; |
| 138 SampleStage fSampleStage; | 147 SampleStage fSampleStage; |
| 139 BlenderStage fBlenderStage; | 148 BlenderStage fBlenderStage; |
| 140 DestinationInterface* fLastStage; | 149 DestinationInterface* fLastStage; |
| 141 Accessor fAccessor; | 150 Accessor fAccessor; |
| 142 }; | 151 }; |
| 143 | 152 |
| 144 ////////////////////////////////////////////////////////////////////////////////
//////////////////// | 153 ////////////////////////////////////////////////////////////////////////////////
//////////////////// |
| 145 // SkEmbeddableLinearPipeline - manage stricter alignment needs for SkLinearBitm
apPipeline. | 154 // SkEmbeddableLinearPipeline - manage stricter alignment needs for SkLinearBitm
apPipeline. |
| 146 class SkEmbeddableLinearPipeline { | 155 class SkEmbeddableLinearPipeline { |
| (...skipping 16 matching lines...) Expand all Loading... |
| 163 } | 172 } |
| 164 SkLinearBitmapPipeline& operator*() const { return *this->get(); } | 173 SkLinearBitmapPipeline& operator*() const { return *this->get(); } |
| 165 SkLinearBitmapPipeline* operator->() const { return this->get(); } | 174 SkLinearBitmapPipeline* operator->() const { return this->get(); } |
| 166 | 175 |
| 167 private: | 176 private: |
| 168 alignas(SkLinearBitmapPipeline) mutable char fPipelineStorage[sizeof(SkLinea
rBitmapPipeline)]; | 177 alignas(SkLinearBitmapPipeline) mutable char fPipelineStorage[sizeof(SkLinea
rBitmapPipeline)]; |
| 169 bool fInitialized {false}; | 178 bool fInitialized {false}; |
| 170 }; | 179 }; |
| 171 | 180 |
| 172 #endif // SkLinearBitmapPipeline_DEFINED | 181 #endif // SkLinearBitmapPipeline_DEFINED |
| OLD | NEW |