SkShader::Context::Context(const SkShader& shader, const ContextRec& rec) : fShader(shader), fCTM(*rec.fMatrix) { // Because the context parameters must be valid at this point, we know that the matrix is // invertible. SkAssertResult(fShader.computeTotalInverse(rec, &fTotalInverse)); fTotalInverseClass = (uint8_t)ComputeMatrixClass(fTotalInverse); fPaintAlpha = rec.fPaint->getAlpha(); }
bool SkShader::setContext(const SkBitmap& device, const SkPaint& paint, const SkMatrix& matrix) { SkASSERT(!this->setContextHasBeenCalled()); const SkMatrix* m = &matrix; SkMatrix total; fPaintAlpha = paint.getAlpha(); if (this->hasLocalMatrix()) { total.setConcat(matrix, this->getLocalMatrix()); m = &total; } if (m->invert(&fTotalInverse)) { fTotalInverseClass = (uint8_t)ComputeMatrixClass(fTotalInverse); SkDEBUGCODE(fInSetContext = true;) return true;
bool SkShader::setContext(const SkBitmap& device, const SkPaint& paint, const SkMatrix& matrix) { const SkMatrix* m = &matrix; SkMatrix total; fDeviceConfig = SkToU8(device.getConfig()); fPaintAlpha = paint.getAlpha(); if (fLocalMatrix) { total.setConcat(matrix, *fLocalMatrix); m = &total; } if (m->invert(&fTotalInverse)) { fTotalInverseClass = (uint8_t)ComputeMatrixClass(fTotalInverse); return true; } return false; }