#include "src/shaders/SkImageShader.h"
#include "include/core/SkAlphaType.h"
#include "include/core/SkBitmap.h"
#include "include/core/SkBlendMode.h"
#include "include/core/SkColorType.h"
#include "include/core/SkMatrix.h"
#include "include/core/SkPaint.h"
#include "include/core/SkPixmap.h"
#include "include/core/SkScalar.h"
#include "include/core/SkShader.h"
#include "include/core/SkTileMode.h"
#include "include/private/base/SkMath.h"
#include "modules/skcms/skcms.h"
#include "src/base/SkArenaAlloc.h"
#include "src/core/SkBitmapProcState.h"
#include "src/core/SkColorSpaceXformSteps.h"
#include "src/core/SkEffectPriv.h"
#include "src/core/SkImageInfoPriv.h"
#include "src/core/SkImagePriv.h"
#include "src/core/SkMipmapAccessor.h"
#include "src/core/SkPicturePriv.h"
#include "src/core/SkRasterPipeline.h"
#include "src/core/SkRasterPipelineOpContexts.h"
#include "src/core/SkRasterPipelineOpList.h"
#include "src/core/SkReadBuffer.h"
#include "src/core/SkSamplingPriv.h"
#include "src/core/SkWriteBuffer.h"
#include "src/image/SkImage_Base.h"
#ifdef SK_ENABLE_LEGACY_SHADERCONTEXT
#include "src/shaders/SkBitmapProcShader.h"
#endif
#include <optional>
#include <tuple>
#include <utility>
class SkColorSpace;
SkM44 SkImageShader::CubicResamplerMatrix(float B, float C) { … }
static SkTileMode optimize(SkTileMode tm, int dimension) { … }
#if defined(SK_DEBUG)
static bool needs_subset(SkImage* img, const SkRect& subset) { … }
#endif
SkImageShader::SkImageShader(sk_sp<SkImage> img,
const SkRect& subset,
SkTileMode tmx, SkTileMode tmy,
const SkSamplingOptions& sampling,
bool raw,
bool clampAsIfUnpremul)
: … { … }
enum class LegacyFilterEnum { … };
sk_sp<SkFlattenable> SkImageShader::CreateProc(SkReadBuffer& buffer) { … }
void SkImageShader::flatten(SkWriteBuffer& buffer) const { … }
bool SkImageShader::isOpaque() const { … }
#ifdef SK_ENABLE_LEGACY_SHADERCONTEXT
static bool legacy_shader_can_handle(const SkMatrix& inv) { … }
SkShaderBase::Context* SkImageShader::onMakeContext(const ContextRec& rec,
SkArenaAlloc* alloc) const { … }
#endif
SkImage* SkImageShader::onIsAImage(SkMatrix* texM, SkTileMode xy[]) const { … }
sk_sp<SkShader> SkImageShader::Make(sk_sp<SkImage> image,
SkTileMode tmx, SkTileMode tmy,
const SkSamplingOptions& options,
const SkMatrix* localMatrix,
bool clampAsIfUnpremul) { … }
sk_sp<SkShader> SkImageShader::MakeRaw(sk_sp<SkImage> image,
SkTileMode tmx, SkTileMode tmy,
const SkSamplingOptions& options,
const SkMatrix* localMatrix) { … }
sk_sp<SkShader> SkImageShader::MakeSubset(sk_sp<SkImage> image,
const SkRect& subset,
SkTileMode tmx, SkTileMode tmy,
const SkSamplingOptions& options,
const SkMatrix* localMatrix,
bool clampAsIfUnpremul) { … }
sk_sp<SkShader> SkMakeBitmapShaderForPaint(const SkPaint& paint, const SkBitmap& src,
SkTileMode tmx, SkTileMode tmy,
const SkSamplingOptions& sampling,
const SkMatrix* localMatrix, SkCopyPixelsMode mode) { … }
SkRect SkModifyPaintAndDstForDrawImageRect(const SkImage* image,
const SkSamplingOptions& sampling,
SkRect src,
SkRect dst,
bool strictSrcSubset,
SkPaint* paint) { … }
void SkShaderBase::RegisterFlattenables() { … }
namespace {
struct MipLevelHelper { … };
}
static SkSamplingOptions tweak_sampling(SkSamplingOptions sampling, const SkMatrix& matrix) { … }
bool SkImageShader::appendStages(const SkStageRec& rec, const SkShaders::MatrixRec& mRec) const { … }
namespace SkShaders {
sk_sp<SkShader> Image(sk_sp<SkImage> image,
SkTileMode tmx, SkTileMode tmy,
const SkSamplingOptions& options,
const SkMatrix* localMatrix) { … }
sk_sp<SkShader> RawImage(sk_sp<SkImage> image,
SkTileMode tmx, SkTileMode tmy,
const SkSamplingOptions& options,
const SkMatrix* localMatrix) { … }
}