blob: 7d7bb49ec752e546783f0f6e09b70c122b7e974e [file] [log] [blame]
/*
* Copyright 2016 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef SkColorSpaceXform_A2B_DEFINED
#define SkColorSpaceXform_A2B_DEFINED
#include "SkArenaAlloc.h"
#include "SkColorSpaceXform_Base.h"
#include "SkColorSpace_Base.h"
#include "SkRasterPipeline.h"
class SkColorSpace_A2B;
class SkColorSpace_XYZ;
struct SkTableTransferFn {
const float* fData;
int fSize;
};
class SkColorSpaceXform_A2B : public SkColorSpaceXform_Base {
public:
bool onApply(ColorFormat dstFormat, void* dst, ColorFormat srcFormat, const void* src,
int count, SkAlphaType alphaType) const override;
private:
SkColorSpaceXform_A2B(SkColorSpace_A2B* srcSpace, SkColorSpace_XYZ* dstSpace);
void addTransferFns(const SkColorSpaceTransferFn& fn, int channelCount);
void addTransferFn(const SkColorSpaceTransferFn& fn, int channelIndex);
bool buildTableFn(SkTableTransferFn* table);
void addTableFn(const SkTableTransferFn& table, int channelIndex);
void addMatrix(const SkMatrix44& matrix);
SkRasterPipeline fElementsPipeline;
bool fLinearDstGamma;
SkArenaAlloc fAlloc{128}; // TODO: tune?
template <typename T>
T* copy(const T& val) { return fAlloc.make<T>(val); }
friend class SkColorSpaceXform_Base;
};
#endif