Index: src/core/SkMipMap.h |
diff --git a/src/core/SkMipMap.h b/src/core/SkMipMap.h |
index 5cb4ea8ce670b30c90eec35455b65befd5c65d0c..fba6d07386eb5b25aab746137416506c32835cdc 100644 |
--- a/src/core/SkMipMap.h |
+++ b/src/core/SkMipMap.h |
@@ -12,6 +12,7 @@ |
#include "SkPixmap.h" |
#include "SkScalar.h" |
#include "SkSize.h" |
+#include "SkShader.h" |
class SkBitmap; |
class SkDiscardableMemory; |
@@ -20,8 +21,18 @@ typedef SkDiscardableMemory* (*SkDiscardableFactoryProc)(size_t bytes); |
class SkMipMap : public SkCachedData { |
public: |
- static SkMipMap* Build(const SkPixmap& src, SkDiscardableFactoryProc); |
- static SkMipMap* Build(const SkBitmap& src, SkDiscardableFactoryProc); |
+ enum SrcGammaMode { |
+ kIgnore_SrcGammaMode, // treat src as having linear gamma |
+ kRespect_SrcGammaMode, // treat src as described by its SkColorSpace |
+ }; |
+ |
+ static SkMipMap* Build(const SkPixmap& src, SrcGammaMode, SkDiscardableFactoryProc); |
+ static SkMipMap* Build(const SkBitmap& src, SrcGammaMode, SkDiscardableFactoryProc); |
+ |
+ static SrcGammaMode DeduceMode(const SkShader::ContextRec& rec) { |
+ return (SkShader::ContextRec::kPMColor_DstType == rec.fPreferredDstType) ? |
msarett
2016/06/03 16:54:17
We will never want to respect gamma with kPMColor_
reed1
2016/06/07 16:01:10
That is the policy I'm proposing:
- if the target
|
+ kIgnore_SrcGammaMode : kRespect_SrcGammaMode; |
+ } |
// Determines how many levels a SkMipMap will have without creating that mipmap. |
static int ComputeLevelCount(int baseWidth, int baseHeight); |
@@ -44,10 +55,10 @@ protected: |
} |
private: |
- Level* fLevels; |
- int fCount; |
+ sk_sp<SkColorSpace> fCS; |
+ Level* fLevels; // managed by the baseclass, may be null due to onDataChanged. |
+ int fCount; |
- // we take ownership of levels, and will free it with sk_free() |
SkMipMap(void* malloc, size_t size) : INHERITED(malloc, size) {} |
SkMipMap(size_t size, SkDiscardableMemory* dm) : INHERITED(size, dm) {} |