SkShader::Context* SkBitmapProcShader::onCreateContext(const ContextRec& rec, void* storage) const { if (!fRawBitmap.getTexture() && !valid_for_drawing(fRawBitmap)) { return NULL; } SkMatrix totalInverse; // Do this first, so we know the matrix can be inverted. if (!this->computeTotalInverse(rec, &totalInverse)) { return NULL; } void* stateStorage = (char*)storage + sizeof(BitmapProcShaderContext); SkBitmapProcState* state = SkNEW_PLACEMENT(stateStorage, SkBitmapProcState); SkASSERT(state); state->fTileModeX = fTileModeX; state->fTileModeY = fTileModeY; state->fOrigBitmap = fRawBitmap; if (!state->chooseProcs(totalInverse, *rec.fPaint)) { state->~SkBitmapProcState(); return NULL; } return SkNEW_PLACEMENT_ARGS(storage, BitmapProcShaderContext, (*this, rec, state)); }
SkShader::Context* SkBitmapProcShader::MakeContext(const SkShader& shader, TileMode tmx, TileMode tmy, const SkBitmapProvider& provider, const ContextRec& rec, void* storage) { SkMatrix totalInverse; // Do this first, so we know the matrix can be inverted. if (!shader.computeTotalInverse(rec, &totalInverse)) { return nullptr; } void* stateStorage = (char*)storage + sizeof(BitmapProcShaderContext); SkBitmapProcState* state = new (stateStorage) SkBitmapProcState(provider, tmx, tmy); SkASSERT(state); if (!state->chooseProcs(totalInverse, *rec.fPaint)) { state->~SkBitmapProcState(); return nullptr; } return new (storage) BitmapProcShaderContext(shader, rec, state); }
SkShader::Context* SkBitmapProcShader::onCreateContext(const ContextRec& rec, void* storage) const { SkMatrix totalInverse; // Do this first, so we know the matrix can be inverted. if (!this->computeTotalInverse(rec, &totalInverse)) { return NULL; } void* stateStorage = (char*)storage + sizeof(BitmapProcShaderContext); SkBitmapProcState* state = new (stateStorage) SkBitmapProcState; SkASSERT(state); state->fTileModeX = fTileModeX; state->fTileModeY = fTileModeY; state->fOrigBitmap = fRawBitmap; if (!state->chooseProcs(totalInverse, *rec.fPaint)) { state->~SkBitmapProcState(); return NULL; } return new (storage) BitmapProcShaderContext(*this, rec, state); }